sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/core-api/mm-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hMemory Management APIsh]hMemory Management APIs}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh=/var/lib/git/docbuild/linux/Documentation/core-api/mm-api.rsthKubh)}(hhh](h)}(hUser Space Memory Accessh]hUser Space Memory Access}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleget_user (C macro) c.get_userhNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hget_userh]hdesc_signature_line)}(hget_userh]h desc_name)}(hget_userh]h desc_sig_name)}(hhh]hget_user}(hhhhhNhNubah}(h]h ]nah"]h$]h&]uh1hhhubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1hhhhhh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK[ubah}(h]h ]h"]h$]h&]jj  add_permalinkuh1hsphinx_line_type declaratorhhhhhj hK[ubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhj hK[hhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhhhhhj hK[ubeh}(h]h ](cmacroeh"]h$]h&]domainj-objtypej.desctypej.noindex noindexentrynocontentsentryuh1hhhhhhNhNubh paragraph)}(h``get_user (x, ptr)``h]hliteral)}(hj<h]hget_user (x, ptr)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK]hhhhubh block_quote)}(h'Get a simple variable from user space. h]j9)}(h&Get a simple variable from user space.h]h&Get a simple variable from user space.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK[hjVubah}(h]h ]h"]h$]h&]uh1jThjhhK[hhhhubh 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](j9)}(h**Parameters**h]hstrong)}(hjwh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjqubhdefinition_list)}(hhh](hdefinition_list_item)}(h ``x`` Variable to store result. h](hterm)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK\hjubh definition)}(hhh]j9)}(hVariable to store result.h]hVariable to store result.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubj)}(h'``ptr`` Source address, in user space. h](j)}(h``ptr``h]j?)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK]hjubj)}(hhh]j9)}(hSource address, in user space.h]hSource address, in user space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjqubj9)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjqubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKbhjqubj9)}(hThis 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]hThis 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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKahjqubj9)}(h**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.h](jz)}(h**ptr**h]hptr}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubhL must have pointer-to-simple-variable type, and the result of dereferencing }(hj`hhhNhNubjz)}(h**ptr**h]hptr}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh must be assignable to }(hj`hhhNhNubjz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh without a cast.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKehjqubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhjqubj9)}(hRzero 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 }(hjhhhNhNubjz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is set to zero.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKihjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__get_user (C macro) c.__get_userhNtauh1hhhhhhNhNubh)}(hhh](h)}(h __get_userh]h)}(h __get_userh]h)}(h __get_userh]h)}(hjh]h __get_user}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKoubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKoubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKohjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKoubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhhhNhNubj9)}(h``__get_user (x, ptr)``h]j?)}(hj0h]h__get_user (x, ptr)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKqhhhhubjU)}(h;Get a simple variable from user space, with less checking. h]j9)}(h:Get a simple variable from user space, with less checking.h]h:Get a simple variable from user space, with less checking.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKohjFubah}(h]h ]h"]h$]h&]uh1jThjXhKohhhhubjp)}(hX**Parameters** ``x`` Variable to store result. ``ptr`` Source address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast. Caller must check the pointer with access_ok() before calling this function. **Return** zero on success, or -EFAULT on error. On error, the variable **x** is set to zero.h](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKshj_ubj)}(hhh](j)}(h ``x`` Variable to store result. h](j)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKphj~ubj)}(hhh]j9)}(hVariable to store result.h]hVariable to store result.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKphjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKphj{ubj)}(h'``ptr`` Source address, in user space. h](j)}(h``ptr``h]j?)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKqhjubj)}(hhh]j9)}(hSource address, in user space.h]hSource address, in user space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKshj_ubj9)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKshj_ubj9)}(h**Description**h]jz)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKvhj_ubj9)}(hThis 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]hThis 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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKuhj_ubj9)}(h**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.h](jz)}(h**ptr**h]hptr}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubhL must have pointer-to-simple-variable type, and the result of dereferencing }(hjDhhhNhNubjz)}(h**ptr**h]hptr}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh must be assignable to }(hjDhhhNhNubjz)}(h**x**h]hx}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh without a cast.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKyhj_ubj9)}(hLCaller must check the pointer with access_ok() before calling this function.h]hLCaller must check the pointer with access_ok() before calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK|hj_ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj_ubj9)}(hRzero 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 }(hjhhhNhNubjz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is set to zero.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_user (C macro) c.put_userhNtauh1hhhhhhNhNubh)}(hhh](h)}(hput_userh]h)}(hput_userh]h)}(hput_userh]h)}(hjh]hput_user}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubj9)}(h``put_user (x, ptr)``h]j?)}(hj#h]hput_user (x, ptr)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhhhubjU)}(h&Write a simple value into user space. h]j9)}(h%Write a simple value into user space.h]h%Write a simple value into user space.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj9ubah}(h]h ]h"]h$]h&]uh1jThjKhKhhhhubjp)}(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](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj)}(hhh](j)}(h#``x`` Value to copy to user space. h](j)}(h``x``h]j?)}(hjwh]hx}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjqubj)}(hhh]j9)}(hValue to copy to user space.h]hValue to copy to user space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjnubj)}(h,``ptr`` Destination address, in user space. h](j)}(h``ptr``h]j?)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjubj)}(hhh]j9)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(hThis 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]hThis macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(hw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.h](jz)}(h**ptr**h]hptr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh0 must have pointer-to-simple-variable type, and }(hj7hhhNhNubjz)}(h**x**h]hx}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh3 must be assignable to the result of dereferencing }(hj7hhhNhNubjz)}(h**ptr**h]hptr}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(h **Return**h]jz)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubj9)}(h%zero on success, or -EFAULT on error.h]h%zero on success, or -EFAULT on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__put_user (C macro) c.__put_userhNtauh1hhhhhhNhNubh)}(hhh](h)}(h __put_userh]h)}(h __put_userh]h)}(h __put_userh]h)}(hjh]h __put_user}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubj9)}(h``__put_user (x, ptr)``h]j?)}(hjh]h__put_user (x, ptr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhhhubjU)}(h:Write a simple value into user space, with less checking. h]j9)}(h9Write a simple value into user space, with less checking.h]h9Write a simple value into user space, with less checking.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj ubah}(h]h ]h"]h$]h&]uh1jThjhKhhhhubjp)}(hXn**Parameters** ``x`` Value to copy to user space. ``ptr`` Destination address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**. Caller must check the pointer with access_ok() before calling this function. **Return** zero on success, or -EFAULT on error.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj)}(hhh](j)}(h#``x`` Value to copy to user space. h](j)}(h``x``h]j?)}(hjIh]hx}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjCubj)}(hhh]j9)}(hValue to copy to user space.h]hValue to copy to user space.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj@ubj)}(h,``ptr`` Destination address, in user space. h](j)}(h``ptr``h]j?)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj|ubj)}(hhh]j9)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(hw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.h](jz)}(h**ptr**h]hptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh0 must have pointer-to-simple-variable type, and }(hj hhhNhNubjz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh3 must be assignable to the result of dereferencing }(hj hhhNhNubjz)}(h**ptr**h]hptr}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(hLCaller must check the pointer with access_ok() before calling this function.h]hLCaller must check the pointer with access_ok() before calling this function.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubj9)}(h%zero on success, or -EFAULT on error.h]h%zero on success, or -EFAULT on error.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclear_user (C function) c.clear_userhNtauh1hhhhhhNhNubh)}(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](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK4ubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhK4ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK4ubh)}(h clear_userh]h)}(h clear_userh]h clear_user}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK4ubhdesc_parameterlist)}(h"(void __user *to, unsigned long n)h](hdesc_parameter)}(hvoid __user *toh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hjhhhNhNubj)}(h h]h }(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hj3 hhhNhNubah}(h]h ]pah"]h$]h&]uh1j1 hjubh)}(htoh]hto}(hjB hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long nh](j)}(hunsignedh]hunsigned}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(h h]h }(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(hlongh]hlong}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubh)}(hhh]hn}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK4ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK4hjhhubj )}(hhh]j9)}(h%Zero a block of memory in user space.h]h%Zero a block of memory in user space.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK4hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhhhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK8hj ubj)}(hhh](j)}(h8``void __user *to`` Destination address, in user space. h](j)}(h``void __user *to``h]j?)}(hj h]hvoid __user *to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK5hj ubj)}(hhh]j9)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hK5hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK5hj ubj)}(h-``unsigned long n`` Number of bytes to zero. h](j)}(h``unsigned long n``h]j?)}(hj6 h]hunsigned long n}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK6hj0 ubj)}(hhh]j9)}(hNumber of bytes to zero.h]hNumber of bytes to zero.}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjK hK6hjL ubah}(h]h ]h"]h$]h&]uh1jhj0 ubeh}(h]h ]h"]h$]h&]uh1jhjK hK6hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjq h]h Description}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK8hj ubj9)}(h%Zero a block of memory in user space.h]h%Zero a block of memory in user space.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK8hj ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK:hj ubj9)}(hInumber of bytes that could not be cleared. On success, this will be zero.h]hInumber of bytes that could not be cleared. On success, this will be zero.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK:hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__clear_user (C function)c.__clear_userhNtauh1hhhhhhNhNubh)}(hhh](h)}(h=unsigned long __clear_user (void __user *to, unsigned long n)h]h)}(h ah"]h$]h&]uh1j1 hj2 ubh)}(htoh]hto}(hjq hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2 ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj. ubj)}(hunsigned long nh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]hn}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj. ubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hKHubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hKHubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hKHhj hhubj )}(hhh]j9)}(h9Zero a block of memory in user space, with less checking.h]h9Zero a block of memory in user space, with less checking.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKHhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKHubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhhhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKLhj ubj)}(hhh](j)}(h8``void __user *to`` Destination address, in user space. h](j)}(h``void __user *to``h]j?)}(hj, h]hvoid __user *to}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj* ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKIhj& ubj)}(hhh]j9)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjA hKIhjB ubah}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hKIhj# ubj)}(h-``unsigned long n`` Number of bytes to zero. h](j)}(h``unsigned long n``h]j?)}(hje h]hunsigned long n}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjc ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKJhj_ ubj)}(hhh]j9)}(hNumber of bytes to zero.h]hNumber of bytes to zero.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjz hKJhj{ ubah}(h]h ]h"]h$]h&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]uh1jhjz hKJhj# ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKLhj ubj9)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKLhj ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKOhj ubj9)}(hInumber of bytes that could not be cleared. On success, this will be zero.h]hInumber of bytes that could not be cleared. On success, this will be zero.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ get_user_pages_fast (C function)c.get_user_pages_fasthNtauh1hhhhhhNhNubh)}(hhh](h)}(hhint get_user_pages_fast (unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)h]h)}(hgint get_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMW ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMW ubh)}(hget_user_pages_fasth]h)}(hget_user_pages_fasth]hget_user_pages_fast}(hj- hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj) ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMW ubj)}(hP(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)h](j)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj)}(h h]h }(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj)}(hlongh]hlong}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj)}(h h]h }(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubh)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjA ubj)}(h int nr_pagesh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hnr_pagesh]hnr_pages}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjA ubj)}(hunsigned int gup_flagsh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(h gup_flagsh]h gup_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjA ubj)}(hstruct page **pagesh](hdesc_sig_keyword)}(hstructh]hstruct}(hj"hhhNhNubah}(h]h ]kah"]h$]h&]uh1j hjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftype identifier reftargetjDmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j] ASTIdentifier)}jXj/ sbc.get_user_pages_fastasbuh1hhjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjA ubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMW ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMW ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMW hj hhubj )}(hhh]j9)}(hpin user pages in memoryh]hpin user pages in memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMW hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMW ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM[ hjubj)}(hhh](j)}(h.``unsigned long start`` starting user address h](j)}(h``unsigned long start``h]j?)}(hjh]hunsigned long start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMX hjubj)}(hhh]j9)}(hstarting user addressh]hstarting user address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMX hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMX hjubj)}(h3``int nr_pages`` number of pages from start to pin h](j)}(h``int nr_pages``h]j?)}(hj6h]h int nr_pages}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMY hj0ubj)}(hhh]j9)}(h!number of pages from start to pinh]h!number of pages from start to pin}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMY hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMY hjubj)}(h9``unsigned int gup_flags`` flags modifying pin behaviour h](j)}(h``unsigned int gup_flags``h]j?)}(hjoh]hunsigned int gup_flags}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMZ hjiubj)}(hhh]j9)}(hflags modifying pin behaviourh]hflags modifying pin behaviour}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMZ hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMZ hjubj)}(hl``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]j?)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM\ hjubj)}(hhh]j9)}(hSarray that receives pointers to the pages pinned. Should be at least nr_pages long.h]hSarray that receives pointers to the pages pinned. Should be at least nr_pages long.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM[ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\ hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM^ hjubj9)}(hAttempt 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]hAttempt 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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM^ hjubj9)}(hReturns 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]hReturns 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chMb hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubhtarget)}(h.. _mm-api-gfp-flags:h]h}(h]h ]h"]h$]h&]refidmm-api-gfp-flagsuh1jhKhhhhhhubeh}(h]user-space-memory-accessah ]h"]user space memory accessah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMemory Allocation Controlsh]hMemory Allocation Controls}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKubh)}(hhh](h)}(h!Page mobility and placement hintsh]h!Page mobility and placement hints}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhNhNubj9)}(hThese 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]hThese 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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhK|hjFubj9)}(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](j?)}(h``__GFP_MOVABLE``h]h __GFP_MOVABLE}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubh| (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(h``__GFP_RECLAIMABLE`` is used for slab allocations that specify SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.h](j?)}(h``__GFP_RECLAIMABLE``h]h__GFP_RECLAIMABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhk is used for slab allocations that specify SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(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](j?)}(h``__GFP_WRITE``h]h __GFP_WRITE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 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).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(h@``__GFP_HARDWALL`` enforces the cpuset memory allocation policy.h](j?)}(h``__GFP_HARDWALL``h]h__GFP_HARDWALL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh. enforces the cpuset memory allocation policy.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(h``__GFP_THISNODE`` forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.h](j?)}(h``__GFP_THISNODE``h]h__GFP_THISNODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhr forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(hB``__GFP_ACCOUNT`` causes the allocation to be accounted to kmemcg.h](j?)}(h``__GFP_ACCOUNT``h]h __GFP_ACCOUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh1 causes the allocation to be accounted to kmemcg.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubj9)}(hH``__GFP_NO_OBJ_EXT`` causes slab allocation to have no object extension.h](j?)}(h``__GFP_NO_OBJ_EXT``h]h__GFP_NO_OBJ_EXT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh4 causes slab allocation to have no object extension.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjFubeh}(h]!page-mobility-and-placement-hintsah ]h"]!page mobility and placement hintsah$]h&]uh1hhj5hhhNhNubh)}(hhh](h)}(hhjJubh indicates that the caller is high-priority and that granting the request is necessary before the system can make forward progress. For example creating an IO context to clean pages and requests from atomic context.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:25: ./include/linux/gfp_types.hhKhj9ubj9)}(hXL``__GFP_MEMALLOC`` allows access to all memory. This should only be used when the caller guarantees the allocation will allow more memory to be freed very shortly e.g. process exiting or swapping. Users either should be the MM or co-ordinating closely with the VM (e.g. swap over NFS). Users of this flag have to be extremely careful to not deplete the reserve completely and implement a throttling mechanism which controls the consumption of the reserve based on the amount of freed memory. Usage of a pre-allocated pool (e.g. mempool) should be always considered before using this flag.h](j?)}(h``__GFP_MEMALLOC``h]h__GFP_MEMALLOC}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubhX: allows access to all memory. This should only be used when the caller guarantees the allocation will allow more memory to be freed very shortly e.g. process exiting or swapping. Users either should be the MM or co-ordinating closely with the VM (e.g. swap over NFS). Users of this flag have to be extremely careful to not deplete the reserve completely and implement a throttling mechanism which controls the consumption of the reserve based on the amount of freed memory. Usage of a pre-allocated pool (e.g. mempool) should be always considered before using this flag.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:25: ./include/linux/gfp_types.hhKhj9ubj9)}(h``__GFP_NOMEMALLOC`` is used to explicitly forbid access to emergency reserves. This takes precedence over the ``__GFP_MEMALLOC`` flag if both are set.h](j?)}(h``__GFP_NOMEMALLOC``h]h__GFP_NOMEMALLOC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh[ is used to explicitly forbid access to emergency reserves. This takes precedence over the }(hjhhhNhNubj?)}(h``__GFP_MEMALLOC``h]h__GFP_MEMALLOC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh flag if both are set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:25: ./include/linux/gfp_types.hhKhj9ubeh}(h]9watermark-modifiers-controls-access-to-emergency-reservesah ]h"]hjubh and }(hjhhhNhNubj?)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh will ignore them).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(h#``__GFP_IO`` can start physical IO.h](j?)}(h ``__GFP_IO``h]h__GFP_IO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh can start physical IO.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(h``__GFP_FS`` can call down to the low-level FS. Clearing the flag avoids the allocator recursing into the filesystem which might already be holding locks.h](j?)}(h ``__GFP_FS``h]h__GFP_FS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh can call down to the low-level FS. Clearing the flag avoids the allocator recursing into the filesystem which might already be holding locks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(h``__GFP_DIRECT_RECLAIM`` indicates that the caller may enter direct reclaim. This flag can be cleared to avoid unnecessary delays when a fallback option is available.h](j?)}(h``__GFP_DIRECT_RECLAIM``h]h__GFP_DIRECT_RECLAIM}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh indicates that the caller may enter direct reclaim. This flag can be cleared to avoid unnecessary delays when a fallback option is available.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(hX``__GFP_KSWAPD_RECLAIM`` indicates that the caller wants to wake kswapd when the low watermark is reached and have it reclaim pages until the high watermark is reached. A caller may wish to clear this flag when fallback options are available and the reclaim is likely to disrupt the system. The canonical example is THP allocation where a fallback is cheap but reclaim/compaction may cause indirect stalls.h](j?)}(h``__GFP_KSWAPD_RECLAIM``h]h__GFP_KSWAPD_RECLAIM}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubhX~ indicates that the caller wants to wake kswapd when the low watermark is reached and have it reclaim pages until the high watermark is reached. A caller may wish to clear this flag when fallback options are available and the reclaim is likely to disrupt the system. The canonical example is THP allocation where a fallback is cheap but reclaim/compaction may cause indirect stalls.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(hN``__GFP_RECLAIM`` is shorthand to allow/forbid both direct and kswapd reclaim.h](j?)}(h``__GFP_RECLAIM``h]h __GFP_RECLAIM}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh= is shorthand to allow/forbid both direct and kswapd reclaim.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(hXbThe default allocator behavior depends on the request size. We have a concept of so-called costly allocations (with order > ``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 > }(hjhhhNhNubj?)}(h``PAGE_ALLOC_COSTLY_ORDER``h]hPAGE_ALLOC_COSTLY_ORDER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX). !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 }(hjhhhNhNubj?)}(h``__GFP_DIRECT_RECLAIM``h]h__GFP_DIRECT_RECLAIM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh flag.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(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](j?)}(h``__GFP_NORETRY``h]h __GFP_NORETRY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX: 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(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](j?)}(h``__GFP_RETRY_MAYFAIL``h]h__GFP_RETRY_MAYFAIL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX: 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 }(hjhhhNhNubj?)}(h``__GFP_NORETRY``h]h __GFP_NORETRY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX. 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj9)}(hX``__GFP_NOFAIL``: The VM implementation _must_ retry infinitely: the caller cannot handle allocation failures. The allocation could block indefinitely but will never return with failure. Testing for failure is pointless. It _must_ be blockable and used together with __GFP_DIRECT_RECLAIM. It should _never_ be used in non-sleepable contexts. New users should be evaluated carefully (and the flag should be used only when there is no reasonable failure policy) but it is definitely preferable to use the flag rather than opencode endless loop around allocator. Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is not supported. Please consider using kvmalloc() instead.h](j?)}(h``__GFP_NOFAIL``h]h __GFP_NOFAIL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX: The VM implementation _must_ retry infinitely: the caller cannot handle allocation failures. The allocation could block indefinitely but will never return with failure. Testing for failure is pointless. It _must_ be blockable and used together with __GFP_DIRECT_RECLAIM. It should _never_ be used in non-sleepable contexts. New users should be evaluated carefully (and the flag should be used only when there is no reasonable failure policy) but it is definitely preferable to use the flag rather than opencode endless loop around allocator. Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is not supported. Please consider using kvmalloc() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubeh}(h]reclaim-modifiersah ]h"]reclaim modifiersah$]h&]uh1hhj5hhhNhNubh)}(hhh](h)}(hUseful GFP flag combinationsh]hUseful GFP flag combinations}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hNhNubj9)}(hUseful 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](hUseful GFP flag combinations that are commonly used. It is recommended that subsystems start with one of these combinations and then set/clear }(hjEhhhNhNubj?)}(h ``__GFP_FOO``h]h __GFP_FOO}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubh flags as necessary.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM6hj4ubj9)}(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 and few other strict non-preemptive contexts (e.g. raw_spin_lock). The same applies to ``GFP_NOWAIT``.h](j?)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubhX 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 and few other strict non-preemptive contexts (e.g. raw_spin_lock). The same applies to }(hjfhhhNhNubj?)}(h``GFP_NOWAIT``h]h GFP_NOWAIT}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM:hj4ubj9)}(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](j?)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhA is typical for kernel-internal allocations. The caller requires }(hjhhhNhNubj?)}(h``ZONE_NORMAL``h]h ZONE_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh: or a lower zone for direct access but can direct reclaim.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM?hj4ubj9)}(h_``GFP_KERNEL_ACCOUNT`` is the same as GFP_KERNEL, except the allocation is accounted to kmemcg.h](j?)}(h``GFP_KERNEL_ACCOUNT``h]hGFP_KERNEL_ACCOUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhI is the same as GFP_KERNEL, except the allocation is accounted to kmemcg.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMBhj4ubj9)}(h``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.h](j?)}(h``GFP_NOWAIT``h]h GFP_NOWAIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMEhj4ubj9)}(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](j?)}(h ``GFP_NOIO``h]hGFP_NOIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhXX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMIhj4ubj9)}(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](j?)}(h ``GFP_NOFS``h]hGFP_NOFS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhXA 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMPhj4ubj9)}(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](j?)}(h ``GFP_USER``h]hGFP_USER}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubhX 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.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMVhj4ubj9)}(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](j?)}(h ``GFP_DMA``h]hGFP_DMA}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubh exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (}(hjUhhhNhNubj?)}(h ``ZONE_DMA``h]hZONE_DMA}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubh 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 }(hjUhhhNhNubj?)}(h ``ZONE_DMA``h]hZONE_DMA}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubh: and treat the lowest zone as a type of emergency reserve.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM[hj4ubj9)}(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](j?)}(h ``GFP_DMA32``h]h GFP_DMA32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh is similar to }(hjhhhNhNubj?)}(h ``GFP_DMA``h]hGFP_DMA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 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).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMbhj4ubj9)}(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](j?)}(h``GFP_HIGHUSER``h]h GFP_HIGHUSER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMghj4ubj9)}(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](j?)}(h``GFP_HIGHUSER_MOVABLE``h]hGFP_HIGHUSER_MOVABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 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 }(hjhhhNhNubj?)}(h``GFP_HIGHUSER_MOVABLE``h]hGFP_HIGHUSER_MOVABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMlhj4ubj9)}(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](j?)}(h``GFP_TRANSHUGE``h]h GFP_TRANSHUGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh and }(hjhhhNhNubj?)}(h``GFP_TRANSHUGE_LIGHT``h]hGFP_TRANSHUGE_LIGHT}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX; 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMqhj4ubeh}(h]useful-gfp-flag-combinationsah ]h"]useful gfp flag combinationsah$]h&]uh1hhj5hhhNhNubeh}(h](memory-allocation-controlsj,eh ]h"](memory allocation controlsmm-api-gfp-flagseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jNj!sexpect_referenced_by_id}j,j!subh)}(hhh](h)}(hThe Slab Cacheh]hThe Slab Cache}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌSLAB_HWCACHE_ALIGN (C macro)c.SLAB_HWCACHE_ALIGNhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hSLAB_HWCACHE_ALIGNh]h)}(hSLAB_HWCACHE_ALIGNh]h)}(hSLAB_HWCACHE_ALIGNh]h)}(hjyh]hSLAB_HWCACHE_ALIGN}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKRubah}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhKRubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjhKRhjthhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjthhhjhKRubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjUhNhNubj9)}(h``SLAB_HWCACHE_ALIGN``h]j?)}(hjh]hSLAB_HWCACHE_ALIGN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKThjUhhubjU)}(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](jU)}(h(Align objects on cache line boundaries. h]j9)}(h'Align objects on cache line boundaries.h]h'Align objects on cache line boundaries.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKRhjubah}(h]h ]h"]h$]h&]uh1jThjhKRhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKThjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKShjubj9)}(hIf 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 }(hjhhhNhNubh)}(h2:c:type:`struct kmem_cache_args `h]j?)}(hjh]hstruct kmem_cache_args}(hjhhhNhNubah}(h]h ](xrefj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdoccore-api/mm-api refdomainj-reftypetype refexplicitrefwarnj\j_)}jb]sb reftargetkmem_cache_argsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKXhjubh5 field, the greater of both is alignments is applied.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj<hKXhjubeh}(h]h ]h"]h$]h&]uh1jThjhKRhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌSLAB_TYPESAFE_BY_RCU (C macro)c.SLAB_TYPESAFE_BY_RCUhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hSLAB_TYPESAFE_BY_RCUh]h)}(hSLAB_TYPESAFE_BY_RCUh]h)}(hSLAB_TYPESAFE_BY_RCUh]h)}(hj`h]hSLAB_TYPESAFE_BY_RCU}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKfubah}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj}hKfubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1hhj}hKfhj[hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj[hhhj}hKfubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjUhNhNubj9)}(h``SLAB_TYPESAFE_BY_RCU``h]j?)}(hjh]hSLAB_TYPESAFE_BY_RCU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhhjUhhubjU)}(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](jU)}(h**WARNING** READ THIS! h]j9)}(h**WARNING** READ THIS!h](jz)}(h **WARNING**h]hWARNING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh READ THIS!}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKfhjubah}(h]h ]h"]h$]h&]uh1jThjhKfhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKghjubj9)}(hThis 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]hThis 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKlhjubh literal_block)}(hX3begin: rcu_read_lock(); obj = lockless_lookup(key); if (obj) { if (!try_get_ref(obj)) // might fail for free objects rcu_read_unlock(); goto begin; if (obj->key != key) { // not the object we expected put_ref(obj); rcu_read_unlock(); goto begin; } } rcu_read_unlock();h]hX3begin: rcu_read_lock(); obj = lockless_lookup(key); if (obj) { if (!try_get_ref(obj)) // might fail for free objects rcu_read_unlock(); goto begin; if (obj->key != key) { // not the object we expected put_ref(obj); rcu_read_unlock(); goto begin; } } rcu_read_unlock();}hjsbah}(h]h ]h"]h$]h&]jj uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKrhjubj9)}(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$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(hrcu_read_lock before reading the address, then rcu_read_unlock after taking the spinlock within the structure expected at that address.h]hrcu_read_lock before reading the address, then rcu_read_unlock after taking the spinlock within the structure expected at that address.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(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 }(hjBhhhNhNubhemphasis)}(h*after*h]hafter}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjBubh 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 }(hjBhhhNhNubjK)}(h*before*h]hbefore}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjBubh 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.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(hHNote that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU.h]hHNote that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubeh}(h]h ]h"]h$]h&]uh1jThjhKfhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌSLAB_ACCOUNT (C macro)c.SLAB_ACCOUNThNtauh1hhjUhhhNhNubh)}(hhh](h)}(h SLAB_ACCOUNTh]h)}(h SLAB_ACCOUNTh]h)}(h SLAB_ACCOUNTh]h)}(hjh]h SLAB_ACCOUNT}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjUhNhNubj9)}(h``SLAB_ACCOUNT``h]j?)}(hjh]h SLAB_ACCOUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjUhhubjU)}(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](jU)}(hAccount allocations to memcg. h]j9)}(hAccount allocations to memcg.h]hAccount allocations to memcg.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(hAll object allocations from this cache will be memcg accounted, regardless of __GFP_ACCOUNT being or not being passed to individual allocations.h]hAll object allocations from this cache will be memcg accounted, regardless of __GFP_ACCOUNT being or not being passed to individual allocations.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubeh}(h]h ]h"]h$]h&]uh1jThjhKhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌSLAB_RECLAIM_ACCOUNT (C macro)c.SLAB_RECLAIM_ACCOUNThNtauh1hhjUhhhNhNubh)}(hhh](h)}(hSLAB_RECLAIM_ACCOUNTh]h)}(hSLAB_RECLAIM_ACCOUNTh]h)}(hSLAB_RECLAIM_ACCOUNTh]h)}(hj]h]hSLAB_RECLAIM_ACCOUNT}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjzhKubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjzhKhjXhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjXhhhjzhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjUhNhNubj9)}(h``SLAB_RECLAIM_ACCOUNT``h]j?)}(hjh]hSLAB_RECLAIM_ACCOUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjUhhubjU)}(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](jU)}(hObjects are reclaimable. h]j9)}(hObjects are reclaimable.h]hObjects are reclaimable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubj9)}(hUse 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/meminfoh]hUse 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhjubeh}(h]h ]h"]h$]h&]uh1jThjhKhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_args (C struct)c.kmem_cache_argshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hkmem_cache_argsh]h)}(hstruct kmem_cache_argsh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hkmem_cache_argsh]h)}(hj h]hkmem_cache_args}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h-Less common arguments for kmem_cache_create()h]h-Less common arguments for kmem_cache_create()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhjUhNhNubjp)}(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 *); }; **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 :c:type:`SLAB_TYPESAFE_BY_RCU` caches By default :c:type:`SLAB_TYPESAFE_BY_RCU` 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 struct where the free pointer will be placed. Note that placing the free pointer inside the object requires the caller to ensure that no fields are invalidated that are required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details). Using ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, ``use_freeptr_offset`` must be set ``true``. Note that **ctor** currently isn't supported with custom free pointers as a **ctor** requires an external free pointer. ``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.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh:}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjpubj)}(hstruct kmem_cache_args { unsigned int align; unsigned int useroffset; unsigned int usersize; unsigned int freeptr_offset; bool use_freeptr_offset; void (*ctor)(void *); };h]hstruct kmem_cache_args { unsigned int align; unsigned int useroffset; unsigned int usersize; unsigned int freeptr_offset; bool use_freeptr_offset; void (*ctor)(void *); };}hjsbah}(h]h ]h"]h$]h&]jj uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjpubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjpubj)}(hhh](j)}(hc``align`` The required alignment for the objects. ``0`` means no specific alignment is requested. h](j)}(h ``align``h]j?)}(hjh]halign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjubj)}(hhh](j9)}(h'The required alignment for the objects.h]h'The required alignment for the objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjubj9)}(h/``0`` means no specific alignment is requested.h](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh* means no specific alignment is requested.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h```useroffset`` Usercopy region offset. ``0`` is a valid offset, when **usersize** is non-``0`` h](j)}(h``useroffset``h]j?)}(hjh]h useroffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM$hjubj)}(hhh](j9)}(hUsercopy region offset.h]hUsercopy region offset.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM"hj-ubj9)}(h7``0`` is a valid offset, when **usersize** is non-``0``h](j?)}(h``0``h]h0}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubh is a valid offset, when }(hj?hhhNhNubjz)}(h **usersize**h]husersize}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh is non-}(hj?hhhNhNubj?)}(h``0``h]h0}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubeh}(h]h ]h"]h$]h&]uh1j8hj,hM$hj-ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM$hjubj)}(hQ``usersize`` Usercopy region size. ``0`` means no usercopy region is specified. h](j)}(h ``usersize``h]j?)}(hjh]husersize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM*hjubj)}(hhh](j9)}(hUsercopy region size.h]hUsercopy region size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM(hjubj9)}(h,``0`` means no usercopy region is specified.h](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh' means no usercopy region is specified.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhM*hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(hXX``freeptr_offset`` Custom offset for the free pointer in :c:type:`SLAB_TYPESAFE_BY_RCU` caches By default :c:type:`SLAB_TYPESAFE_BY_RCU` 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 struct where the free pointer will be placed. Note that placing the free pointer inside the object requires the caller to ensure that no fields are invalidated that are required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details). Using ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, ``use_freeptr_offset`` must be set ``true``. Note that **ctor** currently isn't supported with custom free pointers as a **ctor** requires an external free pointer. h](j)}(h``freeptr_offset``h]j?)}(hjh]hfreeptr_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM@hjubj)}(hhh](j9)}(hKCustom offset for the free pointer in :c:type:`SLAB_TYPESAFE_BY_RCU` cachesh](h&Custom offset for the free pointer in }(hjhhhNhNubh)}(h:c:type:`SLAB_TYPESAFE_BY_RCU`h]j?)}(hjh]hSLAB_TYPESAFE_BY_RCU}(hjhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_TYPESAFE_BY_RCUuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM.hjubh caches}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj#hM.hjubj9)}(hXBy default :c:type:`SLAB_TYPESAFE_BY_RCU` 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 struct where the free pointer will be placed.h](h By default }(hj.hhhNhNubh)}(h:c:type:`SLAB_TYPESAFE_BY_RCU`h]j?)}(hj8h]hSLAB_TYPESAFE_BY_RCU}(hj:hhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_TYPESAFE_BY_RCUuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM1hj.ubh 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 struct where the free pointer will be placed.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjUhM1hjubj9)}(hNote that placing the free pointer inside the object requires the caller to ensure that no fields are invalidated that are required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details).h](hNote that placing the free pointer inside the object requires the caller to ensure that no fields are invalidated that are required to guard against object recycling (See }(hj`hhhNhNubh)}(h:c:type:`SLAB_TYPESAFE_BY_RCU`h]j?)}(hjjh]hSLAB_TYPESAFE_BY_RCU}(hjlhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_TYPESAFE_BY_RCUuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM7hj`ubh for details).}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhM7hjubj9)}(hUsing ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, ``use_freeptr_offset`` must be set ``true``.h](hUsing }(hjhhhNhNubj?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh as a value for }(hjhhhNhNubjz)}(h**freeptr_offset**h]hfreeptr_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is valid. If }(hjhhhNhNubjz)}(h**freeptr_offset**h]hfreeptr_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is specified, }(hjhhhNhNubj?)}(h``use_freeptr_offset``h]huse_freeptr_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh must be set }(hjhhhNhNubj?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM<hjubj9)}(hwNote that **ctor** currently isn't supported with custom free pointers as a **ctor** requires an external free pointer.h](h Note that }(hjhhhNhNubjz)}(h**ctor**h]hctor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh< currently isn’t supported with custom free pointers as a }(hjhhhNhNubjz)}(h**ctor**h]hctor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# requires an external free pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(h=``use_freeptr_offset`` Whether a **freeptr_offset** is used. h](j)}(h``use_freeptr_offset``h]j?)}(hj@h]huse_freeptr_offset}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMDhj:ubj)}(hhh]j9)}(h%Whether a **freeptr_offset** is used.h](h Whether a }(hjYhhhNhNubjz)}(h**freeptr_offset**h]hfreeptr_offset}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh is used.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjUhMDhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMDhjubj)}(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]j?)}(hjh]hctor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMOhjubj)}(hhh](j9)}(hA constructor for the objects.h]hA constructor for the objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMHhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMJhjubj9)}(h``NULL`` means no constructor.h](j?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh means no constructor.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMPhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMShjUhhubj9)}(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](hVAny uninitialized fields of the structure are interpreted as unused. The exception is }(hjhhhNhNubjz)}(h**freeptr_offset**h]hfreeptr_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh where }(hjhhhNhNubj?)}(h``0``h]h0}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh is a valid value, so }(hjhhhNhNubjz)}(h**use_freeptr_offset**h]huse_freeptr_offset}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh must be also set to }(hjhhhNhNubj?)}(h``true``h]htrue}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh. in order to interpret the field as used. For }(hjhhhNhNubjz)}(h**useroffset**h]h useroffset}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh }(hjhhhNhNubj?)}(h``0``h]h0}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh" is also valid, but only with non-}(hjhhhNhNubj?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh }(hjhhhNhNubjz)}(h **usersize**h]husersize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjUhhubj9)}(h[When ``NULL`` args is passed to kmem_cache_create(), it is equivalent to all fields unused.h](hWhen }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhN args is passed to kmem_cache_create(), it is equivalent to all fields unused.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjUhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'kmem_cache_create_usercopy (C function)c.kmem_cache_create_usercopyhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct 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)}(hstruct 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!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMeubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXkmem_cache_create_usercopysbc.kmem_cache_create_usercopyasbuh1hhjhhhjhMeubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMeubj2 )}(hj5 h]h*}(hj7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMeubh)}(hkmem_cache_create_usercopyh]h)}(hj&h]hkmem_cache_create_usercopy}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMeubj)}(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)}(hconst char *nameh](j!)}(hconsth]hconst}(hjchhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_ubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned int alignh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hslab_flags_t flagsh](h)}(hhh]h)}(h slab_flags_th]h slab_flags_t}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]j$c.kmem_cache_create_usercopyasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned int useroffseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h useroffseth]h useroffset}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned int usersizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(husersizeh]husersize}(hj4 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hvoid (*ctor)(void*)h](j)}(hvoidh]hvoid}(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubj)}(h h]h }(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubj2 )}(h(h]h(}(hji hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubj2 )}(hj5 h]h*}(hjw hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubh)}(hctorh]hctor}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI ubj2 )}(h)h]h)}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubj2 )}(hjk h]h(}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubj)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubj2 )}(hj h]h)}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjI ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMehjhhubj )}(hhh]j9)}(hDCreate a kmem cache with a region suitable for copying to userspace.h]hDCreate a kmem cache with a region suitable for copying to userspace.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMehj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMeubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j !j4j !j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMihj !ubj)}(hhh](j)}(hV``const char *name`` A string which is used in /proc/slabinfo to identify this cache. h](j)}(h``const char *name``h]j?)}(hj2!h]hconst char *name}(hj4!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMghj,!ubj)}(hhh]j9)}(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.}(hjK!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjG!hMghjH!ubah}(h]h ]h"]h$]h&]uh1jhj,!ubeh}(h]h ]h"]h$]h&]uh1jhjG!hMghj)!ubj)}(hG``unsigned int size`` The size of objects to be created in this cache. h](j)}(h``unsigned int size``h]j?)}(hjk!h]hunsigned int size}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hji!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhhje!ubj)}(hhh]j9)}(h0The size of objects to be created in this cache.h]h0The size of objects to be created in this cache.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMhhj!ubah}(h]h ]h"]h$]h&]uh1jhje!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhhj)!ubj)}(h?``unsigned int align`` The required alignment for the objects. h](j)}(h``unsigned int align``h]j?)}(hj!h]hunsigned int align}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMihj!ubj)}(hhh]j9)}(h'The required alignment for the objects.h]h'The required alignment for the objects.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMihj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMihj)!ubj)}(h"``slab_flags_t flags`` SLAB flags h](j)}(h``slab_flags_t flags``h]j?)}(hj!h]hslab_flags_t flags}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMjhj!ubj)}(hhh]j9)}(h SLAB flagsh]h SLAB flags}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMjhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMjhj)!ubj)}(h3``unsigned int useroffset`` Usercopy region offset h](j)}(h``unsigned int useroffset``h]j?)}(hj"h]hunsigned int useroffset}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMkhj"ubj)}(hhh]j9)}(hUsercopy region offseth]hUsercopy region offset}(hj/"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+"hMkhj,"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj+"hMkhj)!ubj)}(h/``unsigned int usersize`` Usercopy region size h](j)}(h``unsigned int usersize``h]j?)}(hjO"h]hunsigned int usersize}(hjQ"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjM"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMlhjI"ubj)}(hhh]j9)}(hUsercopy region sizeh]hUsercopy region size}(hjh"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjd"hMlhje"ubah}(h]h ]h"]h$]h&]uh1jhjI"ubeh}(h]h ]h"]h$]h&]uh1jhjd"hMlhj)!ubj)}(hE``void (*ctor)(void *)`` A constructor for the objects, or ``NULL``. h](j)}(h``void (*ctor)(void *)``h]j?)}(hj"h]hvoid (*ctor)(void *)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMmhj"ubj)}(hhh]j9)}(h+A constructor for the objects, or ``NULL``.h](h"A constructor for the objects, or }(hj"hhhNhNubj?)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj"hMmhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMmhj)!ubeh}(h]h ]h"]h$]h&]uh1jhj !ubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMohj !ubj9)}(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](hThis is a legacy wrapper, new code should use either KMEM_CACHE_USERCOPY() if whitelisting a single field is sufficient, or kmem_cache_create() with the necessary parameters passed via the args parameter (see }(hj"hhhNhNubh)}(h2:c:type:`struct kmem_cache_args `h]j?)}(hj"h]hstruct kmem_cache_args}(hj"hhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:kmem_cache_argsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMohj"ubh)}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj#hMohj !ubj9)}(h **Return**h]jz)}(hj#h]hReturn}(hj!#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMthj !ubj9)}(h3a pointer to the cache on success, NULL on failure.h]h3a pointer to the cache on success, NULL on failure.}(hj5#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMthj !ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_create (C macro)c.kmem_cache_createhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hkmem_cache_createh]h)}(hkmem_cache_createh]h)}(hkmem_cache_createh]h)}(hj^#h]hkmem_cache_create}(hjh#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjd#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`#hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj\#hhhj{#hMubah}(h]jW#ah ](jjeh"]h$]h&]jj)jhuh1hhj{#hMhjY#hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjY#hhhj{#hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j#j4j#j5j6j7uh1hhhhjUhNhNubj9)}(h:``kmem_cache_create (__name, __object_size, __args, ...)``h]j?)}(hj#h]h6kmem_cache_create (__name, __object_size, __args, ...)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjUhhubjU)}(hCreate a kmem cache. h]j9)}(hCreate a kmem cache.h]hCreate a kmem cache.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubah}(h]h ]h"]h$]h&]uh1jThj#hMhjUhhubjp)}(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](j9)}(h**Parameters**h]jz)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj)}(hhh](j)}(hL``__name`` A string which is used in /proc/slabinfo to identify this cache. h](j)}(h ``__name``h]j?)}(hj#h]h__name}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj)}(hhh]j9)}(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$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj#ubj)}(hC``__object_size`` The size of objects to be created in this cache. h](j)}(h``__object_size``h]j?)}(hj'$h]h __object_size}(hj)$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%$ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj!$ubj)}(hhh]j9)}(h0The size of objects to be created in this cache.h]h0The size of objects to be created in this cache.}(hj@$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<$hMhj=$ubah}(h]h ]h"]h$]h&]uh1jhj!$ubeh}(h]h ]h"]h$]h&]uh1jhj<$hMhj#ubj)}(h``__args`` Optional arguments, see :c:type:`struct kmem_cache_args `. Passing ``NULL`` means defaults will be used for all the arguments. h](j)}(h ``__args``h]j?)}(hj`$h]h__args}(hjb$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^$ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjZ$ubj)}(hhh]j9)}(hOptional arguments, see :c:type:`struct kmem_cache_args `. Passing ``NULL`` means defaults will be used for all the arguments.h](hOptional arguments, see }(hjy$hhhNhNubh)}(h2:c:type:`struct kmem_cache_args `h]j?)}(hj$h]hstruct kmem_cache_args}(hj$hhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:kmem_cache_argsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjy$ubh . Passing }(hjy$hhhNhNubj?)}(h``NULL``h]hNULL}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjy$ubh3 means defaults will be used for all the arguments.}(hjy$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj$hMhjv$ubah}(h]h ]h"]h$]h&]uh1jhjZ$ubeh}(h]h ]h"]h$]h&]uh1jhju$hMhj#ubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hj$h]h...}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhj$ubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubj9)}(h**Description**h]jz)}(hj %h]h Description}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhKhj#ubj9)}(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 }(hj %hhhNhNubj?)}(h``_Generic()``h]h _Generic()}(hj(%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj %ubhA to call either the new variant of the function, or a legacy one.}(hj %hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj9)}(hWThe new variant has 4 parameters: ``kmem_cache_create(name, object_size, args, flags)``h](h"The new variant has 4 parameters: }(hjA%hhhNhNubj?)}(h5``kmem_cache_create(name, object_size, args, flags)``h]h1kmem_cache_create(name, object_size, args, flags)}(hjI%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA%ubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj9)}(h5See __kmem_cache_create_args() which implements this.h]h5See __kmem_cache_create_args() which implements this.}(hj^%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj9)}(haThe legacy variant has 5 parameters: ``kmem_cache_create(name, object_size, align, flags, ctor)``h](h%The legacy variant has 5 parameters: }(hjm%hhhNhNubj?)}(h<``kmem_cache_create(name, object_size, align, flags, ctor)``h]h8kmem_cache_create(name, object_size, align, flags, ctor)}(hju%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjm%ubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj9)}(hpThe 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%hhhNhNubh)}(h2:c:type:`struct kmem_cache_args `h]j?)}(hj%h]hstruct kmem_cache_args}(hj%hhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:kmem_cache_argsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj%ubeh}(h]h ]h"]h$]h&]uh1j8hj%hMhj#ubj9)}(h **Context**h]jz)}(hj%h]hContext}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj9)}(h ah"]h$]h&]uh1j1 hjt&ubh)}(hobjph]hobjp}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjp&ubah}(h]h ]h"]h$]h&]jj uh1jhj"&hhhjJ&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhjJ&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhjJ&hMhj&hhubj )}(hhh]j9)}(h2Report actual allocation size of associated objecth]h2Report actual allocation size of associated object}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhjJ&hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhjUhNhNubjp)}(hX**Parameters** ``const void *objp`` Pointer returned from a prior kmalloc()-family allocation. **Description** This should not be used for writing beyond the originally requested allocation size. Either use krealloc() or round up the allocation size with kmalloc_size_roundup() prior to allocation. If this is used to access beyond the originally requested allocation size, UBSAN_BOUNDS and/or FORTIFY_SOURCE may trip, since they only know about the originally allocated size via the __alloc_size attribute.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj'ubj)}(hhh]j)}(hP``const void *objp`` Pointer returned from a prior kmalloc()-family allocation. h](j)}(h``const void *objp``h]j?)}(hj''h]hconst void *objp}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%'ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj!'ubj)}(hhh]j9)}(h:Pointer returned from a prior kmalloc()-family allocation.h]h:Pointer returned from a prior kmalloc()-family allocation.}(hj@'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<'hMhj='ubah}(h]h ]h"]h$]h&]uh1jhj!'ubeh}(h]h ]h"]h$]h&]uh1jhj<'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hjb'h]h Description}(hjd'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`'ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj'ubj9)}(hXThis should not be used for writing beyond the originally requested allocation size. Either use krealloc() or round up the allocation size with kmalloc_size_roundup() prior to allocation. If this is used to access beyond the originally requested allocation size, UBSAN_BOUNDS and/or FORTIFY_SOURCE may trip, since they only know about the originally allocated size via the __alloc_size attribute.h]hXThis should not be used for writing beyond the originally requested allocation size. Either use krealloc() or round up the allocation size with kmalloc_size_roundup() prior to allocation. If this is used to access beyond the originally requested allocation size, UBSAN_BOUNDS and/or FORTIFY_SOURCE may trip, since they only know about the originally allocated size via the __alloc_size attribute.}(hjx'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_alloc (C function)c.kmem_cache_allochNtauh1hhjUhhhNhNubh)}(hhh](h)}(h@void * kmem_cache_alloc (struct kmem_cache *cachep, gfp_t flags)h]h)}(h>void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hMubj2 )}(hj5 h]h*}(hj'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj'hhhj'hMubh)}(hkmem_cache_alloch]h)}(hkmem_cache_alloch]hkmem_cache_alloc}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj'hMubj)}(h((struct kmem_cache *cachep, gfp_t flags)h](j)}(hstruct kmem_cache *cacheph](j!)}(hj$h]hstruct}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj (ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj(modnameN classnameNj\j_)}jb]je)}jXj'sbc.kmem_cache_allocasbuh1hhj'ubj)}(h h]h }(hj/(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj2 )}(hj5 h]h*}(hj=(hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj'ubh)}(hcacheph]hcachep}(hjJ(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj'ubj)}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjf(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjc(ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjh(modnameN classnameNj\j_)}jb]j+(c.kmem_cache_allocasbuh1hhj_(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_(ubh)}(hflagsh]hflags}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj'ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj'hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj'hMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1hhj'hMhj'hhubj )}(hhh]j9)}(hAllocate an objecth]hAllocate an object}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhjUhNhNubjp)}(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 errorh](j9)}(h**Parameters**h]jz)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubj)}(hhh](j)}(h:``struct kmem_cache *cachep`` The cache to allocate from. h](j)}(h``struct kmem_cache *cachep``h]j?)}(hj(h]hstruct kmem_cache *cachep}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubj)}(hhh]j9)}(hThe cache to allocate from.h]hThe cache to allocate from.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj(ubj)}(h``gfp_t flags`` See kmalloc(). h](j)}(h``gfp_t flags``h]j?)}(hj6)h]h gfp_t flags}(hj8)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4)ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj0)ubj)}(hhh]j9)}(hSee kmalloc().h]hSee kmalloc().}(hjO)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjK)hMhjL)ubah}(h]h ]h"]h$]h&]uh1jhj0)ubeh}(h]h ]h"]h$]h&]uh1jhjK)hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hjq)h]h Description}(hjs)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo)ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubj9)}(hiAllocate an object from this cache. See kmem_cache_zalloc() for a shortcut of adding __GFP_ZERO to flags.h]hiAllocate an object from this cache. See kmem_cache_zalloc() for a shortcut of adding __GFP_ZERO to flags.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubj9)}(h **Return**h]jz)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubj9)}(h6pointer to the new object or ``NULL`` in case of errorh](hpointer to the new object or }(hj)hhhNhNubj?)}(h``NULL``h]hNULL}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubh in case of error}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_charge (C function)c.kmem_cache_chargehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h3bool kmem_cache_charge (void *objp, gfp_t gfpflags)h]h)}(h2bool kmem_cache_charge(void *objp, gfp_t gfpflags)h](j)}(hboolh]hbool}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hMubh)}(hkmem_cache_chargeh]h)}(hkmem_cache_chargeh]hkmem_cache_charge}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj *ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj)hMubj)}(h(void *objp, gfp_t gfpflags)h](j)}(h void *objph](j)}(hvoidh]hvoid}(hj,*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(*ubj)}(h h]h }(hj:*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(*ubj2 )}(hj5 h]h*}(hjH*hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj(*ubh)}(hobjph]hobjp}(hjU*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(*ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$*ubj)}(hgfp_t gfpflagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjq*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn*ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjs*modnameN classnameNj\j_)}jb]je)}jXj*sbc.kmem_cache_chargeasbuh1hhjj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj*ubh)}(hgfpflagsh]hgfpflags}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$*ubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj)hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj)hMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhj)hMhj)hhubj )}(hhh]j9)}(h-memcg charge an already allocated slab memoryh]h-memcg charge an already allocated slab memory}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubj)}(hhh](j)}(h:``void *objp`` address of the slab object to memcg charge h](j)}(h``void *objp``h]j?)}(hj +h]h void *objp}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj+ubj)}(hhh]j9)}(h*address of the slab object to memcg chargeh]h*address of the slab object to memcg charge}(hj#+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hMhj +ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj+ubj)}(h3``gfp_t gfpflags`` describe the allocation context h](j)}(h``gfp_t gfpflags``h]j?)}(hjC+h]hgfp_t gfpflags}(hjE+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA+ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj=+ubj)}(hhh]j9)}(hdescribe the allocation contexth]hdescribe the allocation context}(hj\+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX+hMhjY+ubah}(h]h ]h"]h$]h&]uh1jhj=+ubeh}(h]h ]h"]h$]h&]uh1jhjX+hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj~+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|+ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubj9)}(hkmem_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]hkmem_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+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubj9)}(hXThe 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]hXThe 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+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubj9)}(hgThere are several cases where it will return true even if the charging was not done: More specifically:h]hgThere are several cases where it will return true even if the charging was not done: More specifically:}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubhenumerated_list)}(hhh](h list_item)}(h3For !CONFIG_MEMCG or cgroup_disable=memory systems.h]j9)}(hj+h]h3For !CONFIG_MEMCG or cgroup_disable=memory systems.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj+ubah}(h]h ]h"]h$]h&]uh1j+hj+ubj+)}(hAlready charged slab objects.h]j9)}(hj+h]hAlready charged slab objects.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj+ubah}(h]h ]h"]h$]h&]uh1j+hj+ubj+)}(hZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNTh]j9)}(hZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNTh]hZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNT}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj+ubah}(h]h ]h"]h$]h&]uh1j+hj+ubj+)}(h(Allocating internal metadata has failed h]j9)}(h'Allocating internal metadata has failedh]h'Allocating internal metadata has failed}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj,ubah}(h]h ]h"]h$]h&]uh1j+hj+ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1j+hj*ubj9)}(h **Return**h]jz)}(hj7,h]hReturn}(hj9,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5,ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubj9)}(h.true if charge was successful otherwise false.h]h.true if charge was successful otherwise false.}(hjM,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmalloc (C function) c.kmallochNtauh1hhjUhhhNhNubh)}(hhh](h)}(h)void * kmalloc (size_t size, gfp_t flags)h]h)}(h'void *kmalloc(size_t size, gfp_t flags)h](j)}(hvoidh]hvoid}(hj|,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx,hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMJubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx,hhhj,hMJubj2 )}(hj5 h]h*}(hj,hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjx,hhhj,hMJubh)}(hkmalloch]h)}(hkmalloch]hkmalloc}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjx,hhhj,hMJubj)}(h(size_t size, gfp_t flags)h](j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj,modnameN classnameNj\j_)}jb]je)}jXj,sb c.kmallocasbuh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hsizeh]hsize}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj,ubj)}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj-modnameN classnameNj\j_)}jb]j, c.kmallocasbuh1hhj -ubj)}(h h]h }(hj1-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj -ubh)}(hflagsh]hflags}(hj?-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj -ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj,ubeh}(h]h ]h"]h$]h&]jj uh1jhjx,hhhj,hMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjt,hhhj,hMJubah}(h]jo,ah ](jjeh"]h$]h&]jj)jhuh1hhj,hMJhjq,hhubj )}(hhh]j9)}(hallocate kernel memoryh]hallocate kernel memory}(hji-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMJhjf-hhubah}(h]h ]h"]h$]h&]uh1jhjq,hhhj,hMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMNhj-ubj)}(hhh](j)}(h7``size_t size`` how many bytes of memory are required. h](j)}(h``size_t size``h]j?)}(hj-h]h size_t size}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMKhj-ubj)}(hhh]j9)}(h&how many bytes of memory are required.h]h&how many bytes of memory are required.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMKhj-ubj)}(h0``gfp_t flags`` describe the allocation context h](j)}(h``gfp_t flags``h]j?)}(hj-h]h gfp_t flags}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMLhj-ubj)}(hhh]j9)}(hdescribe the allocation contexth]hdescribe the allocation context}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMLhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMLhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(h**Description**h]jz)}(hj.h]h Description}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMNhj-ubj9)}(hckmalloc is the normal method of allocating memory for objects smaller than page size in the kernel.h]hckmalloc is the normal method of allocating memory for objects smaller than page size in the kernel.}(hj4.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMNhj-ubj9)}(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](hUThe allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For }(hjC.hhhNhNubjz)}(h**size**h]hsize}(hjK.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC.ubh 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 }(hjC.hhhNhNubjz)}(h**size**h]hsize}(hj].hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC.ubh.}(hjC.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMQhj-ubj9)}(hThe **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](hThe }(hjv.hhhNhNubjz)}(h **flags**h]hflags}(hj~.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjv.ubh\ argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at }(hjv.hhhNhNubh)}(h;:ref:`Documentation/core-api/mm-api.rst `h]hinline)}(hj.h]h!Documentation/core-api/mm-api.rst}(hj.hhhNhNubah}(h]h ](j%stdstd-refeh"]h$]h&]uh1j.hj.ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj.reftyperef refexplicitrefwarnj:mm-api-gfp-flagsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMVhjv.ubeh}(h]h ]h"]h$]h&]uh1j8hj.hMVhj-ubj9)}(h~The recommended usage of the **flags** is described at :ref:`Documentation/core-api/memory-allocation.rst `h](hThe recommended usage of the }(hj.hhhNhNubjz)}(h **flags**h]hflags}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh is described at }(hj.hhhNhNubh)}(hG:ref:`Documentation/core-api/memory-allocation.rst `h]j.)}(hj.h]h,Documentation/core-api/memory-allocation.rst}(hj.hhhNhNubah}(h]h ](j%stdstd-refeh"]h$]h&]uh1j.hj.ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj.reftyperef refexplicitrefwarnj:memory_allocationuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMZhj.ubeh}(h]h ]h"]h$]h&]uh1j8hj.hMZhj-ubj9)}(h5Below is a brief outline of the most useful GFP flagsh]h5Below is a brief outline of the most useful GFP flags}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM]hj-ubj)}(hhh](j)}(h6``GFP_KERNEL`` Allocate normal kernel ram. May sleep. h](j)}(h``GFP_KERNEL``h]j?)}(hj/h]h GFP_KERNEL}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM`hj /ubj)}(hhh]j9)}(h&Allocate normal kernel ram. May sleep.h]h&Allocate normal kernel ram. May sleep.}(hj+/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'/hM`hj(/ubah}(h]h ]h"]h$]h&]uh1jhj /ubeh}(h]h ]h"]h$]h&]uh1jhj'/hM`hj /ubj)}(h*``GFP_NOWAIT`` Allocation will not sleep. h](j)}(h``GFP_NOWAIT``h]j?)}(hjK/h]h GFP_NOWAIT}(hjM/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjI/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMchjE/ubj)}(hhh]j9)}(hAllocation will not sleep.h]hAllocation will not sleep.}(hjd/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`/hMchja/ubah}(h]h ]h"]h$]h&]uh1jhjE/ubeh}(h]h ]h"]h$]h&]uh1jhj`/hMchj /ubj)}(hD``GFP_ATOMIC`` Allocation will not sleep. May use emergency pools. h](j)}(h``GFP_ATOMIC``h]j?)}(hj/h]h GFP_ATOMIC}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMfhj~/ubj)}(hhh]j9)}(h4Allocation will not sleep. May use emergency pools.h]h4Allocation will not sleep. May use emergency pools.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMfhj/ubah}(h]h ]h"]h$]h&]uh1jhj~/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMfhj /ubeh}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(hjAlso it is possible to set different flags by OR'ing in one or more of the following additional **flags**:h](hbAlso it is possible to set different flags by OR’ing in one or more of the following additional }(hj/hhhNhNubjz)}(h **flags**h]hflags}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh:}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhhj-ubj)}(hhh](j)}(hO``__GFP_ZERO`` Zero the allocated memory before returning. Also see kzalloc(). h](j)}(h``__GFP_ZERO``h]j?)}(hj/h]h __GFP_ZERO}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMlhj/ubj)}(hhh]j9)}(h?Zero the allocated memory before returning. Also see kzalloc().h]h?Zero the allocated memory before returning. Also see kzalloc().}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMlhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMlhj/ubj)}(hN``__GFP_HIGH`` This allocation has high priority and may use emergency pools. h](j)}(h``__GFP_HIGH``h]j?)}(hj 0h]h __GFP_HIGH}(hj"0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMohj0ubj)}(hhh]j9)}(h>This allocation has high priority and may use emergency pools.h]h>This allocation has high priority and may use emergency pools.}(hj90hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj50hMohj60ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj50hMohj/ubj)}(hh``__GFP_NOFAIL`` Indicate that this allocation is in no way allowed to fail (think twice before using). h](j)}(h``__GFP_NOFAIL``h]j?)}(hjY0h]h __GFP_NOFAIL}(hj[0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjW0ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMshjS0ubj)}(hhh]j9)}(hVIndicate that this allocation is in no way allowed to fail (think twice before using).h]hVIndicate that this allocation is in no way allowed to fail (think twice before using).}(hjr0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMrhjo0ubah}(h]h ]h"]h$]h&]uh1jhjS0ubeh}(h]h ]h"]h$]h&]uh1jhjn0hMshj/ubj)}(hP``__GFP_NORETRY`` If memory is not immediately available, then give up at once. h](j)}(h``__GFP_NORETRY``h]j?)}(hj0h]h __GFP_NORETRY}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMwhj0ubj)}(hhh]j9)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMvhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMwhj/ubj)}(h@``__GFP_NOWARN`` If allocation fails, don't issue any warnings. h](j)}(h``__GFP_NOWARN``h]j?)}(hj0h]h __GFP_NOWARN}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMzhj0ubj)}(hhh]j9)}(h.If allocation fails, don't issue any warnings.h]h0If allocation fails, don’t issue any warnings.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMzhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMzhj/ubj)}(hV``__GFP_RETRY_MAYFAIL`` Try really hard to succeed the allocation but fail eventually.h](j)}(h``__GFP_RETRY_MAYFAIL``h]j?)}(hj1h]h__GFP_RETRY_MAYFAIL}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM}hj1ubj)}(hhh]j9)}(h>Try really hard to succeed the allocation but fail eventually.h]h>Try really hard to succeed the allocation but fail eventually.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hM}hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM}hj/ubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmalloc_array (C function)c.kmalloc_arrayhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h9void * kmalloc_array (size_t n, size_t size, gfp_t flags)h]h)}(h7void *kmalloc_array(size_t n, size_t size, gfp_t flags)h](j)}(hvoidh]hvoid}(hj_1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[1hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hjn1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[1hhhjm1hMubj2 )}(hj5 h]h*}(hj|1hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj[1hhhjm1hMubh)}(h kmalloc_arrayh]h)}(h kmalloc_arrayh]h kmalloc_array}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj[1hhhjm1hMubj)}(h$(size_t n, size_t size, gfp_t flags)h](j)}(hsize_t nh](h)}(hhh]h)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj1modnameN classnameNj\j_)}jb]je)}jXj1sbc.kmalloc_arrayasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]hn}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj1modnameN classnameNj\j_)}jb]j1c.kmalloc_arrayasbuh1hhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hsizeh]hsize}(hj!2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1ubj)}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj=2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj?2modnameN classnameNj\j_)}jb]j1c.kmalloc_arrayasbuh1hhj62ubj)}(h h]h }(hj[2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj62ubh)}(hflagsh]hflags}(hji2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj62ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1ubeh}(h]h ]h"]h$]h&]jj uh1jhj[1hhhjm1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjW1hhhjm1hMubah}(h]jR1ah ](jjeh"]h$]h&]jj)jhuh1hhjm1hMhjT1hhubj )}(hhh]j9)}(hallocate memory for an array.h]hallocate memory for an array.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjT1hhhjm1hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj2ubj)}(hhh](j)}(h!``size_t n`` number of elements. h](j)}(h ``size_t n``h]j?)}(hj2h]hsize_t n}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj2ubj)}(hhh]j9)}(hnumber of elements.h]hnumber of elements.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h``size_t size`` element size. h](j)}(h``size_t size``h]j?)}(hj 3h]h size_t size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 3ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj3ubj)}(hhh]j9)}(h element size.h]h element size.}(hj&3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"3hMhj#3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj"3hMhj2ubj)}(h=``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j)}(h``gfp_t flags``h]j?)}(hjF3h]h gfp_t flags}(hjH3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjD3ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj@3ubj)}(hhh]j9)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hj_3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj\3ubah}(h]h ]h"]h$]h&]uh1jhj@3ubeh}(h]h ]h"]h$]h&]uh1jhj[3hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkrealloc_array (C function)c.krealloc_arrayhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hKvoid * krealloc_array (void *p, size_t new_n, size_t new_size, gfp_t flags)h]h)}(hIvoid *krealloc_array(void *p, size_t new_n, size_t new_size, gfp_t flags)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubj2 )}(hj5 h]h*}(hj3hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj3hhhj3hMubh)}(hkrealloc_arrayh]h)}(hkrealloc_arrayh]hkrealloc_array}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hMubj)}(h5(void *p, size_t new_n, size_t new_size, gfp_t flags)h](j)}(hvoid *ph](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj2 )}(hj5 h]h*}(hj4hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj3ubh)}(hj> h]hp}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubj)}(h size_t new_nh](h)}(hhh]h)}(hsize_th]hsize_t}(hj.4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj04modnameN classnameNj\j_)}jb]je)}jXj3sbc.krealloc_arrayasbuh1hhj'4ubj)}(h h]h }(hjN4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'4ubh)}(hnew_nh]hnew_n}(hj\4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubj)}(hsize_t new_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjx4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjz4modnameN classnameNj\j_)}jb]jJ4c.krealloc_arrayasbuh1hhjq4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq4ubh)}(hnew_sizeh]hnew_size}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubj)}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj4modnameN classnameNj\j_)}jb]jJ4c.krealloc_arrayasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hflagsh]hflags}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhj3hMhj3hhubj )}(hhh]j9)}(hreallocate memory for an array.h]hreallocate memory for an array.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.5j4j.5j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj85h]h Parameters}(hj:5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj65ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj25ubj)}(hhh](j)}(h6``void *p`` pointer to the memory chunk to reallocate h](j)}(h ``void *p``h]j?)}(hjW5h]hvoid *p}(hjY5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjU5ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjQ5ubj)}(hhh]j9)}(h)pointer to the memory chunk to reallocateh]h)pointer to the memory chunk to reallocate}(hjp5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjl5hMhjm5ubah}(h]h ]h"]h$]h&]uh1jhjQ5ubeh}(h]h ]h"]h$]h&]uh1jhjl5hMhjN5ubj)}(h1``size_t new_n`` new number of elements to alloc h](j)}(h``size_t new_n``h]j?)}(hj5h]h size_t new_n}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj5ubj)}(hhh]j9)}(hnew number of elements to alloch]hnew number of elements to alloc}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjN5ubj)}(h=``size_t new_size`` new size of a single member of the array h](j)}(h``size_t new_size``h]j?)}(hj5h]hsize_t new_size}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj5ubj)}(hhh]j9)}(h(new size of a single member of the arrayh]h(new size of a single member of the array}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjN5ubj)}(h=``gfp_t flags`` the type of memory to allocate (see kmalloc) h](j)}(h``gfp_t flags``h]j?)}(hj6h]h gfp_t flags}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj5ubj)}(hhh]j9)}(h,the type of memory to allocate (see kmalloc)h]h,the type of memory to allocate (see kmalloc)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjN5ubeh}(h]h ]h"]h$]h&]uh1jhj25ubj9)}(h**Description**h]jz)}(hj=6h]h Description}(hj?6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;6ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj25ubj9)}(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.}(hjS6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj25ubj9)}(h*See krealloc_noprof() for further details.h]h*See krealloc_noprof() for further details.}(hjb6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj25ubj9)}(hkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.h]hkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.}(hjq6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj25ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkcalloc (C macro) c.kcallochNtauh1hhjUhhhNhNubh)}(hhh](h)}(hkcalloch]h)}(hkcalloch]h)}(hkcalloch]h)}(hj6h]hkcalloc}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1hhj6hMhj6hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhjUhNhNubj9)}(h``kcalloc (n, size, flags)``h]j?)}(hj6h]hkcalloc (n, size, flags)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjUhhubjU)}(h9allocate memory for an array. The memory is set to zero. h]j9)}(h8allocate memory for an array. The memory is set to zero.h]h8allocate memory for an array. The memory is set to zero.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jThj6hMhjUhhubjp)}(h**Parameters** ``n`` number of elements. ``size`` element size. ``flags`` the type of memory to allocate (see kmalloc).h](j9)}(h**Parameters**h]jz)}(hj 7h]h Parameters}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 7ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj7ubj)}(hhh](j)}(h``n`` number of elements. h](j)}(h``n``h]j?)}(hj*7h]hn}(hj,7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(7ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj$7ubj)}(hhh]j9)}(hnumber of elements.h]hnumber of elements.}(hjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?7hMhj@7ubah}(h]h ]h"]h$]h&]uh1jhj$7ubeh}(h]h ]h"]h$]h&]uh1jhj?7hMhj!7ubj)}(h``size`` element size. h](j)}(h``size``h]j?)}(hjc7h]hsize}(hje7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hja7ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj]7ubj)}(hhh]j9)}(h element size.h]h element size.}(hj|7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjx7hMhjy7ubah}(h]h ]h"]h$]h&]uh1jhj]7ubeh}(h]h ]h"]h$]h&]uh1jhjx7hMhj!7ubj)}(h7``flags`` the type of memory to allocate (see kmalloc).h](j)}(h ``flags``h]j?)}(hj7h]hflags}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj7ubj)}(hhh]j9)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj!7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkzalloc (C function) c.kzallochNtauh1hhjUhhhNhNubh)}(hhh](h)}(h)void * kzalloc (size_t size, gfp_t flags)h]h)}(h'void *kzalloc(size_t size, gfp_t flags)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj8hM ubj2 )}(hj5 h]h*}(hj8hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7hhhj8hM ubh)}(hkzalloch]h)}(hkzalloch]hkzalloc}(hj$8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj8hM ubj)}(h(size_t size, gfp_t flags)h](j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjC8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@8ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjE8modnameN classnameNj\j_)}jb]je)}jXj&8sb c.kzallocasbuh1hhj<8ubj)}(h h]h }(hjc8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<8ubh)}(hsizeh]hsize}(hjq8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<8ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj88ubj)}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8modnameN classnameNj\j_)}jb]j_8 c.kzallocasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hflagsh]hflags}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj88ubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhj8hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj8hM ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhj8hM hj7hhubj )}(hhh]j9)}(h+allocate memory. The memory is set to zero.h]h+allocate memory. The memory is set to zero.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj8hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhjUhNhNubjp)}(h**Parameters** ``size_t size`` how many bytes of memory are required. ``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hj8ubj)}(hhh](j)}(h7``size_t size`` how many bytes of memory are required. h](j)}(h``size_t size``h]j?)}(hj$9h]h size_t size}(hj&9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"9ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hj9ubj)}(hhh]j9)}(h&how many bytes of memory are required.h]h&how many bytes of memory are required.}(hj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj99hM hj:9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj99hM hj9ubj)}(h=``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j)}(h``gfp_t flags``h]j?)}(hj]9h]h gfp_t flags}(hj_9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[9ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hjW9ubj)}(hhh]j9)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hjv9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hjs9ubah}(h]h ]h"]h$]h&]uh1jhjW9ubeh}(h]h ]h"]h$]h&]uh1jhjr9hM hj9ubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmalloc_size_roundup (C function)c.kmalloc_size_rounduphNtauh1hhjUhhhNhNubh)}(hhh](h)}(h)size_t kmalloc_size_roundup (size_t size)h]h)}(h(size_t kmalloc_size_roundup(size_t size)h](h)}(hhh]h)}(hsize_th]hsize_t}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]je)}jXkmalloc_size_roundupsbc.kmalloc_size_roundupasbuh1hhj9hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMMubh)}(hkmalloc_size_rounduph]h)}(hj9h]hkmalloc_size_roundup}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhj9hMMubj)}(h (size_t size)h]j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj :hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj :ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:modnameN classnameNj\j_)}jb]j9c.kmalloc_size_roundupasbuh1hhj:ubj)}(h h]h }(hj*:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hsizeh]hsize}(hj8:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubah}(h]h ]h"]h$]h&]jj uh1jhj9hhhj9hMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj9hMMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1hhj9hMMhj9hhubj )}(hhh]j9)}(h0Report allocation bucket size for the given sizeh]h0Report allocation bucket size for the given size}(hjb:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMMhj_:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hMMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jz:j4jz:j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMQhj~:ubj)}(hhh]j)}(h2``size_t size`` Number of bytes to round up from. h](j)}(h``size_t size``h]j?)}(hj:h]h size_t size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMOhj:ubj)}(hhh]j9)}(h!Number of bytes to round up from.h]h!Number of bytes to round up from.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hMOhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMOhj:ubah}(h]h ]h"]h$]h&]uh1jhj~:ubj9)}(h**Description**h]jz)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMQhj~:ubj9)}(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](hVThis returns the number of bytes that would be available in a kmalloc() allocation of }(hj:hhhNhNubjz)}(h**size**h]hsize}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh 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:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMQhj~:ubj9)}(hxUse this to kmalloc() the full bucket size ahead of time instead of using ksize() to query the size after an allocation.h]hxUse this to kmalloc() the full bucket size ahead of time instead of using ksize() to query the size after an allocation.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMWhj~:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_free (C function)c.kmem_cache_freehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h4void kmem_cache_free (struct kmem_cache *s, void *x)h]h)}(h3void kmem_cache_free(struct kmem_cache *s, void *x)h](j)}(hvoidh]hvoid}(hjD;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@;hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chM|ubj)}(h h]h }(hjS;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@;hhhjR;hM|ubh)}(hkmem_cache_freeh]h)}(hkmem_cache_freeh]hkmem_cache_free}(hje;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@;hhhjR;hM|ubj)}(h(struct kmem_cache *s, void *x)h](j)}(hstruct kmem_cache *sh](j!)}(hj$h]hstruct}(hj;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj};ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj};ubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]je)}jXjg;sbc.kmem_cache_freeasbuh1hhj};ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj};ubj2 )}(hj5 h]h*}(hj;hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj};ubh)}(hsh]hs}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj};ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjy;ubj)}(hvoid *xh](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hj<hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hxh]hx}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjy;ubeh}(h]h ]h"]h$]h&]jj uh1jhj@;hhhjR;hM|ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<;hhhjR;hM|ubah}(h]j7;ah ](jjeh"]h$]h&]jj)jhuh1hhjR;hM|hj9;hhubj )}(hhh]j9)}(hDeallocate an objecth]hDeallocate an object}(hjF<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chM|hjC<hhubah}(h]h ]h"]h$]h&]uh1jhj9;hhhjR;hM|ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^<j4j^<j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh<h]h Parameters}(hjj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf<ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjb<ubj)}(hhh](j)}(h<``struct kmem_cache *s`` The cache the allocation was from. h](j)}(h``struct kmem_cache *s``h]j?)}(hj<h]hstruct kmem_cache *s}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chM}hj<ubj)}(hhh]j9)}(h"The cache the allocation was from.h]h"The cache the allocation was from.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM}hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM}hj~<ubj)}(h-``void *x`` The previously allocated object. h](j)}(h ``void *x``h]j?)}(hj<h]hvoid *x}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chM~hj<ubj)}(hhh]j9)}(h The previously allocated object.h]h The previously allocated object.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM~hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM~hj~<ubeh}(h]h ]h"]h$]h&]uh1jhjb<ubj9)}(h**Description**h]jz)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjb<ubj9)}(h>Free an object which was previously allocated from this cache.h]h>Free an object which was previously allocated from this cache.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjb<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree (C function)c.kfreehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid kfree (const void *object)h]h)}(hvoid kfree(const void *object)h](j)}(hvoidh]hvoid}(hj@=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMubj)}(h h]h }(hjO=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=hhhjN=hMubh)}(hkfreeh]h)}(hkfreeh]hkfree}(hja=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<=hhhjN=hMubj)}(h(const void *object)h]j)}(hconst void *objecth](j!)}(hjeh]hconst}(hj}=hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjy=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj2 )}(hj5 h]h*}(hj=hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjy=ubh)}(hobjecth]hobject}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhju=ubah}(h]h ]h"]h$]h&]jj uh1jhj<=hhhjN=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8=hhhjN=hMubah}(h]j3=ah ](jjeh"]h$]h&]jj)jhuh1hhjN=hMhj5=hhubj )}(hhh]j9)}(h free previously allocated memoryh]h free previously allocated memory}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj=hhubah}(h]h ]h"]h$]h&]uh1jhj5=hhhjN=hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhjUhNhNubjp)}(h**Parameters** ``const void *object`` pointer returned by kmalloc() or kmem_cache_alloc() **Description** If **object** is NULL, no operation is performed.h](j9)}(h**Parameters**h]jz)}(hj >h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj >ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj>ubj)}(hhh]j)}(hK``const void *object`` pointer returned by kmalloc() or kmem_cache_alloc() h](j)}(h``const void *object``h]j?)}(hj,>h]hconst void *object}(hj.>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*>ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj&>ubj)}(hhh]j9)}(h3pointer returned by kmalloc() or kmem_cache_alloc()h]h3pointer returned by kmalloc() or kmem_cache_alloc()}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjA>hMhjB>ubah}(h]h ]h"]h$]h&]uh1jhj&>ubeh}(h]h ]h"]h$]h&]uh1jhjA>hMhj#>ubah}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hjg>h]h Description}(hji>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje>ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj>ubj9)}(h1If **object** is NULL, no operation is performed.h](hIf }(hj}>hhhNhNubjz)}(h **object**h]hobject}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}>ubh$ is NULL, no operation is performed.}(hj}>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkvfree (C function)c.kvfreehNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid kvfree (const void *addr)h]h)}(hvoid kvfree(const void *addr)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMubh)}(hkvfreeh]h)}(hkvfreeh]hkvfree}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj>hMubj)}(h(const void *addr)h]j)}(hconst void *addrh](j!)}(hjeh]hconst}(hj>hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj$?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2 )}(hj5 h]h*}(hj2?hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>ubh)}(haddrh]haddr}(hj??hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj>ubah}(h]h ]h"]h$]h&]jj uh1jhj>hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj>hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj>hhubj )}(hhh]j9)}(h Free memory.h]h Free memory.}(hji?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjf?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubj)}(hhh]j)}(h2``const void *addr`` Pointer to allocated memory. h](j)}(h``const void *addr``h]j?)}(hj?h]hconst void *addr}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubj)}(hhh]j9)}(hPointer to allocated memory.h]hPointer to allocated memory.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubj9)}(hkvfree 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]hkvfree 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?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubj9)}(h **Context**h]jz)}(hj @h]hContext}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj @ubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubj9)}(h5Either preemptible task context or not-NMI interrupt.h]h5Either preemptible task context or not-NMI interrupt.}(hj"@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkvfree_sensitive (C function)c.kvfree_sensitivehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h4void kvfree_sensitive (const void *addr, size_t len)h]h)}(h3void kvfree_sensitive(const void *addr, size_t len)h](j)}(hvoidh]hvoid}(hjQ@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM@hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMubj)}(h h]h }(hj`@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM@hhhj_@hMubh)}(hkvfree_sensitiveh]h)}(hkvfree_sensitiveh]hkvfree_sensitive}(hjr@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjM@hhhj_@hMubj)}(h(const void *addr, size_t len)h](j)}(hconst void *addrh](j!)}(hjeh]hconst}(hj@hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj2 )}(hj5 h]h*}(hj@hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj@ubh)}(haddrh]haddr}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@ubj)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj@modnameN classnameNj\j_)}jb]je)}jXjt@sbc.kvfree_sensitiveasbuh1hhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hlenh]hlen}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@ubeh}(h]h ]h"]h$]h&]jj uh1jhjM@hhhj_@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjI@hhhj_@hMubah}(h]jD@ah ](jjeh"]h$]h&]jj)jhuh1hhj_@hMhjF@hhubj )}(hhh]j9)}(h4Free a data object containing sensitive information.h]h4Free a data object containing sensitive information.}(hjFAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjCAhhubah}(h]h ]h"]h$]h&]uh1jhjF@hhhj_@hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^Aj4j^Aj5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjhAh]h Parameters}(hjjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfAubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjbAubj)}(hhh](j)}(h=``const void *addr`` address of the data object to be freed. h](j)}(h``const void *addr``h]j?)}(hjAh]hconst void *addr}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjAubj)}(hhh]j9)}(h'address of the data object to be freed.h]h'address of the data object to be freed.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj~Aubj)}(h*``size_t len`` length of the data object. h](j)}(h``size_t len``h]j?)}(hjAh]h size_t len}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjAubj)}(hhh]j9)}(hlength of the data object.h]hlength of the data object.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj~Aubeh}(h]h ]h"]h$]h&]uh1jhjbAubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjbAubj9)}(hUse 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]hUse 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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjbAubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__kmem_cache_create_args (C function)c.__kmem_cache_create_argshNtauh1hhjUhhhNhNubh)}(hhh](h)}(hstruct kmem_cache * __kmem_cache_create_args (const char *name, unsigned int object_size, struct kmem_cache_args *args, slab_flags_t flags)h]h)}(hstruct kmem_cache *__kmem_cache_create_args(const char *name, unsigned int object_size, struct kmem_cache_args *args, slab_flags_t flags)h](j!)}(hj$h]hstruct}(hj@BhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ah"]h$]h&]uh1j1 hj ah"]h$]h&]uh1j1 hjBubh)}(hnameh]hname}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubj)}(hunsigned int object_sizeh](j)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hj%ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hinth]hint}(hj3ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjAChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(h object_sizeh]h object_size}(hjOChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubj)}(hstruct kmem_cache_args *argsh](j!)}(hj$h]hstruct}(hjhChhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjdCubj)}(h h]h }(hjuChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdCubh)}(hhh]h)}(hkmem_cache_argsh]hkmem_cache_args}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjCmodnameN classnameNj\j_)}jb]j{Bc.__kmem_cache_create_argsasbuh1hhjdCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdCubj2 )}(hj5 h]h*}(hjChhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjdCubh)}(hargsh]hargs}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubj)}(hslab_flags_t flagsh](h)}(hhh]h)}(h slab_flags_th]h slab_flags_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjCmodnameN classnameNj\j_)}jb]j{Bc.__kmem_cache_create_argsasbuh1hhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hflagsh]hflags}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubeh}(h]h ]h"]h$]h&]jj uh1jhj`). ``slab_flags_t flags`` See the desriptions of individual flags. The common ones are listed in the description below. **Description** Not to be called directly, use the kmem_cache_create() wrapper with the same parameters. Commonly used **flags**: :c:type:`SLAB_ACCOUNT` - Account allocations to memcg. :c:type:`SLAB_HWCACHE_ALIGN` - Align objects on cache line boundaries. :c:type:`SLAB_RECLAIM_ACCOUNT` - Objects are reclaimable. :c:type:`SLAB_TYPESAFE_BY_RCU` - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using. **Context** Cannot be called within a interrupt, but can be interrupted. **Return** a pointer to the cache on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hjSDh]h Parameters}(hjUDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQDubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjMDubj)}(hhh](j)}(hV``const char *name`` A string which is used in /proc/slabinfo to identify this cache. h](j)}(h``const char *name``h]j?)}(hjrDh]hconst char *name}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhjlDubj)}(hhh]j9)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhKhjDubah}(h]h ]h"]h$]h&]uh1jhjlDubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjiDubj)}(hN``unsigned int object_size`` The size of objects to be created in this cache. h](j)}(h``unsigned int object_size``h]j?)}(hjDh]hunsigned int object_size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjDubj)}(hhh]j9)}(h0The size of objects to be created in this cache.h]h0The size of objects to be created in this cache.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjiDubj)}(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]j?)}(hjDh]hstruct kmem_cache_args *args}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjDubj)}(hhh]j9)}(heAdditional arguments for the cache creation (see :c:type:`struct kmem_cache_args `).h](h1Additional arguments for the cache creation (see }(hjDhhhNhNubh)}(h2:c:type:`struct kmem_cache_args `h]j?)}(hjEh]hstruct kmem_cache_args}(hj EhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:kmem_cache_argsuh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjDubh).}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj$EhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjiDubj)}(hu``slab_flags_t flags`` See the desriptions of individual flags. The common ones are listed in the description below. h](j)}(h``slab_flags_t flags``h]j?)}(hjAEh]hslab_flags_t flags}(hjCEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?Eubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj;Eubj)}(hhh]j9)}(h]See the desriptions of individual flags. The common ones are listed in the description below.h]h]See the desriptions of individual flags. The common ones are listed in the description below.}(hjZEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjWEubah}(h]h ]h"]h$]h&]uh1jhj;Eubeh}(h]h ]h"]h$]h&]uh1jhjVEhMhjiDubeh}(h]h ]h"]h$]h&]uh1jhjMDubj9)}(h**Description**h]jz)}(hj}Eh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{Eubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjMDubj9)}(hXNot to be called directly, use the kmem_cache_create() wrapper with the same parameters.h]hXNot to be called directly, use the kmem_cache_create() wrapper with the same parameters.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjMDubj9)}(hCommonly used **flags**:h](hCommonly used }(hjEhhhNhNubjz)}(h **flags**h]hflags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh:}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM hjMDubj9)}(h6:c:type:`SLAB_ACCOUNT` - Account allocations to memcg.h](h)}(h:c:type:`SLAB_ACCOUNT`h]j?)}(hjEh]h SLAB_ACCOUNT}(hjEhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j: SLAB_ACCOUNTuh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM hjEubh - Account allocations to memcg.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjEhM hjMDubj9)}(hF:c:type:`SLAB_HWCACHE_ALIGN` - Align objects on cache line boundaries.h](h)}(h:c:type:`SLAB_HWCACHE_ALIGN`h]j?)}(hjEh]hSLAB_HWCACHE_ALIGN}(hjEhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_HWCACHE_ALIGNuh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM hjEubh* - Align objects on cache line boundaries.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjFhM hjMDubj9)}(h9:c:type:`SLAB_RECLAIM_ACCOUNT` - Objects are reclaimable.h](h)}(h:c:type:`SLAB_RECLAIM_ACCOUNT`h]j?)}(hj%Fh]hSLAB_RECLAIM_ACCOUNT}(hj'FhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj#Fubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_RECLAIM_ACCOUNTuh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjFubh - Objects are reclaimable.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjBFhMhjMDubj9)}(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]j?)}(hjSFh]hSLAB_TYPESAFE_BY_RCU}(hjUFhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjQFubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:SLAB_TYPESAFE_BY_RCUuh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjMFubhp - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using.}(hjMFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjpFhMhjMDubj9)}(h **Context**h]jz)}(hj}Fh]hContext}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{Fubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjMDubj9)}(h ah"]h$]h&]uh1j1 hjFhhhj GhMlubh)}(hkmem_buckets_createh]h)}(hj Gh]hkmem_buckets_create}(hj-GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)Gubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhj GhMlubj)}(hk(const char *name, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void*))h](j)}(hconst char *nameh](j!)}(hjeh]hconst}(hjHGhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjDGubj)}(h h]h }(hjUGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDGubj)}(hcharh]hchar}(hjcGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDGubj)}(h h]h }(hjqGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDGubj2 )}(hj5 h]h*}(hjGhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjDGubh)}(hnameh]hname}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDGubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@Gubj)}(hslab_flags_t flagsh](h)}(hhh]h)}(h slab_flags_th]h slab_flags_t}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjGmodnameN classnameNj\j_)}jb]jGc.kmem_buckets_createasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hflagsh]hflags}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@Gubj)}(hunsigned int useroffseth](j)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hinth]hint}(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(h useroffseth]h useroffset}(hj%HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@Gubj)}(hunsigned int usersizeh](j)}(hunsignedh]hunsigned}(hj>HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Hubj)}(h h]h }(hjLHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Hubj)}(hinth]hint}(hjZHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Hubj)}(h h]h }(hjhHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Hubh)}(husersizeh]husersize}(hjvHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:Hubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@Gubj)}(hvoid (*ctor)(void*)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj2 )}(hjk h]h(}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubj2 )}(hj5 h]h*}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubh)}(hctorh]hctor}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubj2 )}(hj h]h)}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubj2 )}(hjk h]h(}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubj)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj2 )}(hj5 h]h*}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubj2 )}(hj h]h)}(hjIhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@Gubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhj GhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhj GhMlubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhj GhMlhjFhhubj )}(hhh]j9)}(hUCreate a set of caches that handle dynamic sized allocations via kmem_buckets_alloc()h]hUCreate a set of caches that handle dynamic sized allocations via kmem_buckets_alloc()}(hj1IhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMlhj.Ihhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj GhMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIIj4jIIj5j6j7uh1hhhhjUhNhNubjp)}(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. **Description** 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](j9)}(h**Parameters**h]jz)}(hjSIh]h Parameters}(hjUIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQIubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMphjMIubj)}(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]j?)}(hjrIh]hconst char *name}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMohjlIubj)}(hhh]j9)}(hA prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix.h]hA prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMnhjIubah}(h]h ]h"]h$]h&]uh1jhjlIubeh}(h]h ]h"]h$]h&]uh1jhjIhMohjiIubj)}(hI``slab_flags_t flags`` SLAB flags (see kmem_cache_create() for details). h](j)}(h``slab_flags_t flags``h]j?)}(hjIh]hslab_flags_t flags}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMphjIubj)}(hhh]j9)}(h1SLAB flags (see kmem_cache_create() for details).h]h1SLAB flags (see kmem_cache_create() for details).}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMphjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMphjiIubj)}(hg``unsigned int useroffset`` Starting offset within an allocation that may be copied to/from userspace. h](j)}(h``unsigned int useroffset``h]j?)}(hjIh]hunsigned int useroffset}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMrhjIubj)}(hhh]j9)}(hJStarting offset within an allocation that may be copied to/from userspace.h]hJStarting offset within an allocation that may be copied to/from userspace.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMqhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMrhjiIubj)}(hg``unsigned int usersize`` How many bytes, starting at **useroffset**, may be copied to/from userspace. h](j)}(h``unsigned int usersize``h]j?)}(hjJh]hunsigned int usersize}(hj!JhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMthjJubj)}(hhh]j9)}(hLHow many bytes, starting at **useroffset**, may be copied to/from userspace.h](hHow many bytes, starting at }(hj8JhhhNhNubjz)}(h**useroffset**h]h useroffset}(hj@JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8Jubh", may be copied to/from userspace.}(hj8JhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMshj5Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj4JhMthjiIubj)}(h[``void (*ctor)(void *)`` A constructor for the objects, run when new allocations are made. h](j)}(h``void (*ctor)(void *)``h]j?)}(hjkJh]hvoid (*ctor)(void *)}(hjmJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiJubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMuhjeJubj)}(hhh]j9)}(hAA constructor for the objects, run when new allocations are made.h]hAA constructor for the objects, run when new allocations are made.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMuhjJubah}(h]h ]h"]h$]h&]uh1jhjeJubeh}(h]h ]h"]h$]h&]uh1jhjJhMuhjiIubeh}(h]h ]h"]h$]h&]uh1jhjMIubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMwhjMIubj9)}(h=Cannot be called within an interrupt, but can be interrupted.h]h=Cannot be called within an interrupt, but can be interrupted.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMwhjMIubj9)}(h **Return**h]jz)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMyhjMIubj9)}(ha 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]ha 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.)}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMyhjMIubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_shrink (C function)c.kmem_cache_shrinkhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h1int kmem_cache_shrink (struct kmem_cache *cachep)h]h)}(h0int kmem_cache_shrink(struct kmem_cache *cachep)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM$ubj)}(h h]h }(hj!KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj KhM$ubh)}(hkmem_cache_shrinkh]h)}(hkmem_cache_shrinkh]hkmem_cache_shrink}(hj3KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/Kubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj KhM$ubj)}(h(struct kmem_cache *cachep)h]j)}(hstruct kmem_cache *cacheph](j!)}(hj$h]hstruct}(hjOKhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjKKubj)}(h h]h }(hj\KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKKubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hjmKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjKubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjoKmodnameN classnameNj\j_)}jb]je)}jXj5Ksbc.kmem_cache_shrinkasbuh1hhjKKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKKubj2 )}(hj5 h]h*}(hjKhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjKKubh)}(hcacheph]hcachep}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKKubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjGKubah}(h]h ]h"]h$]h&]jj uh1jhjKhhhj KhM$ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj Khhhj KhM$ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1hhj KhM$hjKhhubj )}(hhh]j9)}(hShrink a cache.h]hShrink a cache.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM$hjKhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhj KhM$ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhjUhNhNubjp)}(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 otherwiseh](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM(hjKubj)}(hhh]j)}(h3``struct kmem_cache *cachep`` The cache to shrink. h](j)}(h``struct kmem_cache *cachep``h]j?)}(hjLh]hstruct kmem_cache *cachep}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM%hj Lubj)}(hhh]j9)}(hThe cache to shrink.h]hThe cache to shrink.}(hj,LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(LhM%hj)Lubah}(h]h ]h"]h$]h&]uh1jhj Lubeh}(h]h ]h"]h$]h&]uh1jhj(LhM%hj Lubah}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hjNLh]h Description}(hjPLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLLubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM'hjKubj9)}(hxReleases as many slabs as possible for a cache. To help debugging, a zero exit status indicates all slabs were released.h]hxReleases as many slabs as possible for a cache. To help debugging, a zero exit status indicates all slabs were released.}(hjdLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM'hjKubj9)}(h **Return**h]jz)}(hjuLh]hReturn}(hjwLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsLubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM*hjKubj9)}(h4``0`` if all slabs were released, non-zero otherwiseh](j?)}(h``0``h]h0}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubh/ if all slabs were released, non-zero otherwise}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM*hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_dump_obj (C function)c.kmem_dump_objhNtauh1hhjUhhhNhNubh)}(hhh](h)}(h!bool kmem_dump_obj (void *object)h]h)}(h bool kmem_dump_obj(void *object)h](j)}(hj)h]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMBubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhjLhMBubh)}(h kmem_dump_objh]h)}(h kmem_dump_objh]h kmem_dump_obj}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhjLhMBubj)}(h(void *object)h]j)}(h void *objecth](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj2 )}(hj5 h]h*}(hj MhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjMubh)}(hobjecth]hobject}(hj-MhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubah}(h]h ]h"]h$]h&]jj uh1jhjLhhhjLhMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjLhMBubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1hhjLhMBhjLhhubj )}(hhh]j9)}(h+Print available slab provenance informationh]h+Print available slab provenance information}(hjWMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMBhjTMhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhMBubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3joMj4joMj5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjyMh]h Parameters}(hj{MhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwMubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMFhjsMubj)}(hhh]j)}(hG``void *object`` slab object for which to find provenance information. h](j)}(h``void *object``h]j?)}(hjMh]h void *object}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMChjMubj)}(hhh]j9)}(h5slab object for which to find provenance information.h]h5slab object for which to find provenance information.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhMChjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMChjMubah}(h]h ]h"]h$]h&]uh1jhjsMubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMEhjsMubj9)}(hXThis 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]hXThis 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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMEhjsMubj9)}(h **Return**h]jz)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMLhjsMubj9)}(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](j?)}(h``true``h]htrue}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubhZ if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either }(hjNhhhNhNubj?)}(h``true``h]htrue}(hj&NhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubh or }(hjNhhhNhNubj?)}(h ``false``h]hfalse}(hj8NhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubh3 if the pointer is to an already-freed object, and }(hjNhhhNhNubj?)}(h ``false``h]hfalse}(hjJNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubh otherwise.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMLhjsMubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree_sensitive (C function)c.kfree_sensitivehNtauh1hhjUhhhNhNubh)}(hhh](h)}(h$void kfree_sensitive (const void *p)h]h)}(h#void kfree_sensitive(const void *p)h](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhjNhMubh)}(hkfree_sensitiveh]h)}(hkfree_sensitiveh]hkfree_sensitive}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhjNhMubj)}(h(const void *p)h]j)}(h const void *ph](j!)}(hjeh]hconst}(hjNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj2 )}(hj5 h]h*}(hjNhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjNubh)}(hj> h]hp}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjNubah}(h]h ]h"]h$]h&]jj uh1jhjNhhhjNhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{NhhhjNhMubah}(h]jvNah ](jjeh"]h$]h&]jj)jhuh1hhjNhMhjxNhhubj )}(hhh]j9)}(h4Clear sensitive information in memory before freeingh]h4Clear sensitive information in memory before freeing}(hj-OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj*Ohhubah}(h]h ]h"]h$]h&]uh1jhjxNhhhjNhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEOj4jEOj5j6j7uh1hhhhjUhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjOOh]h Parameters}(hjQOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMOubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjIOubj)}(hhh]j)}(h+``const void *p`` object to free memory of h](j)}(h``const void *p``h]j?)}(hjnOh]h const void *p}(hjpOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlOubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjhOubj)}(hhh]j9)}(hobject to free memory ofh]hobject to free memory of}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjhOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjeOubah}(h]h ]h"]h$]h&]uh1jhjIOubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjIOubj9)}(hvThe memory of the object **p** points to is zeroed before freed. If **p** is ``NULL``, kfree_sensitive() does nothing.h](hThe memory of the object }(hjOhhhNhNubjz)}(h**p**h]hp}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh& points to is zeroed before freed. If }(hjOhhhNhNubjz)}(h**p**h]hp}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh is }(hjOhhhNhNubj?)}(h``NULL``h]hNULL}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubh!, kfree_sensitive() does nothing.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjIOubj9)}(h**Note**h]jz)}(hjPh]hNote}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjIOubj9)}(hthis 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]hthis 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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjIOubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkvfree_rcu_barrier (C function)c.kvfree_rcu_barrierhNtauh1hhjUhhhNhNubh)}(hhh](h)}(hvoid kvfree_rcu_barrier (void)h]h)}(hvoid kvfree_rcu_barrier(void)h](j)}(hvoidh]hvoid}(hjKPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGPhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMubj)}(h h]h }(hjZPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGPhhhjYPhMubh)}(hkvfree_rcu_barrierh]h)}(hkvfree_rcu_barrierh]hkvfree_rcu_barrier}(hjlPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGPhhhjYPhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]noemphjj uh1jhjPubah}(h]h ]h"]h$]h&]jj uh1jhjGPhhhjYPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjCPhhhjYPhMubah}(h]j>Pah ](jjeh"]h$]h&]jj)jhuh1hhjYPhMhj@Phhubj )}(hhh]j9)}(h/Wait until all in-flight kvfree_rcu() complete.h]h/Wait until all in-flight kvfree_rcu() complete.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjPhhubah}(h]h ]h"]h$]h&]uh1jhj@PhhhjYPhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhjUhNhNubjp)}(hX**Parameters** ``void`` no arguments **Description** Note that a single argument of kvfree_rcu() call has a slow path that triggers synchronize_rcu() following by freeing a pointer. It is done before the return from the function. Therefore for any single-argument call that will result in a kfree() to a cache that is to be destroyed during module exit, it is developer's responsibility to ensure that all such calls have returned before the call to kmem_cache_destroy().h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjPubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjPh]hvoid}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhjPubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhKhj Qubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhKhjPubah}(h]h ]h"]h$]h&]uh1jhjPubj9)}(h**Description**h]jz)}(hj.Qh]h Description}(hj0QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Qubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhjPubj9)}(hXNote that a single argument of kvfree_rcu() call has a slow path that triggers synchronize_rcu() following by freeing a pointer. It is done before the return from the function. Therefore for any single-argument call that will result in a kfree() to a cache that is to be destroyed during module exit, it is developer's responsibility to ensure that all such calls have returned before the call to kmem_cache_destroy().h]hXNote that a single argument of kvfree_rcu() call has a slow path that triggers synchronize_rcu() following by freeing a pointer. It is done before the return from the function. Therefore for any single-argument call that will result in a kfree() to a cache that is to be destroyed during module exit, it is developer’s responsibility to ensure that all such calls have returned before the call to kmem_cache_destroy().}(hjDQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree_const (C function) c.kfree_consthNtauh1hhjUhhhNhNubh)}(hhh](h)}(h void kfree_const (const void *x)h]h)}(hvoid kfree_const(const void *x)h](j)}(hvoidh]hvoid}(hjsQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoQhhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK%ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoQhhhjQhK%ubh)}(h kfree_consth]h)}(h kfree_consth]h kfree_const}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjoQhhhjQhK%ubj)}(h(const void *x)h]j)}(h const void *xh](j!)}(hjeh]hconst}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj2 )}(hj5 h]h*}(hjQhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQubh)}(hj<h]hx}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubah}(h]h ]h"]h$]h&]jj uh1jhjoQhhhjQhK%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkQhhhjQhK%ubah}(h]jfQah ](jjeh"]h$]h&]jj)jhuh1hhjQhK%hjhQhhubj )}(hhh]j9)}(hconditionally free memoryh]hconditionally free memory}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK%hjRhhubah}(h]h ]h"]h$]h&]uh1jhjhQhhhjQhK%ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5Rj4j5Rj5j6j7uh1hhhhjUhNhNubjp)}(h**Parameters** ``const void *x`` pointer to the memory **Description** Function calls kfree only if **x** is not in .rodata section.h](j9)}(h**Parameters**h]jz)}(hj?Rh]h Parameters}(hjARhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=Rubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK)hj9Rubj)}(hhh]j)}(h(``const void *x`` pointer to the memory h](j)}(h``const void *x``h]j?)}(hj^Rh]h const void *x}(hj`RhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\Rubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK&hjXRubj)}(hhh]j9)}(hpointer to the memoryh]hpointer to the memory}(hjwRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjsRhK&hjtRubah}(h]h ]h"]h$]h&]uh1jhjXRubeh}(h]h ]h"]h$]h&]uh1jhjsRhK&hjURubah}(h]h ]h"]h$]h&]uh1jhj9Rubj9)}(h**Description**h]jz)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK(hj9Rubj9)}(h=Function calls kfree only if **x** is not in .rodata section.h](hFunction calls kfree only if }(hjRhhhNhNubjz)}(h**x**h]hx}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh is not in .rodata section.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK(hj9Rubeh}(h]h ] kernelindentah"]h$]h&]uh1johjUhhhNhNubeh}(h]the-slab-cacheah ]h"]the slab cacheah$]h&]uh1hhhhhhhhK#ubh)}(hhh](h)}(hVirtually Contiguous Mappingsh]hVirtually Contiguous Mappings}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhK2ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_unmap_aliases (C function)c.vm_unmap_aliaseshNtauh1hhjRhhhNhNubh)}(hhh](h)}(hvoid vm_unmap_aliases (void)h]h)}(hvoid vm_unmap_aliases(void)h](j)}(hvoidh]hvoid}(hj ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM ubh)}(hvm_unmap_aliasesh]h)}(hvm_unmap_aliasesh]hvm_unmap_aliases}(hj*ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&Subah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShM ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjFShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBSubah}(h]h ]h"]h$]h&]noemphjj uh1jhj>Subah}(h]h ]h"]h$]h&]jj uh1jhjShhhjShM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShM ubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1hhjShM hjRhhubj )}(hhh]j9)}(h0unmap outstanding lazy aliases in the vmap layerh]h0unmap outstanding lazy aliases in the vmap layer}(hjpShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjmShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjShM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhjRhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjSubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjSh]hvoid}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chKhjSubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShKhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShKhjSubah}(h]h ]h"]h$]h&]uh1jhjSubj9)}(h**Description**h]jz)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chKhjSubj9)}(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).}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjSubj9)}(hvm_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]hvm_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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_unmap_ram (C function)c.vm_unmap_ramhNtauh1hhjRhhhNhNubh)}(hhh](h)}(h7void vm_unmap_ram (const void *mem, unsigned int count)h]h)}(h6void vm_unmap_ram(const void *mem, unsigned int count)h](j)}(hvoidh]hvoid}(hj@ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ah"]h$]h&]uh1j1 hjyTubh)}(hmemh]hmem}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjuTubj)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hcounth]hcount}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjuTubeh}(h]h ]h"]h$]h&]jj uh1jhjhj{Uubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjwUubj)}(hhh]j9)}(h"the pointer returned by vm_map_ramh]h"the pointer returned by vm_map_ram}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhM hjUubah}(h]h ]h"]h$]h&]uh1jhjwUubeh}(h]h ]h"]h$]h&]uh1jhjUhM hjtUubj)}(hV``unsigned int count`` the count passed to that vm_map_ram call (cannot unmap partial)h](j)}(h``unsigned int count``h]j?)}(hjUh]hunsigned int count}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjUubj)}(hhh]j9)}(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)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhM hjtUubeh}(h]h ]h"]h$]h&]uh1jhjXUubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_map_ram (C function) c.vm_map_ramhNtauh1hhjRhhhNhNubh)}(hhh](h)}(hEvoid * vm_map_ram (struct page **pages, unsigned int count, int node)h]h)}(hCvoid *vm_map_ram(struct page **pages, unsigned int count, int node)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj VhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj VhhhjVhM ubj2 )}(hj5 h]h*}(hj-VhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj VhhhjVhM ubh)}(h vm_map_ramh]h)}(h vm_map_ramh]h vm_map_ram}(hj>VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:Vubah}(h]h ](jjeh"]h$]h&]jj uh1hhj VhhhjVhM ubj)}(h3(struct page **pages, unsigned int count, int node)h](j)}(hstruct page **pagesh](j!)}(hj$h]hstruct}(hjZVhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjVVubj)}(h h]h }(hjgVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVVubh)}(hhh]h)}(hpageh]hpage}(hjxVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuVubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjzVmodnameN classnameNj\j_)}jb]je)}jXj@Vsb c.vm_map_ramasbuh1hhjVVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVVubj2 )}(hj5 h]h*}(hjVhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjVVubj2 )}(hj5 h]h*}(hjVhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjVVubh)}(hpagesh]hpages}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVVubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRVubj)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hcounth]hcount}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRVubj)}(hint nodeh](j)}(hinth]hint}(hj*WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Wubj)}(h h]h }(hj8WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Wubh)}(hnodeh]hnode}(hjFWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&Wubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRVubeh}(h]h ]h"]h$]h&]jj uh1jhj VhhhjVhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjVhM ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjVhM hjVhhubj )}(hhh]j9)}(h>map pages linearly into kernel virtual address (vmalloc space)h]h>map pages linearly into kernel virtual address (vmalloc space)}(hjpWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjmWhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjVhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhjRhNhNubjp)}(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 failureh](j9)}(h**Parameters**h]jz)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjWubj)}(hhh](j)}(hG``struct page **pages`` an array of pointers to the pages to be mapped h](j)}(h``struct page **pages``h]j?)}(hjWh]hstruct page **pages}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjWubj)}(hhh]j9)}(h.an array of pointers to the pages to be mappedh]h.an array of pointers to the pages to be mapped}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubj)}(h'``unsigned int count`` number of pages h](j)}(h``unsigned int count``h]j?)}(hjWh]hunsigned int count}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjWubj)}(hhh]j9)}(hnumber of pagesh]hnumber of pages}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM hjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubj)}(h=``int node`` prefer to allocate data structures on this node h](j)}(h ``int node``h]j?)}(hj#Xh]hint node}(hj%XhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!Xubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjXubj)}(hhh]j9)}(h/prefer to allocate data structures on this nodeh]h/prefer to allocate data structures on this node}(hjhjXubh on failure}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvfree (C function)c.vfreehNtauh1hhjRhhhNhNubh)}(hhh](h)}(hvoid vfree (const void *addr)h]h)}(hvoid vfree(const void *addr)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM5 ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhM5 ubh)}(hvfreeh]h)}(hvfreeh]hvfree}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjXhM5 ubj)}(h(const void *addr)h]j)}(hconst void *addrh](j!)}(hjeh]hconst}(hjYhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjYubj)}(h h]h }(hj&YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hvoidh]hvoid}(hj4YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjBYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjPYhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(haddrh]haddr}(hj]YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubah}(h]h ]h"]h$]h&]jj uh1jhjXhhhjXhM5 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjXhM5 ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjXhM5 hjXhhubj )}(hhh]j9)}(h%Release memory allocated by vmalloc()h]h%Release memory allocated by vmalloc()}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM5 hjYhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjXhM5 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jYj4jYj5j6j7uh1hhhhjRhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM9 hjYubj)}(hhh]j)}(h)``const void *addr`` Memory base address h](j)}(h``const void *addr``h]j?)}(hjYh]hconst void *addr}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM6 hjYubj)}(hhh]j9)}(hMemory base addressh]hMemory base address}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhM6 hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM6 hjYubah}(h]h ]h"]h$]h&]uh1jhjYubj9)}(h**Description**h]jz)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM8 hjYubj9)}(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](h6Free the virtually continuous memory area starting at }(hjZhhhNhNubjz)}(h**addr**h]haddr}(hj!ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh, 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.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM8 hjYubj9)}(h/If **addr** is NULL, no operation is performed.h](hIf }(hj:ZhhhNhNubjz)}(h**addr**h]haddr}(hjBZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Zubh$ is NULL, no operation is performed.}(hj:ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM= hjYubj9)}(h **Context**h]jz)}(hj]Zh]hContext}(hj_ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[Zubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM? hjYubj9)}(hMay 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](hMay sleep if called }(hjsZhhhNhNubjK)}(h*not*h]hnot}(hj{ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjsZubh 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).}(hjsZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM? hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvunmap (C function)c.vunmaphNtauh1hhjRhhhNhNubh)}(hhh](h)}(hvoid vunmap (const void *addr)h]h)}(hvoid vunmap(const void *addr)h](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMu ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhMu ubh)}(hvunmaph]h)}(hvunmaph]hvunmap}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhMu ubj)}(h(const void *addr)h]j)}(hconst void *addrh](j!)}(hjeh]hconst}(hjZhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hvoidh]hvoid}(hj [hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj2 )}(hj5 h]h*}(hj([hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjZubh)}(haddrh]haddr}(hj5[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjZubah}(h]h ]h"]h$]h&]jj uh1jhjZhhhjZhMu ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhMu ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1hhjZhMu hjZhhubj )}(hhh]j9)}(h*release virtual mapping obtained by vmap()h]h*release virtual mapping obtained by vmap()}(hj_[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMu hj\[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhMu ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jw[j4jw[j5j6j7uh1hhhhjRhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMy hj{[ubj)}(hhh]j)}(h)``const void *addr`` memory base address h](j)}(h``const void *addr``h]j?)}(hj[h]hconst void *addr}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMv hj[ubj)}(hhh]j9)}(hmemory base addressh]hmemory base address}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMv hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMv hj[ubah}(h]h ]h"]h$]h&]uh1jhj{[ubj9)}(h**Description**h]jz)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMx hj{[ubj9)}(hwFree the virtually contiguous memory area starting at **addr**, which was created from the page array passed to vmap().h](h6Free the virtually contiguous memory area starting at }(hj[hhhNhNubjz)}(h**addr**h]haddr}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh9, which was created from the page array passed to vmap().}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMx hj{[ubj9)}(h(Must not be called in interrupt context.h]h(Must not be called in interrupt context.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM{ hj{[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmap (C function)c.vmaphNtauh1hhjRhhhNhNubh)}(hhh](h)}(hYvoid * vmap (struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)h]h)}(hWvoid *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)h](j)}(hvoidh]hvoid}(hjA\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=\hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hjP\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=\hhhjO\hM ubj2 )}(hj5 h]h*}(hj^\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=\hhhjO\hM ubh)}(hvmaph]h)}(hvmaph]hvmap}(hjo\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=\hhhjO\hM ubj)}(hM(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)h](j)}(hstruct page **pagesh](j!)}(hj$h]hstruct}(hj\hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hpageh]hpage}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj\modnameN classnameNj\j_)}jb]je)}jXjq\sbc.vmapasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hj\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubj2 )}(hj5 h]h*}(hj\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hpagesh]hpages}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hinth]hint}(hj&]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj4]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hcounth]hcount}(hjB]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj[]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubj)}(h h]h }(hji]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubj)}(hlongh]hlong}(hjw]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubh)}(hflagsh]hflags}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(h pgprot_t proth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj]modnameN classnameNj\j_)}jb]j\c.vmapasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hproth]hprot}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubeh}(h]h ]h"]h$]h&]jj uh1jhj=\hhhjO\hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9\hhhjO\hM ubah}(h]j4\ah ](jjeh"]h$]h&]jj)jhuh1hhjO\hM hj6\hhubj )}(hhh]j9)}(h5map an array of pages into virtually contiguous spaceh]h5map an array of pages into virtually contiguous space}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj^hhubah}(h]h ]h"]h$]h&]uh1jhj6\hhhjO\hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^j4j^j5j6j7uh1hhhhjRhNhNubjp)}(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 failureh](j9)}(h**Parameters**h]jz)}(hj'^h]h Parameters}(hj)^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%^ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj!^ubj)}(hhh](j)}(h/``struct page **pages`` array of page pointers h](j)}(h``struct page **pages``h]j?)}(hjF^h]hstruct page **pages}(hjH^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjD^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj@^ubj)}(hhh]j9)}(harray of page pointersh]harray of page pointers}(hj_^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[^hM hj\^ubah}(h]h ]h"]h$]h&]uh1jhj@^ubeh}(h]h ]h"]h$]h&]uh1jhj[^hM hj=^ubj)}(h.``unsigned int count`` number of pages to map h](j)}(h``unsigned int count``h]j?)}(hj^h]hunsigned int count}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjy^ubj)}(hhh]j9)}(hnumber of pages to maph]hnumber of pages to map}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjy^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM hj=^ubj)}(h'``unsigned long flags`` vm_area->flags h](j)}(h``unsigned long flags``h]j?)}(hj^h]hunsigned long flags}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj^ubj)}(hhh]j9)}(hvm_area->flagsh]hvm_area->flags}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hM hj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM hj=^ubj)}(h2``pgprot_t prot`` page protection for the mapping h](j)}(h``pgprot_t prot``h]j?)}(hj^h]h pgprot_t prot}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj^ubj)}(hhh]j9)}(hpage protection for the mappingh]hpage protection for the mapping}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hj=^ubeh}(h]h ]h"]h$]h&]uh1jhj!^ubj9)}(h**Description**h]jz)}(hj,_h]h Description}(hj._hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*_ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj!^ubj9)}(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](hMaps }(hjB_hhhNhNubjz)}(h **count**h]hcount}(hjJ_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB_ubh pages from }(hjB_hhhNhNubjz)}(h **pages**h]hpages}(hj\_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB_ubh* into contiguous kernel virtual space. If }(hjB_hhhNhNubjz)}(h **flags**h]hflags}(hjn_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB_ubh contains }(hjB_hhhNhNubj?)}(h``VM_MAP_PUT_PAGES``h]hVM_MAP_PUT_PAGES}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjB_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.}(hjB_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj!^ubj9)}(h **Return**h]jz)}(hj_h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj!^ubj9)}(h.the address of the area or ``NULL`` on failureh](hthe address of the area or }(hj_hhhNhNubj?)}(h``NULL``h]hNULL}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubh on failure}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj!^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmap_pfn (C function) c.vmap_pfnhNtauh1hhjRhhhNhNubh)}(hhh](h)}(hHvoid * vmap_pfn (unsigned long *pfns, unsigned int count, pgprot_t prot)h]h)}(hFvoid *vmap_pfn(unsigned long *pfns, unsigned int count, pgprot_t prot)h](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj`hM ubj2 )}(hj5 h]h*}(hj`hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_hhhj`hM ubh)}(hvmap_pfnh]h)}(hvmap_pfnh]hvmap_pfn}(hj `hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhj`hM ubj)}(h8(unsigned long *pfns, unsigned int count, pgprot_t prot)h](j)}(hunsigned long *pfnsh](j)}(hunsignedh]hunsigned}(hj<`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8`ubj)}(h h]h }(hjJ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8`ubj)}(hlongh]hlong}(hjX`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8`ubj)}(h h]h }(hjf`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8`ubj2 )}(hj5 h]h*}(hjt`hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj8`ubh)}(hpfnsh]hpfns}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj4`ubj)}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hcounth]hcount}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj4`ubj)}(h pgprot_t proth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]je)}jXj"`sb c.vmap_pfnasbuh1hhj`ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hproth]hprot}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj4`ubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhj`hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhj`hM ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1hhj`hM hj_hhubj )}(hhh]j9)}(h4map an array of PFNs into virtually contiguous spaceh]h4map an array of PFNs into virtually contiguous space}(hjFahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjCahhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj`hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^aj4j^aj5j6j7uh1hhhhjRhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjhah]h Parameters}(hjjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfaubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjbaubj)}(hhh](j)}(h&``unsigned long *pfns`` array of PFNs h](j)}(h``unsigned long *pfns``h]j?)}(hjah]hunsigned long *pfns}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjaubj)}(hhh]j9)}(h array of PFNsh]h array of PFNs}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM hj~aubj)}(h.``unsigned int count`` number of pages to map h](j)}(h``unsigned int count``h]j?)}(hjah]hunsigned int count}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjaubj)}(hhh]j9)}(hnumber of pages to maph]hnumber of pages to map}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM hj~aubj)}(h2``pgprot_t prot`` page protection for the mapping h](j)}(h``pgprot_t prot``h]j?)}(hjah]h pgprot_t prot}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjaubj)}(hhh]j9)}(hpage protection for the mappingh]hpage protection for the mapping}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhM hj~aubeh}(h]h ]h"]h$]h&]uh1jhjbaubj9)}(h**Description**h]jz)}(hj4bh]h Description}(hj6bhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2bubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjbaubj9)}(htMaps **count** PFNs from **pfns** into contiguous kernel virtual space and returns the start address of the mapping.h](hMaps }(hjJbhhhNhNubjz)}(h **count**h]hcount}(hjRbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJbubh PFNs from }(hjJbhhhNhNubjz)}(h**pfns**h]hpfns}(hjdbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJbubhS into contiguous kernel virtual space and returns the start address of the mapping.}(hjJbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjbaubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ remap_vmalloc_range (C function)c.remap_vmalloc_rangehNtauh1hhjRhhhNhNubh)}(hhh](h)}(hUint remap_vmalloc_range (struct vm_area_struct *vma, void *addr, unsigned long pgoff)h]h)}(hTint remap_vmalloc_range(struct vm_area_struct *vma, void *addr, unsigned long pgoff)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjbhMubh)}(hremap_vmalloc_rangeh]h)}(hremap_vmalloc_rangeh]hremap_vmalloc_range}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjbhMubj)}(h=(struct vm_area_struct *vma, void *addr, unsigned long pgoff)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjbhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]je)}jXjbsbc.remap_vmalloc_rangeasbuh1hhjbubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj2 )}(hj5 h]h*}(hj&chhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjbubh)}(hvmah]hvma}(hj3chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubj)}(h void *addrh](j)}(hvoidh]hvoid}(hjLchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHcubj)}(h h]h }(hjZchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHcubj2 )}(hj5 h]h*}(hjhchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHcubh)}(haddrh]haddr}(hjuchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHcubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubj)}(hunsigned long pgoffh](j)}(hunsignedh]hunsigned}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hpgoffh]hpgoff}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubeh}(h]h ]h"]h$]h&]jj uh1jhjbhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhjbhMhjbhhubj )}(hhh]j9)}(hmap vmalloc pages to userspaceh]hmap vmalloc pages to userspace}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jdj4jdj5j6j7uh1hhhhjRhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubj)}(hhh](j)}(hD``struct vm_area_struct *vma`` vma to cover (map full range of vma) h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj1dh]hstruct vm_area_struct *vma}(hj3dhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/dubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj+dubj)}(hhh]j9)}(h$vma to cover (map full range of vma)h]h$vma to cover (map full range of vma)}(hjJdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFdhMhjGdubah}(h]h ]h"]h$]h&]uh1jhj+dubeh}(h]h ]h"]h$]h&]uh1jhjFdhMhj(dubj)}(h``void *addr`` vmalloc memory h](j)}(h``void *addr``h]j?)}(hjjdh]h void *addr}(hjldhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhdubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhjddubj)}(hhh]j9)}(hvmalloc memoryh]hvmalloc memory}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjddubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj(dubj)}(hK``unsigned long pgoff`` number of pages into addr before first page to map h](j)}(h``unsigned long pgoff``h]j?)}(hjdh]hunsigned long pgoff}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhjdubj)}(hhh]j9)}(h2number of pages into addr before first page to maph]h2number of pages into addr before first page to map}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj(dubeh}(h]h ]h"]h$]h&]uh1jhj dubj9)}(h **Return**h]jz)}(hjdh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubj9)}(h0 for success, -Exxx on failureh]h0 for success, -Exxx on failure}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubj9)}(h**Description**h]jz)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubj9)}(hThis 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]hThis 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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubj9)}(h.Similar to remap_pfn_range() (see mm/memory.c)h]h.Similar to remap_pfn_range() (see mm/memory.c)}(hj*ehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMhj dubeh}(h]h ] kernelindentah"]h$]h&]uh1johjRhhhNhNubeh}(h]virtually-contiguous-mappingsah ]h"]virtually contiguous mappingsah$]h&]uh1hhhhhhhhK2ubh)}(hhh](h)}(hFile Mapping and Page Cacheh]hFile Mapping and Page Cache}(hjKehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHehhhhhK8ubh)}(hhh](h)}(hFilemaph]hFilemap}(hj\ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYehhhhhK;ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_fdatawrite_wbc (C function)c.filemap_fdatawrite_wbchNtauh1hhjYehhhNhNubh)}(hhh](h)}(hYint filemap_fdatawrite_wbc (struct address_space *mapping, struct writeback_control *wbc)h]h)}(hXint filemap_fdatawrite_wbc(struct address_space *mapping, struct writeback_control *wbc)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMoubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMoubh)}(hfilemap_fdatawrite_wbch]h)}(hfilemap_fdatawrite_wbch]hfilemap_fdatawrite_wbc}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjehMoubj)}(h>(struct address_space *mapping, struct writeback_control *wbc)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjehhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]h)}(h address_spaceh]h address_space}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXjesbc.filemap_fdatawrite_wbcasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj2 )}(hj5 h]h*}(hj fhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjeubh)}(hmappingh]hmapping}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjeubj)}(hstruct writeback_control *wbch](j!)}(hj$h]hstruct}(hj2fhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj.fubj)}(h h]h }(hj?fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.fubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hjPfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMfubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRfmodnameN classnameNj\j_)}jb]jec.filemap_fdatawrite_wbcasbuh1hhj.fubj)}(h h]h }(hjnfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.fubj2 )}(hj5 h]h*}(hj|fhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj.fubh)}(hwbch]hwbc}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.fubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjeubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhjehMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{ehhhjehMoubah}(h]jveah ](jjeh"]h$]h&]jj)jhuh1hhjehMohjxehhubj )}(hhh]j9)}(h/start writeback on mapping dirty pages in rangeh]h/start writeback on mapping dirty pages in range}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMohjfhhubah}(h]h ]h"]h$]h&]uh1jhjxehhhjehMoubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jfj4jfj5j6j7uh1hhhhjYehNhNubjp)}(hXG**Parameters** ``struct address_space *mapping`` address space structure to write ``struct writeback_control *wbc`` the writeback_control controlling the writeout **Description** Call writepages on the mapping using the provided wbc to control the writeout. **Return** ``0`` on success, negative error code otherwise.h](j9)}(h**Parameters**h]jz)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjfubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j?)}(hjfh]hstruct address_space *mapping}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMphjfubj)}(hhh]j9)}(h address space structure to writeh]h address space structure to write}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ghMphj gubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhj ghMphjfubj)}(hQ``struct writeback_control *wbc`` the writeback_control controlling the writeout h](j)}(h!``struct writeback_control *wbc``h]j?)}(hj-gh]hstruct writeback_control *wbc}(hj/ghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+gubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMqhj'gubj)}(hhh]j9)}(h.the writeback_control controlling the writeouth]h.the writeback_control controlling the writeout}(hjFghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBghMqhjCgubah}(h]h ]h"]h$]h&]uh1jhj'gubeh}(h]h ]h"]h$]h&]uh1jhjBghMqhjfubeh}(h]h ]h"]h$]h&]uh1jhjfubj9)}(h**Description**h]jz)}(hjhgh]h Description}(hjjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfgubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjfubj9)}(hNCall writepages on the mapping using the provided wbc to control the writeout.h]hNCall writepages on the mapping using the provided wbc to control the writeout.}(hj~ghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjfubj9)}(h **Return**h]jz)}(hjgh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMvhjfubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubh+ on success, negative error code otherwise.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMvhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*filemap_fdatawrite_range_kick (C function)c.filemap_fdatawrite_range_kickhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h[int filemap_fdatawrite_range_kick (struct address_space *mapping, loff_t start, loff_t end)h]h)}(hZint filemap_fdatawrite_range_kick(struct address_space *mapping, loff_t start, loff_t end)h](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghMubh)}(hfilemap_fdatawrite_range_kickh]h)}(hfilemap_fdatawrite_range_kickh]hfilemap_fdatawrite_range_kick}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMubj)}(h9(struct address_space *mapping, loff_t start, loff_t end)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhubj)}(h h]h }(hj,hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]h)}(h address_spaceh]h address_space}(hj=hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:hubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj?hmodnameN classnameNj\j_)}jb]je)}jXjhsbc.filemap_fdatawrite_range_kickasbuh1hhjhubj)}(h h]h }(hj]hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj2 )}(hj5 h]h*}(hjkhhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhubh)}(hmappingh]hmapping}(hjxhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjhubj)}(h loff_t starth](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]jYhc.filemap_fdatawrite_range_kickasbuh1hhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hstarth]hstart}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjhubj)}(h loff_t endh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]jYhc.filemap_fdatawrite_range_kickasbuh1hhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hendh]hend}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjhubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjghhubj )}(hhh]j9)}(hstart writeback on a rangeh]hstart writeback on a range}(hj2ihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj/ihhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jJij4jJij5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjTih]h Parameters}(hjVihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRiubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNiubj)}(hhh](j)}(h7``struct address_space *mapping`` target address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjsih]hstruct address_space *mapping}(hjuihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqiubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmiubj)}(hhh]j9)}(htarget address_spaceh]htarget address_space}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjmiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjjiubj)}(h-``loff_t start`` index to start writeback on h](j)}(h``loff_t start``h]j?)}(hjih]h loff_t start}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjiubj)}(hhh]j9)}(hindex to start writeback onh]hindex to start writeback on}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjjiubj)}(h4``loff_t end`` last (inclusive) index for writeback h](j)}(h``loff_t end``h]j?)}(hjih]h loff_t end}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjiubj)}(hhh]j9)}(h$last (inclusive) index for writebackh]h$last (inclusive) index for writeback}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjjiubeh}(h]h ]h"]h$]h&]uh1jhjNiubj9)}(h**Description**h]jz)}(hj jh]h Description}(hj"jhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNiubj9)}(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.}(hj6jhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNiubj9)}(h **Return**h]jz)}(hjGjh]hReturn}(hjIjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNiubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjajhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]jubh+ on success, negative error code otherwise.}(hj]jhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNiubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_flush (C function)c.filemap_flushhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h1int filemap_flush (struct address_space *mapping)h]h)}(h0int filemap_flush(struct address_space *mapping)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubh)}(h filemap_flushh]h)}(h filemap_flushh]h filemap_flush}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhjjhMubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjjmodnameN classnameNj\j_)}jb]je)}jXjjsbc.filemap_flushasbuh1hhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj2 )}(hj5 h]h*}(hj#khhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjjubh)}(hmappingh]hmapping}(hj0khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjubah}(h]h ]h"]h$]h&]jj uh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1hhjjhMhjjhhubj )}(hhh]j9)}(hmostly a non-blocking flushh]hmostly a non-blocking flush}(hjZkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjWkhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jrkj4jrkj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj|kh]h Parameters}(hj~khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzkubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvkubj)}(hhh]j)}(h7``struct address_space *mapping`` target address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjkh]hstruct address_space *mapping}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjkubj)}(hhh]j9)}(htarget address_spaceh]htarget address_space}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjvkubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvkubj9)}(hThis is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages.h]hThis is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvkubj9)}(h **Return**h]jz)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvkubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh+ on success, negative error code otherwise.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvkubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_range_has_page (C function)c.filemap_range_has_pagehNtauh1hhjYehhhNhNubh)}(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]hbool}(hjPlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLlhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hj^lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLlhhhj]lhMubh)}(hfilemap_range_has_pageh]h)}(hfilemap_range_has_pageh]hfilemap_range_has_page}(hjplhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjllubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLlhhhj]lhMubj)}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjlhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]h)}(h address_spaceh]h address_space}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlmodnameN classnameNj\j_)}jb]je)}jXjrlsbc.filemap_range_has_pageasbuh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj2 )}(hj5 h]h*}(hjlhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjlubh)}(hmappingh]hmapping}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmmodnameN classnameNj\j_)}jb]jlc.filemap_range_has_pageasbuh1hhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(h start_byteh]h start_byte}(hj-mhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjImhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFmubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjKmmodnameN classnameNj\j_)}jb]jlc.filemap_range_has_pageasbuh1hhjBmubj)}(h h]h }(hjgmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBmubh)}(hend_byteh]hend_byte}(hjumhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubeh}(h]h ]h"]h$]h&]jj uh1jhjLlhhhj]lhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHlhhhj]lhMubah}(h]jClah ](jjeh"]h$]h&]jj)jhuh1hhj]lhMhjElhhubj )}(hhh]j9)}(h check if a page exists in range.h]h check if a page exists in range.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjElhhhj]lhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj)}(hhh](j)}(hF``struct address_space *mapping`` address space within which to check h](j)}(h!``struct address_space *mapping``h]j?)}(hjmh]hstruct address_space *mapping}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj)}(hhh]j9)}(h#address space within which to checkh]h#address space within which to check}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjmubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j?)}(hjnh]hloff_t start_byte}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjnubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hj2nhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.nhMhj/nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj.nhMhjmubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j?)}(hjRnh]hloff_t end_byte}(hjTnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjLnubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjknhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjgnhMhjhnubah}(h]h ]h"]h$]h&]uh1jhjLnubeh}(h]h ]h"]h$]h&]uh1jhjgnhMhjmubeh}(h]h ]h"]h$]h&]uh1jhjmubj9)}(h**Description**h]jz)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj9)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj9)}(h **Return**h]jz)}(hjnh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj9)}(hQ``true`` if at least one page exists in the specified range, ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubh5 if at least one page exists in the specified range, }(hjnhhhNhNubj?)}(h ``false``h]hfalse}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubh otherwise.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$filemap_fdatawait_range (C function)c.filemap_fdatawait_rangehNtauh1hhjYehhhNhNubh)}(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)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#ubj)}(h h]h }(hj(ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhj'ohM#ubh)}(hfilemap_fdatawait_rangeh]h)}(hfilemap_fdatawait_rangeh]hfilemap_fdatawait_range}(hj:ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6oubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhj'ohM#ubj)}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjVohhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjRoubj)}(h h]h }(hjcohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRoubh)}(hhh]h)}(h address_spaceh]h address_space}(hjtohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjvomodnameN classnameNj\j_)}jb]je)}jXj ah"]h$]h&]uh1j1 hjRoubh)}(hmappingh]hmapping}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRoubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjNoubj)}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjomodnameN classnameNj\j_)}jb]joc.filemap_fdatawait_rangeasbuh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(h start_byteh]h start_byte}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjNoubj)}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjpmodnameN classnameNj\j_)}jb]joc.filemap_fdatawait_rangeasbuh1hhj pubj)}(h h]h }(hj1phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj pubh)}(hend_byteh]hend_byte}(hj?phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj pubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjNoubeh}(h]h ]h"]h$]h&]jj uh1jhjohhhj'ohM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhj'ohM#ubah}(h]j oah ](jjeh"]h$]h&]jj)jhuh1hhj'ohM#hjohhubj )}(hhh]j9)}(hwait for writeback to completeh]hwait for writeback to complete}(hjiphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#hjfphhubah}(h]h ]h"]h$]h&]uh1jhjohhhj'ohM#ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM'hjpubj)}(hhh](j)}(hF``struct address_space *mapping`` address space structure to wait for h](j)}(h!``struct address_space *mapping``h]j?)}(hjph]hstruct address_space *mapping}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM$hjpubj)}(hhh]j9)}(h#address space structure to wait forh]h#address space structure to wait for}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphM$hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM$hjpubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j?)}(hjph]hloff_t start_byte}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM%hjpubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphM%hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM%hjpubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j?)}(hjqh]hloff_t end_byte}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjqubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj5qhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1qhM&hj2qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhj1qhM&hjpubeh}(h]h ]h"]h$]h&]uh1jhjpubj9)}(h**Description**h]jz)}(hjWqh]h Description}(hjYqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUqubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM(hjpubj9)}(hWalk 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]hWalk 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.}(hjmqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM(hjpubj9)}(hSince 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]hSince 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|qhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjpubj9)}(h **Return**h]jz)}(hjqh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM0hjpubj9)}(h"error status of the address space.h]h"error status of the address space.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM0hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0filemap_fdatawait_range_keep_errors (C function)%c.filemap_fdatawait_range_keep_errorshNtauh1hhjYehhhNhNubh)}(hhh](h)}(hkint filemap_fdatawait_range_keep_errors (struct address_space *mapping, loff_t start_byte, loff_t end_byte)h]h)}(hjint filemap_fdatawait_range_keep_errors(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM;ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjqhM;ubh)}(h#filemap_fdatawait_range_keep_errorsh]h)}(h#filemap_fdatawait_range_keep_errorsh]h#filemap_fdatawait_range_keep_errors}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjqhM;ubj)}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjrhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj rubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj rubh)}(hhh]h)}(h address_spaceh]h address_space}(hj-rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*rubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/rmodnameN classnameNj\j_)}jb]je)}jXjqsb%c.filemap_fdatawait_range_keep_errorsasbuh1hhj rubj)}(h h]h }(hjMrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj rubj2 )}(hj5 h]h*}(hj[rhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj rubh)}(hmappingh]hmapping}(hjhrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj rubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubj)}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjrmodnameN classnameNj\j_)}jb]jIr%c.filemap_fdatawait_range_keep_errorsasbuh1hhj}rubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}rubh)}(h start_byteh]h start_byte}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}rubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubj)}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjrmodnameN classnameNj\j_)}jb]jIr%c.filemap_fdatawait_range_keep_errorsasbuh1hhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hend_byteh]hend_byte}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubeh}(h]h ]h"]h$]h&]jj uh1jhjqhhhjqhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjqhM;ubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1hhjqhM;hjqhhubj )}(hhh]j9)}(hwait for writeback to completeh]hwait for writeback to complete}(hj"shhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM;hjshhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjqhM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:sj4j:sj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjDsh]h Parameters}(hjFshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBsubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM?hj>subj)}(hhh](j)}(hF``struct address_space *mapping`` address space structure to wait for h](j)}(h!``struct address_space *mapping``h]j?)}(hjcsh]hstruct address_space *mapping}(hjeshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjasubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM<hj]subj)}(hhh]j9)}(h#address space structure to wait forh]h#address space structure to wait for}(hj|shhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxshM<hjysubah}(h]h ]h"]h$]h&]uh1jhj]subeh}(h]h ]h"]h$]h&]uh1jhjxshM<hjZsubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j?)}(hjsh]hloff_t start_byte}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM=hjsubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshM=hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM=hjZsubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j?)}(hjsh]hloff_t end_byte}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM>hjsubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshM>hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM>hjZsubeh}(h]h ]h"]h$]h&]uh1jhj>subj9)}(h**Description**h]jz)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM@hj>subj9)}(hWalk 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]hWalk the list of under-writeback pages of the given address space in the given range and wait for all of them. Unlike filemap_fdatawait_range(), this function does not clear error status of the address space.}(hj&thhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM@hj>subj9)}(hUse 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]hUse 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)}(hj5thhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMDhj>subeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!file_fdatawait_range (C function)c.file_fdatawait_rangehNtauh1hhjYehhhNhNubh)}(hhh](h)}(hPint file_fdatawait_range (struct file *file, loff_t start_byte, loff_t end_byte)h]h)}(hOint file_fdatawait_range(struct file *file, loff_t start_byte, loff_t end_byte)h](j)}(hinth]hint}(hjdthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`thhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMQubj)}(h h]h }(hjsthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`thhhjrthMQubh)}(hfile_fdatawait_rangeh]h)}(hfile_fdatawait_rangeh]hfile_fdatawait_range}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`thhhjrthMQubj)}(h7(struct file *file, loff_t start_byte, loff_t end_byte)h](j)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(hfileh]hfile}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]je)}jXjtsbc.file_fdatawait_rangeasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hjthhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(hfileh]hfile}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubj)}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjumodnameN classnameNj\j_)}jb]jtc.file_fdatawait_rangeasbuh1hhjuubj)}(h h]h }(hj4uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(h start_byteh]h start_byte}(hjBuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubj)}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hj^uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[uubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`umodnameN classnameNj\j_)}jb]jtc.file_fdatawait_rangeasbuh1hhjWuubj)}(h h]h }(hj|uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWuubh)}(hend_byteh]hend_byte}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWuubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubeh}(h]h ]h"]h$]h&]jj uh1jhj`thhhjrthMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\thhhjrthMQubah}(h]jWtah ](jjeh"]h$]h&]jj)jhuh1hhjrthMQhjYthhubj )}(hhh]j9)}(hwait for writeback to completeh]hwait for writeback to complete}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMQhjuhhubah}(h]h ]h"]h$]h&]uh1jhjYthhhjrthMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMUhjuubj)}(hhh](j)}(hK``struct file *file`` file pointing to address space structure to wait for h](j)}(h``struct file *file``h]j?)}(hjuh]hstruct file *file}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMRhjuubj)}(hhh]j9)}(h4file pointing to address space structure to wait forh]h4file pointing to address space structure to wait for}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj vhMRhj vubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhj vhMRhjuubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j?)}(hj.vh]hloff_t start_byte}(hj0vhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,vubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMShj(vubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjGvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjCvhMShjDvubah}(h]h ]h"]h$]h&]uh1jhj(vubeh}(h]h ]h"]h$]h&]uh1jhjCvhMShjuubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j?)}(hjgvh]hloff_t end_byte}(hjivhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjevubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMThjavubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|vhMThj}vubah}(h]h ]h"]h$]h&]uh1jhjavubeh}(h]h ]h"]h$]h&]uh1jhj|vhMThjuubeh}(h]h ]h"]h$]h&]uh1jhjuubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMVhjuubj9)}(hWalk 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]hWalk 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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMVhjuubj9)}(hSince 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]hSince 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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMZhjuubj9)}(h **Return**h]jz)}(hjvh]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^hjuubj9)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*filemap_fdatawait_keep_errors (C function)c.filemap_fdatawait_keep_errorshNtauh1hhjYehhhNhNubh)}(hhh](h)}(hAint filemap_fdatawait_keep_errors (struct address_space *mapping)h]h)}(h@int filemap_fdatawait_keep_errors(struct address_space *mapping)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjubj)}(h h]h }(hj,whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhj+whMjubh)}(hfilemap_fdatawait_keep_errorsh]h)}(hfilemap_fdatawait_keep_errorsh]hfilemap_fdatawait_keep_errors}(hj>whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:wubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhj+whMjubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjZwhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjVwubj)}(h h]h }(hjgwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVwubh)}(hhh]h)}(h address_spaceh]h address_space}(hjxwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjzwmodnameN classnameNj\j_)}jb]je)}jXj@wsbc.filemap_fdatawait_keep_errorsasbuh1hhjVwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVwubj2 )}(hj5 h]h*}(hjwhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjVwubh)}(hmappingh]hmapping}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVwubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRwubah}(h]h ]h"]h$]h&]jj uh1jhjwhhhj+whMjubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhj+whMjubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhj+whMjhjwhhubj )}(hhh]j9)}(h*wait for writeback without clearing errorsh]h*wait for writeback without clearing errors}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhjwhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhj+whMjubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMnhjwubj)}(hhh]j)}(hF``struct address_space *mapping`` address space structure to wait for h](j)}(h!``struct address_space *mapping``h]j?)}(hjxh]hstruct address_space *mapping}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMkhjxubj)}(hhh]j9)}(h#address space structure to wait forh]h#address space structure to wait for}(hj7xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3xhMkhj4xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj3xhMkhjxubah}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjYxh]h Description}(hj[xhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWxubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMmhjwubj9)}(hWalk 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]hWalk 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.}(hjoxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMmhjwubj9)}(hUse 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]hUse 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~xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMqhjwubj9)}(h **Return**h]jz)}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMuhjwubj9)}(h"error status of the address space.h]h"error status of the address space.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMuhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)filemap_write_and_wait_range (C function)c.filemap_write_and_wait_rangehNtauh1hhjYehhhNhNubh)}(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)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhMubh)}(hfilemap_write_and_wait_rangeh]h)}(hfilemap_write_and_wait_rangeh]hfilemap_write_and_wait_range}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjxhMubj)}(h;(struct address_space *mapping, loff_t lstart, loff_t lend)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjyhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj yubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj yubh)}(hhh]h)}(h address_spaceh]h address_space}(hj/yhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,yubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj1ymodnameN classnameNj\j_)}jb]je)}jXjxsbc.filemap_write_and_wait_rangeasbuh1hhj yubj)}(h h]h }(hjOyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj yubj2 )}(hj5 h]h*}(hj]yhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj yubh)}(hmappingh]hmapping}(hjjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj yubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj yubj)}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjymodnameN classnameNj\j_)}jb]jKyc.filemap_write_and_wait_rangeasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hlstarth]hlstart}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj yubj)}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjymodnameN classnameNj\j_)}jb]jKyc.filemap_write_and_wait_rangeasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hlendh]hlend}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj yubeh}(h]h ]h"]h$]h&]jj uh1jhjxhhhjxhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjxhMubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhjxhhubj )}(hhh]j9)}(h write out & wait on a file rangeh]h write out & wait on a file range}(hj$zhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj!zhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlend, 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](j9)}(h**Parameters**h]jz)}(hjFzh]h Parameters}(hjHzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDzubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubj)}(hhh](j)}(hB``struct address_space *mapping`` the address_space for the pages h](j)}(h!``struct address_space *mapping``h]j?)}(hjezh]hstruct address_space *mapping}(hjgzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjczubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj_zubj)}(hhh]j9)}(hthe address_space for the pagesh]hthe address_space for the pages}(hj~zhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzzhMhj{zubah}(h]h ]h"]h$]h&]uh1jhj_zubeh}(h]h ]h"]h$]h&]uh1jhjzzhMhj\zubj)}(h9``loff_t lstart`` offset in bytes where the range starts h](j)}(h``loff_t lstart``h]j?)}(hjzh]h loff_t lstart}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjzubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\zubj)}(hA``loff_t lend`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t lend``h]j?)}(hjzh]h loff_t lend}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjzubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\zubeh}(h]h ]h"]h$]h&]uh1jhj@zubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubj9)}(h=Write out and wait upon file offsets lstart->lend, inclusive.h]h=Write out and wait upon file offsets lstart->lend, inclusive.}(hj({hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubj9)}(hNote 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 }(hj7{hhhNhNubjz)}(h**lend**h]hlend}(hj?{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7{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).}(hj7{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubj9)}(h **Return**h]jz)}(hjZ{h]hReturn}(hj\{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjX{ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubj9)}(h"error status of the address space.h]h"error status of the address space.}(hjp{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj@zubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*file_check_and_advance_wb_err (C function)c.file_check_and_advance_wb_errhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h5int file_check_and_advance_wb_err (struct file *file)h]h)}(h4int file_check_and_advance_wb_err(struct file *file)h](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hMubh)}(hfile_check_and_advance_wb_errh]h)}(hfile_check_and_advance_wb_errh]hfile_check_and_advance_wb_err}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhj{hMubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hj{hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]h)}(hfileh]hfile}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj{modnameN classnameNj\j_)}jb]je)}jXj{sbc.file_check_and_advance_wb_errasbuh1hhj{ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj2 )}(hj5 h]h*}(hj(|hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj{ubh)}(hfileh]hfile}(hj5|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj{ubah}(h]h ]h"]h$]h&]jj uh1jhj{hhhj{hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj{hMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhj{hMhj{hhubj )}(hhh]j9)}(hNreport wb error (if any) that was previously and advance wb_err to current oneh]hNreport wb error (if any) that was previously and advance wb_err to current one}(hj_|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj\|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jw|j4jw|j5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj)}(hhh]j)}(hG``struct file *file`` struct file on which the error is being reported h](j)}(h``struct file *file``h]j?)}(hj|h]hstruct file *file}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj)}(hhh]j9)}(h0struct file on which the error is being reportedh]h0struct file on which the error is being reported}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj{|ubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(hWhen 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]hWhen 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|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(hGrab 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]hGrab 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}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(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}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(hWhile 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]hWhile 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}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(h **Return**h]jz)}(hj/}h]hReturn}(hj1}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-}ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjI}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE}ubh+ on success, negative error code otherwise.}(hjE}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&file_write_and_wait_range (C function)c.file_write_and_wait_rangehNtauh1hhjYehhhNhNubh)}(hhh](h)}(hMint file_write_and_wait_range (struct file *file, loff_t lstart, loff_t lend)h]h)}(hLint file_write_and_wait_range(struct file *file, loff_t lstart, loff_t lend)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~}hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~}hhhj}hMubh)}(hfile_write_and_wait_rangeh]h)}(hfile_write_and_wait_rangeh]hfile_write_and_wait_range}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~}hhhj}hMubj)}(h/(struct file *file, loff_t lstart, loff_t lend)h](j)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hj}hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hfileh]hfile}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}modnameN classnameNj\j_)}jb]je)}jXj}sbc.file_write_and_wait_rangeasbuh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hj ~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hfileh]hfile}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubj)}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hj4~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj6~modnameN classnameNj\j_)}jb]j}c.file_write_and_wait_rangeasbuh1hhj-~ubj)}(h h]h }(hjR~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-~ubh)}(hlstarth]hlstart}(hj`~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubj)}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hj|~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~~modnameN classnameNj\j_)}jb]j}c.file_write_and_wait_rangeasbuh1hhju~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju~ubh)}(hlendh]hlend}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubeh}(h]h ]h"]h$]h&]jj uh1jhj~}hhhj}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjz}hhhj}hMubah}(h]ju}ah ](jjeh"]h$]h&]jj)jhuh1hhj}hMhjw}hhubj )}(hhh]j9)}(h write out & wait on a file rangeh]h write out & wait on a file range}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjw}hhhj}hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubj)}(hhh](j)}(h@``struct file *file`` file pointing to address_space with pages h](j)}(h``struct file *file``h]j?)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj ubj)}(hhh]j9)}(h)file pointing to address_space with pagesh]h)file pointing to address_space with pages}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h9``loff_t lstart`` offset in bytes where the range starts h](j)}(h``loff_t lstart``h]j?)}(hjLh]h loff_t lstart}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjFubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(hA``loff_t lend`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t lend``h]j?)}(hjh]h loff_t lend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubj9)}(h=Write out and wait upon file offsets lstart->lend, inclusive.h]h=Write out and wait upon file offsets lstart->lend, inclusive.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubj9)}(hNote 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 }(hjhhhNhNubjz)}(h**lend**h]hlend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj~ubj9)}(hAfter 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]hAfter 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj~ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubh+ on success, negative error code otherwise.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%replace_page_cache_folio (C function)c.replace_page_cache_foliohNtauh1hhjYehhhNhNubh)}(hhh](h)}(hDvoid replace_page_cache_folio (struct folio *old, struct folio *new)h]h)}(hCvoid replace_page_cache_folio(struct folio *old, struct folio *new)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM(ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhM(ubh)}(hreplace_page_cache_folioh]h)}(hreplace_page_cache_folioh]hreplace_page_cache_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjxhM(ubj)}(h&(struct folio *old, struct folio *new)h](j)}(hstruct folio *oldh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjŀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj€ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjǀmodnameN classnameNj\j_)}jb]je)}jXjsbc.replace_page_cache_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *newh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]jc.replace_page_cache_folioasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hnewh]hnew}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjfhhhjxhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjxhM(ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1hhjxhM(hj_hhubj )}(hhh]j9)}(h(replace a pagecache folio with a new oneh]h(replace a pagecache folio with a new one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM(hjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjubj)}(hhh](j)}(h+``struct folio *old`` folio to be replaced h](j)}(h``struct folio *old``h]j?)}(hjہh]hstruct folio *old}(hj݁hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjفubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM)hjՁubj)}(hhh]j9)}(hfolio to be replacedh]hfolio to be replaced}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjՁubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjҁubj)}(h,``struct folio *new`` folio to replace with h](j)}(h``struct folio *new``h]j?)}(hjh]hstruct folio *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM*hjubj)}(hhh]j9)}(hfolio to replace withh]hfolio to replace with}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hM*hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM*hjҁubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjubj9)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjubj9)}(h7The remove + add is atomic. This function cannot fail.h]h7The remove + add is atomic. This function cannot fail.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_unlock (C function)c.folio_unlockhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h'void folio_unlock (struct folio *folio)h]h)}(h&void folio_unlock(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_unlockh]h)}(h folio_unlockh]h folio_unlock}(hjĂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj܂ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܂ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjƂsbc.folio_unlockasbuh1hhj܂ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܂ubj2 )}(hj5 h]h*}(hj,hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj܂ubh)}(hfolioh]hfolio}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj܂ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj؂ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hUnlock a locked folio.h]hUnlock a locked folio.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj߃h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj݃ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hDUnlocks the folio and wakes up any thread sleeping on the page lock.h]hDUnlocks the folio and wakes up any thread sleeping on the page lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hUMay be called from interrupt or process context. May not be called from NMI context.h]hUMay be called from interrupt or process context. May not be called from NMI context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_end_read (C function)c.folio_end_readhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h7void folio_end_read (struct folio *folio, bool success)h]h)}(h6void folio_end_read(struct folio *folio, bool success)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhMubh)}(hfolio_end_readh]h)}(hfolio_end_readh]hfolio_end_read}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjYhMubj)}(h#(struct folio *folio, bool success)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjnsbc.folio_end_readasbuh1hhjubj)}(h h]h }(hjƄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjԄhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h bool successh](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsuccessh]hsuccess}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjYhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjYhMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhjYhMhj@hhubj )}(hhh]j9)}(hEnd read on a folio.h]hEnd read on a folio.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjzubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h;``bool success`` True if all reads completed successfully. h](j)}(h``bool success``h]j?)}(hjh]h bool success}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h)True if all reads completed successfully.h]h)True if all reads completed successfully.}(hj҅hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj΅hMhjυubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj΅hMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubj9)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubj9)}(hUMay be called from interrupt or process context. May not be called from NMI context.h]hUMay be called from interrupt or process context. May not be called from NMI context.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_end_private_2 (C function)c.folio_end_private_2hNtauh1hhjYehhhNhNubh)}(hhh](h)}(h.void folio_end_private_2 (struct folio *folio)h]h)}(h-void folio_end_private_2(struct folio *folio)h](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjnhMubh)}(hfolio_end_private_2h]h)}(hfolio_end_private_2h]hfolio_end_private_2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjnhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_end_private_2asbuh1hhjubj)}(h h]h }(hjۆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhj\hhhjnhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjnhMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjnhMhjUhhubj )}(hhh]j9)}(h(Clear PG_private_2 and wake any waiters.h]h(Clear PG_private_2 and wake any waiters.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjnhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjah]hstruct folio *folio}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<ubj9)}(hClear 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]hClear 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<ubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_wait_private_2 (C function)c.folio_wait_private_2hNtauh1hhjYehhhNhNubh)}(hhh](h)}(h/void folio_wait_private_2 (struct folio *folio)h]h)}(h.void folio_wait_private_2(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_wait_private_2h]h)}(hfolio_wait_private_2h]hfolio_wait_private_2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj-hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hfolioh]hfolio}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjMmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_wait_private_2asbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj2 )}(hj5 h]h*}(hjyhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj)ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj%ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jȈj4jȈj5j6j7uh1hhhhjYehNhNubjp)}(h**Parameters** ``struct folio *folio`` The folio to wait on. **Description** Wait for PG_private_2 to be cleared on a folio.h](j9)}(h**Parameters**h]jz)}(hj҈h]h Parameters}(hjԈhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЈubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj̈ubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe folio to wait on.h]hThe folio to wait on.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̈ubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj̈ubj9)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj̈ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*folio_wait_private_2_killable (C function)c.folio_wait_private_2_killablehNtauh1hhjYehhhNhNubh)}(hhh](h)}(h7int folio_wait_private_2_killable (struct folio *folio)h]h)}(h6int folio_wait_private_2_killable(struct folio *folio)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhM ubh)}(hfolio_wait_private_2_killableh]h)}(hfolio_wait_private_2_killableh]hfolio_wait_private_2_killable}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhjhM ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj̉hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɉubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjΉmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_wait_private_2_killableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjmhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjhM ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjfhhubj )}(hhh]j9)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj.hhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM$hjMubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j?)}(hjrh]hstruct folio *folio}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM!hjlubj)}(hhh]j9)}(hThe folio to wait on.h]hThe folio to wait on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjiubah}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#hjMubj9)}(hgWait for PG_private_2 to be cleared on a folio or until a fatal signal is received by the calling task.h]hgWait for PG_private_2 to be cleared on a folio or until a fatal signal is received by the calling task.}(hjÊhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#hjMubj9)}(h **Return**h]jz)}(hjԊh]hReturn}(hj֊hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҊubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjMubh bullet_list)}(hhh](j+)}(h0 if successful.h]j9)}(hjh]h0 if successful.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h)-EINTR if a fatal signal was encountered.h]j9)}(hj h]h)-EINTR if a fatal signal was encountered.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM'hjubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]bullet-uh1jhjhM&hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_end_writeback (C function)c.folio_end_writebackhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h.void folio_end_writeback (struct folio *folio)h]h)}(h-void folio_end_writeback(struct folio *folio)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjUhM^ubh)}(hfolio_end_writebackh]h)}(hfolio_end_writebackh]hfolio_end_writeback}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjUhM^ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjjsbc.folio_end_writebackasbuh1hhjubj)}(h h]h }(hj‹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjЋhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hj݋hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubah}(h]h ]h"]h$]h&]jj uh1jhjChhhjUhM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhjUhM^ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhjUhM^hj<hhubj )}(hhh]j9)}(hEnd writeback against a folio.h]hEnd writeback against a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^hjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhM^ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMbhj#ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjHh]hstruct folio *folio}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM_hjBubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hM_hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hM_hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMahj#ubj9)}(h+The folio must actually be under writeback.h]h+The folio must actually be under writeback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMahj#ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMchj#ubj9)}(h0May be called from process or interrupt context.h]h0May be called from process or interrupt context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMchj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__folio_lock (C function)c.__folio_lockhNtauh1hhjYehhhNhNubh)}(hhh](h)}(h'void __folio_lock (struct folio *folio)h]h)}(h&void __folio_lock(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h __folio_lockh]h)}(h __folio_lockh]h __folio_lock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj,hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]h)}(hfolioh]hfolio}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjLmodnameN classnameNj\j_)}jb]je)}jXjsbc.__folio_lockasbuh1hhj(ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj(ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jǍj4jǍj5j6j7uh1hhhhjYehNhNubjp)}(h;**Parameters** ``struct folio *folio`` The folio to lockh](j9)}(h**Parameters**h]jz)}(hjэh]h Parameters}(hjӍhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjύubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjˍubj)}(hhh]j)}(h)``struct folio *folio`` The folio to lockh](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe folio to lockh]hThe folio to lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˍubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!page_cache_next_miss (C function)c.page_cache_next_misshNtauh1hhjYehhhNhNubh)}(hhh](h)}(hcpgoff_t page_cache_next_miss (struct address_space *mapping, pgoff_t index, unsigned long max_scan)h]h)}(hbpgoff_t page_cache_next_miss(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjOmodnameN classnameNj\j_)}jb]je)}jXpage_cache_next_misssbc.page_cache_next_missasbuh1hhjFhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjnhMubh)}(hpage_cache_next_missh]h)}(hjkh]hpage_cache_next_miss}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjnhMubj)}(hF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jic.page_cache_next_missasbuh1hhjubj)}(h h]h }(hj؎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jic.page_cache_next_missasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long max_scanh](j)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hmax_scanh]hmax_scan}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhjnhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjnhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhjnhMhj?hhubj )}(hhh]j9)}(h$Find the next gap in the page cache.h]h$Find the next gap in the page cache.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjnhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jΏj4jΏj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj؏h]h Parameters}(hjڏhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj֏ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubj)}(hhh](j)}(h+``struct address_space *mapping`` Mapping. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hMapping.h]hMapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h``pgoff_t index`` Index. h](j)}(h``pgoff_t index``h]j?)}(hj0h]h pgoff_t index}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj*ubj)}(hhh]j9)}(hIndex.h]hIndex.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h4``unsigned long max_scan`` Maximum range to search. h](j)}(h``unsigned long max_scan``h]j?)}(hjih]hunsigned long max_scan}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjcubj)}(hhh]j9)}(hMaximum range to search.h]hMaximum range to search.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubeh}(h]h ]h"]h$]h&]uh1jhjҏubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubj9)}(haSearch the range [index, min(index + max_scan - 1, ULONG_MAX)] for the gap with the lowest index.h]haSearch the range [index, min(index + max_scan - 1, ULONG_MAX)] for the gap with the lowest index.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubj9)}(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ɐhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubj9)}(h **Return**h]jz)}(hjڐh]hReturn}(hjܐhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjؐubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjҏubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!page_cache_prev_miss (C function)c.page_cache_prev_misshNtauh1hhjYehhhNhNubh)}(hhh](h)}(hcpgoff_t page_cache_prev_miss (struct address_space *mapping, pgoff_t index, unsigned long max_scan)h]h)}(hbpgoff_t page_cache_prev_miss(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj$modnameN classnameNj\j_)}jb]je)}jXpage_cache_prev_misssbc.page_cache_prev_missasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjChMubh)}(hpage_cache_prev_missh]h)}(hj@h]hpage_cache_prev_miss}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjChMubj)}(hF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjqhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j>c.page_cache_prev_missasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjmubh)}(hmappingh]hmapping}(hjȑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j>c.page_cache_prev_missasbuh1hhjݑubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݑubh)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݑubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(hunsigned long max_scanh](j)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hmax_scanh]hmax_scan}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjChMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjChMhjhhubj )}(hhh]j9)}(h(Find the previous gap in the page cache.h]h(Find the previous gap in the page cache.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjChMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh](j)}(h+``struct address_space *mapping`` Mapping. h](j)}(h!``struct address_space *mapping``h]j?)}(hj̒h]hstruct address_space *mapping}(hjΒhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjʒubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjƒubj)}(hhh]j9)}(hMapping.h]hMapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƒubeh}(h]h ]h"]h$]h&]uh1jhjhMhjÒubj)}(h``pgoff_t index`` Index. h](j)}(h``pgoff_t index``h]j?)}(hjh]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hIndex.h]hIndex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjÒubj)}(h4``unsigned long max_scan`` Maximum range to search. h](j)}(h``unsigned long max_scan``h]j?)}(hj>h]hunsigned long max_scan}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj8ubj)}(hhh]j9)}(hMaximum range to search.h]hMaximum range to search.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjÒubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hZSearch the range [max(index - max_scan + 1, 0), index] for the gap with the highest index.h]hZSearch the range [max(index - max_scan + 1, 0), index] for the gap with the highest index.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hThe 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]hThe 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œhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ __filemap_get_folio (C function)c.__filemap_get_foliohNtauh1hhjYehhhNhNubh)}(hhh](h)}(hmstruct folio * __filemap_get_folio (struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp)h]h)}(hkstruct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMfubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jX__filemap_get_foliosbc.__filemap_get_folioasbuh1hhjhhhjhMfubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMfubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMfubh)}(h__filemap_get_folioh]h)}(hj1h]h__filemap_get_folio}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMfubj)}(hJ(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjnhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j/c.__filemap_get_folioasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjjubh)}(hmappingh]hmapping}(hjŔhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޔubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j/c.__filemap_get_folioasbuh1hhjڔubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڔubh)}(hindexh]hindex}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڔubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubj)}(hfgf_t fgp_flagsh](h)}(hhh]h)}(hfgf_th]hfgf_t}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]j/c.__filemap_get_folioasbuh1hhj"ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(h fgp_flagsh]h fgp_flags}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjsmodnameN classnameNj\j_)}jb]j/c.__filemap_get_folioasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMfubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMfubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMfhjhhubj )}(hhh]j9)}(h$Find and get a reference to a folio.h]h$Find and get a reference to a folio.}(hjǕhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMfhjĕhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMfubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jߕj4jߕj5j6j7uh1hhhhjYehNhNubjp)}(hXk**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. **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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhjubj)}(hhh](j)}(h?``struct address_space *mapping`` The address_space to search. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMghjubj)}(hhh]j9)}(hThe address_space to search.h]hThe address_space to search.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j?)}(hjAh]h pgoff_t index}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhhj;ubj)}(hhh]j9)}(hThe page index.h]hThe page index.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhhjubj)}(hD``fgf_t fgp_flags`` ``FGP`` flags modify how the folio is returned. h](j)}(h``fgf_t fgp_flags``h]j?)}(hjzh]hfgf_t fgp_flags}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMihjtubj)}(hhh]j9)}(h/``FGP`` flags modify how the folio is returned.h](j?)}(h``FGP``h]hFGP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh( flags modify how the folio is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMihjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(hL``gfp_t gfp`` Memory allocation flags to use if ``FGP_CREAT`` is specified. h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjÖhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhjubj)}(hhh]j9)}(h=Memory allocation flags to use if ``FGP_CREAT`` is specified.h](h"Memory allocation flags to use if }(hjږhhhNhNubj?)}(h ``FGP_CREAT``h]h FGP_CREAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjږubh is specified.}(hjږhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj֖hMjhjזubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֖hMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMlhjubj9)}(h9Looks up the page cache entry at **mapping** & **index**.h](h!Looks up the page cache entry at }(hj$hhhNhNubjz)}(h **mapping**h]hmapping}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh & }(hj$hhhNhNubjz)}(h **index**h]hindex}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMlhjubj9)}(hIf ``FGP_LOCK`` or ``FGP_CREAT`` are specified then the function may sleep even if the ``GFP`` flags specified for ``FGP_CREAT`` are atomic.h](hIf }(hjWhhhNhNubj?)}(h ``FGP_LOCK``h]hFGP_LOCK}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh or }(hjWhhhNhNubj?)}(h ``FGP_CREAT``h]h FGP_CREAT}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh7 are specified then the function may sleep even if the }(hjWhhhNhNubj?)}(h``GFP``h]hGFP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh flags specified for }(hjWhhhNhNubj?)}(h ``FGP_CREAT``h]h FGP_CREAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh are atomic.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMnhjubj9)}(hLIf this function returns a folio, it is returned with an increased refcount.h]hLIf this function returns a folio, it is returned with an increased refcount.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMqhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjubj9)}(h*The found folio or an ERR_PTR() otherwise.h]h*The found folio or an ERR_PTR() otherwise.}(hj՗hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_get_folios (C function)c.filemap_get_folioshNtauh1hhjYehhhNhNubh)}(hhh](h)}(htunsigned filemap_get_folios (struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h]h)}(hsunsigned filemap_get_folios(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfilemap_get_foliosh]h)}(hfilemap_get_foliosh]hfilemap_get_folios}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]je)}jXj'sbc.filemap_get_foliosasbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=ubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j{c.filemap_get_foliosasbuh1hhjubj)}(h h]h }(hjԘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]j{c.filemap_get_foliosasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(hstruct folio_batch *fbatchh](j!)}(hj$h]hstruct}(hjPhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjpmodnameN classnameNj\j_)}jb]j{c.filemap_get_foliosasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjLubh)}(hfbatchh]hfbatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hGet a batch of foliosh]hGet a batch of folios}(hjљhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjΙhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh](j)}(h>``struct address_space *mapping`` The address_space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj ubj)}(hhh]j9)}(hThe address_space to searchh]hThe address_space to search}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j?)}(hjKh]hpgoff_t *start}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjEubj)}(hhh]j9)}(hThe starting page indexh]hThe starting page index}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hjh]h pgoff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~ubj)}(hhh]j9)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h2``struct folio_batch *fbatch`` The batch to fill. h](j)}(h``struct folio_batch *fbatch``h]j?)}(hjh]hstruct folio_batch *fbatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe batch to fill.h]hThe batch to fill.}(hj֚hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjҚhMhjӚubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҚhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hSearch 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](hISearch for and return a batch of folios in the mapping starting at index }(hjhhhNhNubjz)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and up to index }(hjhhhNhNubjz)}(h**end**h]hend}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh* (inclusive). The folios are returned in }(hjhhhNhNubjz)}(h **fbatch**h]hfbatch}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh" with an elevated reference count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h **Return**h]jz)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hjThe number of folios which were found. We also update **start** to index the next folio for the traversal.h](h6The number of folios which were found. We also update }(hjkhhhNhNubjz)}(h **start**h]hstart}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh+ to index the next folio for the traversal.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&filemap_get_folios_contig (C function)c.filemap_get_folios_contighNtauh1hhjYehhhNhNubh)}(hhh](h)}(h{unsigned filemap_get_folios_contig (struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h]h)}(hzunsigned filemap_get_folios_contig(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfilemap_get_folios_contigh]h)}(hfilemap_get_folios_contigh]hfilemap_get_folios_contig}(hj͛hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɛubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjϛsbc.filemap_get_folios_contigasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj5hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]j#c.filemap_get_folios_contigasbuh1hhjWubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjWubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j#c.filemap_get_folios_contigasbuh1hhjubj)}(h h]h }(hjќhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hjߜhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio_batch *fbatchh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j#c.filemap_get_folios_contigasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfbatchh]hfbatch}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h Get a batch of contiguous foliosh]h Get a batch of contiguous folios}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh](j)}(h>``struct address_space *mapping`` The address_space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe address_space to searchh]hThe address_space to search}(hjӝhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjϝhMhjНubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϝhMhjubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j?)}(hjh]hpgoff_t *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe starting page indexh]hThe starting page index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hj,h]h pgoff_t end}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj&ubj)}(hhh]j9)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubj)}(h1``struct folio_batch *fbatch`` The batch to fill h](j)}(h``struct folio_batch *fbatch``h]j?)}(hjeh]hstruct folio_batch *fbatch}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj_ubj)}(hhh]j9)}(hThe batch to fillh]hThe batch to fill}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hfilemap_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]hfilemap_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h **Return**h]jz)}(hjǞh]hReturn}(hjɞhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŞubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hcThe number of folios found. Also update **start** to be positioned for traversal of the next folio.h](h(The number of folios found. Also update }(hjݞhhhNhNubjz)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjݞubh2 to be positioned for traversal of the next folio.}(hjݞhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_get_folios_tag (C function)c.filemap_get_folios_taghNtauh1hhjYehhhNhNubh)}(hhh](h)}(hunsigned filemap_get_folios_tag (struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)h]h)}(hunsigned filemap_get_folios_tag(struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hMubh)}(hfilemap_get_folios_tagh]h)}(hfilemap_get_folios_tagh]hfilemap_get_folios_tag}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hMubj)}(hg(struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj[hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]h)}(h address_spaceh]h address_space}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj{modnameN classnameNj\j_)}jb]je)}jXjAsbc.filemap_get_folios_tagasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjWubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjПhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͟ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjҟmodnameN classnameNj\j_)}jb]jc.filemap_get_folios_tagasbuh1hhjɟubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɟubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjɟubh)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɟubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'modnameN classnameNj\j_)}jb]jc.filemap_get_folios_tagasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(h xa_mark_t tagh](h)}(hhh]h)}(h xa_mark_th]h xa_mark_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjomodnameN classnameNj\j_)}jb]jc.filemap_get_folios_tagasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(htagh]htag}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hstruct folio_batch *fbatchh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjРhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͠ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjҠmodnameN classnameNj\j_)}jb]jc.filemap_get_folios_tagasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfbatchh]hfbatch}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj,hMhjhhubj )}(hhh]j9)}(h&Get a batch of folios matching **tag**h](hGet a batch of folios matching }(hj3hhhNhNubjz)}(h**tag**h]htag}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jYj4jYj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]ubj)}(hhh](j)}(h>``struct address_space *mapping`` The address_space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj)}(hhh]j9)}(hThe address_space to searchh]hThe address_space to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j?)}(hjh]hpgoff_t *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe starting page indexh]hThe starting page index}(hjԡhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjСhMhjѡubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjСhMhjyubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hjh]h pgoff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjyubj)}(h ``xa_mark_t tag`` The tag index h](j)}(h``xa_mark_t tag``h]j?)}(hj-h]h xa_mark_t tag}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'ubj)}(hhh]j9)}(h The tag indexh]h The tag index}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjyubj)}(h1``struct folio_batch *fbatch`` The batch to fill h](j)}(h``struct folio_batch *fbatch``h]j?)}(hjfh]hstruct folio_batch *fbatch}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj`ubj)}(hhh]j9)}(hThe batch to fillh]hThe batch to fill}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]ubj9)}(hXThe 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 }(hjhhhNhNubjz)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh; if it does, it will contain }(hjhhhNhNubjz)}(h **start**h]hstart}(hjѢhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh%. The final folio may extend beyond }(hjhhhNhNubjz)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh; if it does, it will contain }(hjhhhNhNubjz)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX*. 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 }(hjhhhNhNubjz)}(h**tag**h]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]ubj9)}(h **Return**h]jz)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]ubj9)}(hXThe number of folios found. Also update **start** to index the next folio for traversal.h](h(The number of folios found. Also update }(hj8hhhNhNubjz)}(h **start**h]hstart}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh' to index the next folio for traversal.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_read (C function)c.filemap_readhNtauh1hhjYehhhNhNubh)}(hhh](h)}(hVssize_t filemap_read (struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)h]h)}(hUssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)h](h)}(hhh]h)}(hssize_th]hssize_t}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~modnameN classnameNj\j_)}jb]je)}jX filemap_readsbc.filemap_readasbuh1hhjuhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMf ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhMf ubh)}(h filemap_readh]h)}(hjh]h filemap_read}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjhMf ubj)}(hA(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)h](j)}(hstruct kiocb *iocbh](j!)}(hj$h]hstruct}(hjˣhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjǣubj)}(h h]h }(hjأhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǣubh)}(hhh]h)}(hkiocbh]hkiocb}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.filemap_readasbuh1hhjǣubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǣubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjǣubh)}(hiocbh]hiocb}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǣubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjãubj)}(hstruct iov_iter *iterh](j!)}(hj$h]hstruct}(hj;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj[modnameN classnameNj\j_)}jb]jc.filemap_readasbuh1hhj7ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7ubh)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjãubj)}(hssize_t already_readh](h)}(hhh]h)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.filemap_readasbuh1hhjubj)}(h h]h }(hj̤hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h already_readh]h already_read}(hjڤhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjãubeh}(h]h ]h"]h$]h&]jj uh1jhjuhhhjhMf ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjhMf ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1hhjhMf hjnhhubj )}(hhh]j9)}(hRead data from the page cache.h]hRead data from the page cache.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMf hjhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhMf ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMj hj ubj)}(hhh](j)}(h)``struct kiocb *iocb`` The iocb to read. h](j)}(h``struct kiocb *iocb``h]j?)}(hjEh]hstruct kiocb *iocb}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMg hj?ubj)}(hhh]j9)}(hThe iocb to read.h]hThe iocb to read.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhMg hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMg hj<ubj)}(h4``struct iov_iter *iter`` Destination for the data. h](j)}(h``struct iov_iter *iter``h]j?)}(hj~h]hstruct iov_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMh hjxubj)}(hhh]j9)}(hDestination for the data.h]hDestination for the data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMh hj<ubj)}(hE``ssize_t already_read`` Number of bytes already read by the caller. h](j)}(h``ssize_t already_read``h]j?)}(hjh]hssize_t already_read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMi hjubj)}(hhh]j9)}(h+Number of bytes already read by the caller.h]h+Number of bytes already read by the caller.}(hjХhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj̥hMi hjͥubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̥hMi hj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMk hj ubj9)}(hCopies 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]hCopies data from the page cache. If the data is not currently present, uses the readahead and read_folio address_space operations to fetch it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMk hj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMn hj ubj9)}(hTotal 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]hTotal 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/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMn hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#generic_file_read_iter (C function)c.generic_file_read_iterhNtauh1hhjYehhhNhNubh)}(hhh](h)}(hJssize_t generic_file_read_iter (struct kiocb *iocb, struct iov_iter *iter)h]h)}(hIssize_t generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)h](h)}(hhh]h)}(hssize_th]hssize_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjcmodnameN classnameNj\j_)}jb]je)}jXgeneric_file_read_itersbc.generic_file_read_iterasbuh1hhjZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjhM ubh)}(hgeneric_file_read_iterh]h)}(hjh]hgeneric_file_read_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjhM ubj)}(h+(struct kiocb *iocb, struct iov_iter *iter)h](j)}(hstruct kiocb *iocbh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hkiocbh]hkiocb}(hjΦhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˦ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjЦmodnameN classnameNj\j_)}jb]j}c.generic_file_read_iterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hiocbh]hiocb}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct iov_iter *iterh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj@modnameN classnameNj\j_)}jb]j}c.generic_file_read_iterasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hiterh]hiter}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjhM ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjShhubj )}(hhh]j9)}(hgeneric filesystem read routineh]hgeneric filesystem read routine}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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 readh](j9)}(h**Parameters**h]jz)}(hjçh]h Parameters}(hjŧhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh](j)}(h0``struct kiocb *iocb`` kernel I/O control block h](j)}(h``struct kiocb *iocb``h]j?)}(hjh]hstruct kiocb *iocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjܧubj)}(hhh]j9)}(hkernel I/O control blockh]hkernel I/O control block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjܧubeh}(h]h ]h"]h$]h&]uh1jhjhM hj٧ubj)}(h8``struct iov_iter *iter`` destination for the data read h](j)}(h``struct iov_iter *iter``h]j?)}(hjh]hstruct iov_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh]j9)}(hdestination for the data readh]hdestination for the data read}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hM hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM hj٧ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(hThe 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]hThe 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{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM$ hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM) hjubj)}(hhh](j+)}(h.number of bytes copied, even for partial readsh]j9)}(hjh]h.number of bytes copied, even for partial reads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM) hjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h;negative error code (or 0 if IOCB_NOIO) if nothing was readh]j9)}(hjΨh]h;negative error code (or 0 if IOCB_NOIO) if nothing was read}(hjШhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM* hj̨ubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjŨhM) hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ filemap_splice_read (C function)c.filemap_splice_readhNtauh1hhjYehhhNhNubh)}(hhh](h)}(hyssize_t filemap_splice_read (struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)h]h)}(hxssize_t filemap_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)h](h)}(hhh]h)}(hssize_th]hssize_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfilemap_splice_readsbc.filemap_splice_readasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM} ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hM} ubh)}(hfilemap_splice_readh]h)}(hj+h]hfilemap_splice_read}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj.hM} ubj)}(h](struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)h](j)}(hstruct file *inh](j!)}(hj$h]hstruct}(hj\hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]h)}(hfileh]hfile}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj|modnameN classnameNj\j_)}jb]j)c.filemap_splice_readasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjXubh)}(hinh]hin}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubj)}(h loff_t *pposh](h)}(hhh]h)}(hloff_th]hloff_t}(hjϩhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̩ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjѩmodnameN classnameNj\j_)}jb]j)c.filemap_splice_readasbuh1hhjȩubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȩubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjȩubh)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȩubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubj)}(hstruct pipe_inode_info *pipeh](j!)}(hj$h]hstruct}(hj!hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpipe_inode_infoh]hpipe_inode_info}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjAmodnameN classnameNj\j_)}jb]j)c.filemap_splice_readasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjkhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpipeh]hpipe}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubj)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j)c.filemap_splice_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hj٪hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjժubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj.hM} ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj.hM} ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj.hM} hjhhubj )}(hhh]j9)}(h/Splice data from a file's pagecache into a pipeh]h1Splice data from a file’s pagecache into a pipe}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM} hj8hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hM} ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjWubj)}(hhh](j)}(h*``struct file *in`` The file to read from h](j)}(h``struct file *in``h]j?)}(hj|h]hstruct file *in}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM~ hjvubj)}(hhh]j9)}(hThe file to read fromh]hThe file to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM~ hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM~ hjsubj)}(h;``loff_t *ppos`` Pointer to the file position to read from h](j)}(h``loff_t *ppos``h]j?)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh]j9)}(h)Pointer to the file position to read fromh]h)Pointer to the file position to read from}(hjΫhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjʫhM hj˫ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʫhM hjsubj)}(h9``struct pipe_inode_info *pipe`` The pipe to splice into h](j)}(h ``struct pipe_inode_info *pipe``h]j?)}(hjh]hstruct pipe_inode_info *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh]j9)}(hThe pipe to splice intoh]hThe pipe to splice into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjsubj)}(h$``size_t len`` The amount to splice h](j)}(h``size_t len``h]j?)}(hj'h]h size_t len}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj!ubj)}(hhh]j9)}(hThe amount to spliceh]hThe amount to splice}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hjsubj)}(h,``unsigned int flags`` The SPLICE_F_* flags h](j)}(h``unsigned int flags``h]j?)}(hj`h]hunsigned int flags}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjZubj)}(hhh]j9)}(hThe SPLICE_F_* flagsh]hThe SPLICE_F_* flags}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhM hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM hjsubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjWubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjWubj9)}(h **Return**h]jz)}(hj¬h]hReturn}(hjĬhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjWubj9)}(hXwOn success, the number of bytes read will be returned and ***ppos** will be updated if appropriate; 0 will be returned if there is no more data to be read; -EAGAIN will be returned if the pipe had no space, and some other negative error code will be returned on error. A short read may occur if the pipe has insufficient space, we reach the end of the data or we hit a hole.h](h:On success, the number of bytes read will be returned and }(hjجhhhNhNubjz)}(h ***ppos**h]h*ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjجubhX4 will be updated if appropriate; 0 will be returned if there is no more data to be read; -EAGAIN will be returned if the pipe had no space, and some other negative error code will be returned on error. A short read may occur if the pipe has insufficient space, we reach the end of the data or we hit a hole.}(hjجhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_fault (C function)c.filemap_faulthNtauh1hhjYehhhNhNubh)}(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]h)}(h vm_fault_th]h vm_fault_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jX filemap_faultsbc.filemap_faultasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj=hM ubh)}(h filemap_faulth]h)}(hj:h]h filemap_fault}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj=hM ubj)}(h(struct vm_fault *vmf)h]j)}(hstruct vm_fault *vmfh](j!)}(hj$h]hstruct}(hjkhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j8c.filemap_faultasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjgubh)}(hvmfh]hvmf}(hj­hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj=hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj=hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj=hM hjhhubj )}(hhh]j9)}(h)read in file data for page fault handlingh]h)read in file data for page fault handling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj=hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh]j)}(hI``struct vm_fault *vmf`` struct vm_fault containing details of the fault h](j)}(h``struct vm_fault *vmf``h]j?)}(hj-h]hstruct vm_fault *vmf}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj'ubj)}(hhh]j9)}(h/struct vm_fault containing details of the faulth]h/struct vm_fault containing details of the fault}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM hj$ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(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~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(h,vma->vm_mm->mmap_lock must be held on entry.h]h,vma->vm_mm->mmap_lock must be held on entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(hIf 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]hIf 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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj9)}(hZIf our return value does not have VM_FAULT_RETRY set, the mmap_lock has not been released.h]hZIf our return value does not have VM_FAULT_RETRY set, the mmap_lock has not been released.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM# hjubj9)}(hFWe never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set.h]hFWe never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set.}(hjɮhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM& hjubj9)}(h **Return**h]jz)}(hjڮh]hReturn}(hjܮhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjخubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM( hjubj9)}(h"bitwise-OR of ``VM_FAULT_`` codes.h](hbitwise-OR of }(hjhhhNhNubj?)}(h ``VM_FAULT_``h]h VM_FAULT_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh codes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM( hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌread_cache_folio (C function)c.read_cache_foliohNtauh1hhjYehhhNhNubh)}(hhh](h)}(hrstruct folio * read_cache_folio (struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)h]h)}(hpstruct folio *read_cache_folio(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)h](j!)}(hj$h]hstruct}(hj1hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj-hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMDubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMDubh)}(hhh]h)}(hfolioh]hfolio}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRmodnameN classnameNj\j_)}jb]je)}jXread_cache_foliosbc.read_cache_folioasbuh1hhj-hhhj>hMDubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMDubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj-hhhj>hMDubh)}(hread_cache_folioh]h)}(hjnh]hread_cache_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj>hMDubj)}(hR(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjɯhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƯubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj˯modnameN classnameNj\j_)}jb]jlc.read_cache_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jlc.read_cache_folioasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hfiller_t fillerh](h)}(hhh]h)}(hfiller_th]hfiller_t}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]jlc.read_cache_folioasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hfillerh]hfiller}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfileh]hfile}(hjɰhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjưubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj˰modnameN classnameNj\j_)}jb]jlc.read_cache_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj-hhhj>hMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj>hMDubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMDhj&hhubj )}(hhh]j9)}(h(Read into page cache, fill it if needed.h]h(Read into page cache, fill it if needed.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMDhj)hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj>hMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMHhjHubj)}(hhh](j)}(hB``struct address_space *mapping`` The address_space to read from. h](j)}(h!``struct address_space *mapping``h]j?)}(hjmh]hstruct address_space *mapping}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMEhjgubj)}(hhh]j9)}(hThe address_space to read from.h]hThe address_space to read from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjdubj)}(h%``pgoff_t index`` The index to read. h](j)}(h``pgoff_t index``h]j?)}(hjh]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMFhjubj)}(hhh]j9)}(hThe index to read.h]hThe index to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjdubj)}(hU``filler_t filler`` Function to perform the read, or NULL to use aops->read_folio(). h](j)}(h``filler_t filler``h]j?)}(hj߱h]hfiller_t filler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjݱubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMGhjٱubj)}(hhh]j9)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjٱubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjdubj)}(hN``struct file *file`` Passed to filler function, may be NULL if not required. h](j)}(h``struct file *file``h]j?)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMHhjubj)}(hhh]j9)}(h7Passed to filler function, may be NULL if not required.h]h7Passed to filler function, may be NULL if not required.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMHhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMHhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubj9)}(h**Description**h]jz)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMJhjHubj9)}(hRead 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](hTRead one page into the page cache. If it succeeds, the folio returned will contain }(hjihhhNhNubjz)}(h **index**h]hindex}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubh0, but it may not be the first page of the folio.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMJhjHubj9)}(hKIf the filler function returns an error, it will be returned to the caller.h]hKIf the filler function returns an error, it will be returned to the caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMMhjHubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMPhjHubj9)}(h8May sleep. Expects mapping->invalidate_lock to be held.h]h8May sleep. Expects mapping->invalidate_lock to be held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMPhjHubj9)}(h **Return**h]jz)}(hj²h]hReturn}(hjIJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMRhjHubj9)}(h3An uptodate folio on success, ERR_PTR() on failure.h]h3An uptodate folio on success, ERR_PTR() on failure.}(hjزhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMQhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#mapping_read_folio_gfp (C function)c.mapping_read_folio_gfphNtauh1hhjYehhhNhNubh)}(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!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM\ubh)}(hhh]h)}(hfolioh]hfolio}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj(modnameN classnameNj\j_)}jb]je)}jXmapping_read_folio_gfpsbc.mapping_read_folio_gfpasbuh1hhjhhhjhM\ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM\ubj2 )}(hj5 h]h*}(hjUhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhM\ubh)}(hmapping_read_folio_gfph]h)}(hjDh]hmapping_read_folio_gfp}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM\ubj)}(h9(struct address_space *mapping, pgoff_t index, gfp_t gfp)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jBc.mapping_read_folio_gfpasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hj˳hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hmappingh]hmapping}(hjسhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjyubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jBc.mapping_read_folio_gfpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjyubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj>modnameN classnameNj\j_)}jb]jBc.mapping_read_folio_gfpasbuh1hhj5ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hgfph]hgfp}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjyubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM\ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM\hjhhubj )}(hhh]j9)}(h7Read into page cache, using specified allocation flags.h]h7Read into page cache, using specified allocation flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM\hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM\ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM`hjubj)}(hhh](j)}(hC``struct address_space *mapping`` The address_space for the folio. h](j)}(h!``struct address_space *mapping``h]j?)}(hjӴh]hstruct address_space *mapping}(hjմhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjѴubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM]hjʹubj)}(hhh]j9)}(h The address_space for the folio.h]h The address_space for the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjʹubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjʴubj)}(hC``pgoff_t index`` The index that the allocated folio will contain. h](j)}(h``pgoff_t index``h]j?)}(hj h]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^hjubj)}(hhh]j9)}(h0The index that the allocated folio will contain.h]h0The index that the allocated folio will contain.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hM^hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM^hjʴubj)}(h=``gfp_t gfp`` The page allocator flags to use if allocating. h](j)}(h ``gfp_t gfp``h]j?)}(hjEh]h gfp_t gfp}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM_hj?ubj)}(hhh]j9)}(h.The page allocator flags to use if allocating.h]h.The page allocator flags to use if allocating.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhM_hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM_hjʴubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMahjubj9)}(hThis is the same as "read_cache_folio(mapping, index, NULL, NULL)", but with any new memory allocations done using the specified allocation flags.h]hThis is the same as “read_cache_folio(mapping, index, NULL, NULL)”, but with any new memory allocations done using the specified allocation flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMahjubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMdhjubj9)}(hAThe function expects mapping->invalidate_lock to be already held.h]hAThe function expects mapping->invalidate_lock to be already held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhhjubj9)}(h **Return**h]jz)}(hjŵh]hReturn}(hjǵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjõubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhjubj9)}(h0Uptodate folio on success, ERR_PTR() on failure.h]h0Uptodate folio on success, ERR_PTR() on failure.}(hj۵hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ read_cache_page_gfp (C function)c.read_cache_page_gfphNtauh1hhjYehhhNhNubh)}(hhh](h)}(h[struct page * read_cache_page_gfp (struct address_space *mapping, pgoff_t index, gfp_t gfp)h]h)}(hYstruct page *read_cache_page_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp)h](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]je)}jXread_cache_page_gfpsbc.read_cache_page_gfpasbuh1hhjhhhjhMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjXhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hread_cache_page_gfph]h)}(hjGh]hread_cache_page_gfp}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h9(struct address_space *mapping, pgoff_t index, gfp_t gfp)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jEc.read_cache_page_gfpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjζhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj۶hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jEc.read_cache_page_gfpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjAmodnameN classnameNj\j_)}jb]jEc.read_cache_page_gfpasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hgfph]hgfp}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hinvalidate_lock to be already held. **Return** up to date page on success, ERR_PTR() on failure.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh](j)}(h;``struct address_space *mapping`` the page's address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjַh]hstruct address_space *mapping}(hjطhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԷubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjзubj)}(hhh]j9)}(hthe page's address_spaceh]hthe page’s address_space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjзubeh}(h]h ]h"]h$]h&]uh1jhjhMhjͷubj)}(h!``pgoff_t index`` the page index h](j)}(h``pgoff_t index``h]j?)}(hjh]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj ubj)}(hhh]j9)}(hthe page indexh]hthe page index}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjͷubj)}(h<``gfp_t gfp`` the page allocator flags to use if allocating h](j)}(h ``gfp_t gfp``h]j?)}(hjHh]h gfp_t gfp}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjBubj)}(hhh]j9)}(h-the page allocator flags to use if allocatingh]h-the page allocator flags to use if allocating}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjͷubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hThis is the same as "read_mapping_page(mapping, index, NULL)", but with any new page allocations done using the specified allocation flags.h]hThis is the same as “read_mapping_page(mapping, index, NULL)”, but with any new page allocations done using the specified allocation flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h7If the page does not get brought uptodate, return -EIO.h]h7If the page does not get brought uptodate, return -EIO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(hAThe function expects mapping->invalidate_lock to be already held.h]hAThe function expects mapping->invalidate_lock to be already held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h **Return**h]jz)}(hjȸh]hReturn}(hjʸhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƸubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj9)}(h1up to date page on success, ERR_PTR() on failure.h]h1up to date page on success, ERR_PTR() on failure.}(hj޸hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&__generic_file_write_iter (C function)c.__generic_file_write_iterhNtauh1hhjYehhhNhNubh)}(hhh](h)}(hMssize_t __generic_file_write_iter (struct kiocb *iocb, struct iov_iter *from)h]h)}(hLssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)h](h)}(hhh]h)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jX__generic_file_write_itersbc.__generic_file_write_iterasbuh1hhj hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMSubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hMSubh)}(h__generic_file_write_iterh]h)}(hj.h]h__generic_file_write_iter}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj1hMSubj)}(h+(struct kiocb *iocb, struct iov_iter *from)h](j)}(hstruct kiocb *iocbh](j!)}(hj$h]hstruct}(hj_hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hkiocbh]hkiocb}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j,c.__generic_file_write_iterasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj[ubh)}(hiocbh]hiocb}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjWubj)}(hstruct iov_iter *fromh](j!)}(hj$h]hstruct}(hjϹhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj˹ubj)}(h h]h }(hjܹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˹ubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j,c.__generic_file_write_iterasbuh1hhj˹ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˹ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj˹ubh)}(hfromh]hfrom}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˹ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjWubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj1hMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hMSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj1hMShjhhubj )}(hhh]j9)}(hwrite data to a fileh]hwrite data to a file}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMShjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMSubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhj4jhj5j6j7uh1hhhhjYehNhNubjp)}(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 allh](j9)}(h**Parameters**h]jz)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhjlubj)}(hhh](j)}(h?``struct kiocb *iocb`` IO state structure (file, offset, etc.) h](j)}(h``struct kiocb *iocb``h]j?)}(hjh]hstruct kiocb *iocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMThjubj)}(hhh]j9)}(h'IO state structure (file, offset, etc.)h]h'IO state structure (file, offset, etc.)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h6``struct iov_iter *from`` iov_iter with data to write h](j)}(h``struct iov_iter *from``h]j?)}(hjʺh]hstruct iov_iter *from}(hj̺hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjȺubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMUhjĺubj)}(hhh]j9)}(hiov_iter with data to writeh]hiov_iter with data to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjߺhMUhjubah}(h]h ]h"]h$]h&]uh1jhjĺubeh}(h]h ]h"]h$]h&]uh1jhjߺhMUhjubeh}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhjlubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhjlubj9)}(hwIt expects i_rwsem to be grabbed unless we work on a block device or similar object which does not need locking at all.h]hwIt expects i_rwsem to be grabbed unless we work on a block device or similar object which does not need locking at all.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM\hjlubj9)}(hThis 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](hThis function does }(hj9hhhNhNubjK)}(h*not*h]hnot}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jJhj9ubh 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.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM_hjlubj9)}(h **Return**h]jz)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMchjlubj)}(hhh](j+)}(h2number of bytes written, even for truncated writesh]j9)}(hjwh]h2number of bytes written, even for truncated writes}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMchjuubah}(h]h ]h"]h$]h&]uh1j+hjrubj+)}(h6negative error code if no data has been written at allh]j9)}(hjh]h6negative error code if no data has been written at all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMdhjubah}(h]h ]h"]h$]h&]uh1j+hjrubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjhMchjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$generic_file_write_iter (C function)c.generic_file_write_iterhNtauh1hhjYehhhNhNubh)}(hhh](h)}(hKssize_t generic_file_write_iter (struct kiocb *iocb, struct iov_iter *from)h]h)}(hJssize_t generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)h](h)}(hhh]h)}(hssize_th]hssize_t}(hjλhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˻ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjлmodnameN classnameNj\j_)}jb]je)}jXgeneric_file_write_itersbc.generic_file_write_iterasbuh1hhjǻhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǻhhhjhMubh)}(hgeneric_file_write_iterh]h)}(hjh]hgeneric_file_write_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjǻhhhjhMubj)}(h+(struct kiocb *iocb, struct iov_iter *from)h](j)}(hstruct kiocb *iocbh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hkiocbh]hkiocb}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj=modnameN classnameNj\j_)}jb]jc.generic_file_write_iterasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjghhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hiocbh]hiocb}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct iov_iter *fromh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.generic_file_write_iterasbuh1hhjubj)}(h h]h }(hjɼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj׼hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjǻhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjûhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hwrite data to a fileh]hwrite data to a file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhjYehNhNubjp)}(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 writesh](j9)}(h**Parameters**h]jz)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj*ubj)}(hhh](j)}(h*``struct kiocb *iocb`` IO state structure h](j)}(h``struct kiocb *iocb``h]j?)}(hjOh]hstruct kiocb *iocb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubj)}(hhh]j9)}(hIO state structureh]hIO state structure}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h6``struct iov_iter *from`` iov_iter with data to write h](j)}(h``struct iov_iter *from``h]j?)}(hjh]hstruct iov_iter *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hiov_iter with data to writeh]hiov_iter with data to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hjýh]h Description}(hjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj*ubj9)}(hThis 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]hThis is a wrapper around __generic_file_write_iter() to be used by most filesystems. It takes care of syncing the file in case of O_SYNC file and acquires i_rwsem as needed.}(hjٽhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj*ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj*ubj)}(hhh](j+)}(hjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous writeh]j9)}(hjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous writeh]hjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h2number of bytes written, even for truncated writesh]j9)}(hjh]h2number of bytes written, even for truncated writes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"filemap_release_folio (C function)c.filemap_release_foliohNtauh1hhjYehhhNhNubh)}(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]hbool}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjghMubh)}(hfilemap_release_folioh]h)}(hfilemap_release_folioh]hfilemap_release_folio}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjghMubj)}(h (struct folio *folio, gfp_t gfp)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj|sbc.filemap_release_folioasbuh1hhjubj)}(h h]h }(hjԾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jоc.filemap_release_folioasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjVhhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjghMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjOhhubj )}(hhh]j9)}(h(Release fs-specific metadata on a folio.h]h(Release fs-specific metadata on a folio.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyj4jyj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj)}(hhh](j)}(hF``struct folio *folio`` The folio which the kernel is trying to free. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h-The folio which the kernel is trying to free.h]h-The folio which the kernel is trying to free.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``gfp_t gfp`` Memory allocation flags (and I/O mode). h](j)}(h ``gfp_t gfp``h]j?)}(hjۿh]h gfp_t gfp}(hjݿhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjٿubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjտubj)}(hhh]j9)}(h'Memory allocation flags (and I/O mode).h]h'Memory allocation flags (and I/O mode).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjտubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj9)}(hcThe address_space is trying to release any data attached to a folio (presumably at folio->private).h]hcThe address_space is trying to release any data attached to a folio (presumably at folio->private).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj9)}(hThis 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]hThis 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;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj9)}(hThe **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](hThe }(hjJhhhNhNubjz)}(h**gfp**h]hgfp}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_RECLAIM & __GFP_FS).}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj9)}(h **Return**h]jz)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj9)}(h<``true`` if the release was successful, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh* if the release was successful, otherwise }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%filemap_invalidate_inode (C function)c.filemap_invalidate_inodehNtauh1hhjYehhhNhNubh)}(hhh](h)}(hXint filemap_invalidate_inode (struct inode *inode, bool flush, loff_t start, loff_t end)h]h)}(hWint filemap_invalidate_inode(struct inode *inode, bool flush, loff_t start, loff_t end)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfilemap_invalidate_inodeh]h)}(hfilemap_invalidate_inodeh]hfilemap_invalidate_inode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h;(struct inode *inode, bool flush, loff_t start, loff_t end)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hinodeh]hinode}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/modnameN classnameNj\j_)}jb]je)}jXjsbc.filemap_invalidate_inodeasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj[hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hinodeh]hinode}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h bool flushh](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hflushh]hflush}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t starth](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jIc.filemap_invalidate_inodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t endh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jIc.filemap_invalidate_inodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h>Invalidate/forcibly write back a range of an inode's pagecacheh]h@Invalidate/forcibly write back a range of an inode’s pagecache}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jnj4jnj5j6j7uh1hhhhjYehNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjrubj)}(hhh](j)}(h+``struct inode *inode`` The inode to flush h](j)}(h``struct inode *inode``h]j?)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hThe inode to flushh]hThe inode to flush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``bool flush`` Set to write back rather than simply invalidate. h](j)}(h``bool flush``h]j?)}(hjh]h bool flush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(h0Set to write back rather than simply invalidate.h]h0Set to write back rather than simply invalidate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``loff_t start`` First byte to in range. h](j)}(h``loff_t start``h]j?)}(hj h]h loff_t start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(hhh]j9)}(hFirst byte to in range.h]hFirst byte to in range.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h_``loff_t end`` Last byte in range (inclusive), or LLONG_MAX for everything from start onwards. h](j)}(h``loff_t end``h]j?)}(hjBh]h loff_t end}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj<ubj)}(hhh]j9)}(hOLast byte in range (inclusive), or LLONG_MAX for everything from start onwards.h]hOLast byte in range (inclusive), or LLONG_MAX for everything from start onwards.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjrubj9)}(h**Description**h]jz)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjrubj9)}(hInvalidate 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]hInvalidate 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1johjYehhhNhNubeh}(h]filemapah ]h"]filemapah$]h&]uh1hhjHehhhhhK;ubh)}(hhh](h)}(h Readaheadh]h Readahead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKAubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK hjhhubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKhjhhubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKhjhhubj9)}(hWhen 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]hWhen 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK"hjhhubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK&hjhhubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK*hjhhubj9)}(hXThe 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]hXThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK0hjhhubj9)}(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,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK;hjhhubj9)}(hIn 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]hIn 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;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKBhjhhubj9)}(hThe above calculation, based on the previous readahead size, determines the size of the readahead, to which any requested read size may be added.h]hThe above calculation, based on the previous readahead size, determines the size of the readahead, to which any requested read size may be added.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKGhjhhubj9)}(hXReadahead 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]hXReadahead 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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKKhjhhubj9)}(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:}(hjhhhhNhNubah}(h]h ]h"]#h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKShjhhubj)}(hhh](j+)}(hnot calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested. h]j9)}(hnot calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested.h]hnot calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKWhjzubah}(h]h ]h"]h$]h&]uh1j+hjwubj+)}(hhfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or h]j9)}(hgfailing to actually submit a read request for a given folio, possibly due to insufficient resources, orh]hgfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK[hjubah}(h]h ]h"]h$]h&]uh1j+hjwubj+)}(hreadahead() 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](hThose folios not in the final }(hjhhhNhNubj?)}(h``async_size``h]h async_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX  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 }(hjhhhNhNubj?)}(h``async_size``h]h async_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKdhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$page_cache_ra_unbounded (C function)c.page_cache_ra_unboundedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvvoid page_cache_ra_unbounded (struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)h]h)}(huvoid page_cache_ra_unbounded(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hKubh)}(hpage_cache_ra_unboundedh]h)}(hpage_cache_ra_unboundedh]hpage_cache_ra_unbounded}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hKubj)}(hY(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)h](j)}(hstruct readahead_control *ractlh](j!)}(hj$h]hstruct}(hjchhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjIsbc.page_cache_ra_unboundedasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_ubh)}(hractlh]hractl}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned long nr_to_readh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h nr_to_readh]h nr_to_read}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubj)}(hunsigned long lookahead_sizeh](j)}(hunsignedh]hunsigned}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hlookahead_sizeh]hlookahead_size}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubeh}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj4hKhjhhubj )}(hhh]j9)}(hStart unchecked readahead.h]hStart unchecked readahead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hXY**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. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj)}(hhh](j)}(h7``struct readahead_control *ractl`` Readahead control. h](j)}(h#``struct readahead_control *ractl``h]j?)}(hjh]hstruct readahead_control *ractl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj)}(hhh]j9)}(hReadahead control.h]hReadahead control.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``unsigned long nr_to_read`` The number of pages to read. h](j)}(h``unsigned long nr_to_read``h]j?)}(hjh]hunsigned long nr_to_read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj)}(hhh]j9)}(hThe number of pages to read.h]hThe number of pages to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hD``unsigned long lookahead_size`` Where to start the next readahead. h](j)}(h ``unsigned long lookahead_size``h]j?)}(hj;h]hunsigned long lookahead_size}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhj5ubj)}(hhh]j9)}(h"Where to start the next readahead.h]h"Where to start the next readahead.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj9)}(h{File is referenced by caller. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.h]h{File is referenced by caller. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_expand (C function)c.readahead_expandhNtauh1hhjhhhNhNubh)}(hhh](h)}(hYvoid readahead_expand (struct readahead_control *ractl, loff_t new_start, size_t new_len)h]h)}(hXvoid readahead_expand(struct readahead_control *ractl, loff_t new_start, size_t new_len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hreadahead_expandh]h)}(hreadahead_expandh]hreadahead_expand}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hC(struct readahead_control *ractl, loff_t new_start, size_t new_len)h](j)}(hstruct readahead_control *ractlh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj?modnameN classnameNj\j_)}jb]je)}jXjsbc.readahead_expandasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjkhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hractlh]hractl}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hloff_t new_starth](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jYc.readahead_expandasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h new_starth]h new_start}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hsize_t new_lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jYc.readahead_expandasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnew_lenh]hnew_len}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hExpand a readahead requesth]hExpand a readahead request}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jJj4jJj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjNubj)}(hhh](j)}(h?``struct readahead_control *ractl`` The request to be expanded h](j)}(h#``struct readahead_control *ractl``h]j?)}(hjsh]hstruct readahead_control *ractl}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjmubj)}(hhh]j9)}(hThe request to be expandedh]hThe request to be expanded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h'``loff_t new_start`` The revised start h](j)}(h``loff_t new_start``h]j?)}(hjh]hloff_t new_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjubj)}(hhh]j9)}(hThe revised starth]hThe revised start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h3``size_t new_len`` The revised size of the request h](j)}(h``size_t new_len``h]j?)}(hjh]hsize_t new_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjubj)}(hhh]j9)}(hThe revised size of the requesth]hThe revised size of the request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjNubj9)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjNubj9)}(hThe algorithm will stop if it encounters a conflicting page already in the pagecache and leave a smaller expansion than requested.h]hThe algorithm will stop if it encounters a conflicting page already in the pagecache and leave a smaller expansion than requested.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjNubj9)}(hvThe caller must check for this by examining the revised **ractl** object for a different expansion than was requested.h](h8The caller must check for this by examining the revised }(hjThhhNhNubjz)}(h **ractl**h]hractl}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh5 object for a different expansion than was requested.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubeh}(h] readaheadah ]h"] readaheadah$]h&]uh1hhjHehhhhhKAubh)}(hhh](h)}(h Writebackh]h Writeback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKJubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ2balance_dirty_pages_ratelimited_flags (C function)'c.balance_dirty_pages_ratelimited_flagshNtauh1hhjhhhNhNubh)}(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)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h%balance_dirty_pages_ratelimited_flagsh]h)}(h%balance_dirty_pages_ratelimited_flagsh]h%balance_dirty_pages_ratelimited_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h3(struct address_space *mapping, unsigned int flags)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsb'c.balance_dirty_pages_ratelimited_flagsasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hBalance dirty memory state.h]hBalance dirty memory state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj)}(hhh](j)}(hC``struct address_space *mapping`` address_space which was dirtied. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj)}(hhh]j9)}(h address_space which was dirtied.h]h address_space which was dirtied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``unsigned int flags`` BDP flags. h](j)}(h``unsigned int flags``h]j?)}(hj9h]hunsigned int flags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhj3ubj)}(hhh]j9)}(h BDP flags.h]h BDP flags.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj9)}(hProcesses 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]hProcesses 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj9)}(h2See balance_dirty_pages_ratelimited() for details.h]h2See balance_dirty_pages_ratelimited() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj9)}(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](hIf }(hjhhhNhNubjz)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX$ 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,balance_dirty_pages_ratelimited (C function)!c.balance_dirty_pages_ratelimitedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDvoid balance_dirty_pages_ratelimited (struct address_space *mapping)h]h)}(hCvoid balance_dirty_pages_ratelimited(struct address_space *mapping)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM;ubh)}(hbalance_dirty_pages_ratelimitedh]h)}(hbalance_dirty_pages_ratelimitedh]hbalance_dirty_pages_ratelimited}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM;ubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj>hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj^modnameN classnameNj\j_)}jb]je)}jXj$sb!c.balance_dirty_pages_ratelimitedasbuh1hhj:ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj:ubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj6ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM;ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM;hjhhubj )}(hhh]j9)}(hbalance dirty memory state.h]hbalance dirty memory state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM?hjubj)}(hhh]j)}(hC``struct address_space *mapping`` address_space which was dirtied. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM<hjubj)}(hhh]j9)}(h address_space which was dirtied.h]h address_space which was dirtied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM>hjubj9)}(hProcesses 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]hProcesses 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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM>hjubj9)}(hOnce 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]hOnce 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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$tag_pages_for_writeback (C function)c.tag_pages_for_writebackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hXvoid tag_pages_for_writeback (struct address_space *mapping, pgoff_t start, pgoff_t end)h]h)}(hWvoid tag_pages_for_writeback(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMD ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMD ubh)}(htag_pages_for_writebackh]h)}(htag_pages_for_writebackh]htag_pages_for_writeback}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMD ubj)}(h;(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.tag_pages_for_writebackasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjEmodnameN classnameNj\j_)}jb]jc.tag_pages_for_writebackasbuh1hhj<ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hstarth]hstart}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.tag_pages_for_writebackasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMD ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMD hjhhubj )}(hhh]j9)}(h$tag pages to be written by writebackh]h$tag pages to be written by writeback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMD hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMD ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMH hjubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j?)}(hj"h]hstruct address_space *mapping}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chME hjubj)}(hhh]j9)}(h address space structure to writeh]h address space structure to write}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hME hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hME hjubj)}(h&``pgoff_t start`` starting page index h](j)}(h``pgoff_t start``h]j?)}(hj[h]h pgoff_t start}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMF hjUubj)}(hhh]j9)}(hstarting page indexh]hstarting page index}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphMF hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMF hjubj)}(h.``pgoff_t end`` ending page index (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hjh]h pgoff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMG hjubj)}(hhh]j9)}(hending page index (inclusive)h]hending page index (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMG hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMG hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMI hjubj9)}(hXThis function scans the page range from **start** to **end** (inclusive) and tags all pages that have DIRTY tag set with a special TOWRITE tag. The caller can then use the TOWRITE tag to identify pages eligible for writeback. This mechanism is used to avoid livelocking of writeback by a process steadily creating new dirty pages in the file (thus it is important for this function to be quick so that it can tag pages faster than a dirtying process can create them).h](h(This function scans the page range from }(hjhhhNhNubjz)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX (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).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMI hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwriteback_iter (C function)c.writeback_iterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h}struct folio * writeback_iter (struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)h]h)}(h{struct folio *writeback_iter(struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)h](j!)}(hj$h]hstruct}(hj8hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj4hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhM ubh)}(hhh]h)}(hfolioh]hfolio}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjYmodnameN classnameNj\j_)}jb]je)}jXwriteback_itersbc.writeback_iterasbuh1hhj4hhhjEhM ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhM ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj4hhhjEhM ubh)}(hwriteback_iterh]h)}(hjuh]hwriteback_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhjEhM ubj)}(h_(struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jsc.writeback_iterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct writeback_control *wbch](j!)}(hj$h]hstruct}(hj"hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjBmodnameN classnameNj\j_)}jb]jsc.writeback_iterasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjlhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hwbch]hwbc}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jsc.writeback_iterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int *errorh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(herrorh]herror}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj4hhhjEhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhjEhM ubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhjEhM hj-hhubj )}(hhh]j9)}(h(iterate folio of a mapping for writebackh]h(iterate folio of a mapping for writeback}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjRhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjEhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(h address space structure to writeh]h address space structure to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h4``struct writeback_control *wbc`` writeback context h](j)}(h!``struct writeback_control *wbc``h]j?)}(hjh]hstruct writeback_control *wbc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(hwriteback contexth]hwriteback context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hF``struct folio *folio`` previously iterated folio (``NULL`` to start) h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(h-previously iterated folio (``NULL`` to start)h](hpreviously iterated folio (}(hj!hhhNhNubj?)}(h``NULL``h]hNULL}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubh to start)}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h?``int *error`` in-out pointer for writeback errors (see below) h](j)}(h``int *error``h]j?)}(hjSh]h int *error}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjMubj)}(hhh]j9)}(h/in-out pointer for writeback errors (see below)h]h/in-out pointer for writeback errors (see below)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhM hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(hThis function returns the next folio for the writeback operation described by **wbc** on **mapping** and should be called in a while loop in the ->writepages implementation.h](hNThis function returns the next folio for the writeback operation described by }(hjhhhNhNubjz)}(h**wbc**h]hwbc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh on }(hjhhhNhNubjz)}(h **mapping**h]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhJ and should be called in a while loop in the ->writepages implementation.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(hTo 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, }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh is passed in the }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhe argument, and for every subsequent iteration the folio returned previously should be passed back in.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(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](hSIf there was an error in the per-folio writeback inside the writeback_iter() loop, }(hj hhhNhNubjz)}(h **error**h]herror}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh" should be set to the error value.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(hOnce 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+hhhNhNubjz)}(h**wbc**h]hwbc}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh) has finished, this function will return }(hj+hhhNhNubj?)}(h``NULL``h]hNULL}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubh: and if there was an error in any iteration restore it to }(hj+hhhNhNubjz)}(h **error**h]herror}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(h**Note**h]jz)}(hjrh]hNote}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(hcallers 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 }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubj9)}(h3the folio to write or ``NULL`` if the loop is done.h](hthe folio to write or }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if the loop is done.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwrite_cache_pages (C function)c.write_cache_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hwint write_cache_pages (struct address_space *mapping, struct writeback_control *wbc, writepage_t writepage, void *data)h]h)}(hvint write_cache_pages(struct address_space *mapping, struct writeback_control *wbc, writepage_t writepage, void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM$ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM$ ubh)}(hwrite_cache_pagesh]h)}(hwrite_cache_pagesh]hwrite_cache_pages}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM$ ubj)}(ha(struct address_space *mapping, struct writeback_control *wbc, writepage_t writepage, void *data)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj_modnameN classnameNj\j_)}jb]je)}jXj%sbc.write_cache_pagesasbuh1hhj;ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubj)}(hstruct writeback_control *wbch](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jyc.write_cache_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hwbch]hwbc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubj)}(hwritepage_t writepageh](h)}(hhh]h)}(h writepage_th]h writepage_t}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj&modnameN classnameNj\j_)}jb]jyc.write_cache_pagesasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h writepageh]h writepage}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubj)}(h void *datah](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjeubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM$ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM$ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM$ hjhhubj )}(hhh]j9)}(hNwalk the list of dirty pages of the given address space and write all of them.h]hNwalk the list of dirty pages of the given address space and write all of them.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM$ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM$ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct address_space *mapping`` address space structure to write ``struct writeback_control *wbc`` subtract the number of written pages from ***wbc->nr_to_write** ``writepage_t writepage`` function called for each page ``void *data`` data passed to writepage function **Return** ``0`` on success, negative error code otherwise **Note** please use writeback_iter() instead.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM( hjubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM% hjubj)}(hhh]j9)}(h address space structure to writeh]h address space structure to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM% hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM% hjubj)}(hb``struct writeback_control *wbc`` subtract the number of written pages from ***wbc->nr_to_write** h](j)}(h!``struct writeback_control *wbc``h]j?)}(hj6h]hstruct writeback_control *wbc}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM& hj0ubj)}(hhh]j9)}(h?subtract the number of written pages from ***wbc->nr_to_write**h](h*subtract the number of written pages from }(hjOhhhNhNubjz)}(h***wbc->nr_to_write**h]h*wbc->nr_to_write}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubeh}(h]h ]h"]h$]h&]uh1j8hjKhM& hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM& hjubj)}(h8``writepage_t writepage`` function called for each page h](j)}(h``writepage_t writepage``h]j?)}(hj}h]hwritepage_t writepage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM' hjwubj)}(hhh]j9)}(hfunction called for each pageh]hfunction called for each page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM' hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM' hjubj)}(h1``void *data`` data passed to writepage function h](j)}(h``void *data``h]j?)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM( hjubj)}(hhh]j9)}(h!data passed to writepage functionh]h!data passed to writepage function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM( hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM( hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM* hjubj9)}(h/``0`` on success, negative error code otherwiseh](j?)}(h``0``h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh* on success, negative error code otherwise}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM* hjubj9)}(h**Note**h]jz)}(hj&h]hNote}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM, hjubj9)}(h$please use writeback_iter() instead.h]h$please use writeback_iter() instead.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM, hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ filemap_dirty_folio (C function)c.filemap_dirty_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(hMbool filemap_dirty_folio (struct address_space *mapping, struct folio *folio)h]h)}(hLbool filemap_dirty_folio(struct address_space *mapping, struct folio *folio)h](j)}(hj)h]hbool}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhM ubh)}(hfilemap_dirty_folioh]h)}(hfilemap_dirty_folioh]hfilemap_dirty_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjxhM ubj)}(h4(struct address_space *mapping, struct folio *folio)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.filemap_dirty_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]jc.filemap_dirty_folioasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjxhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjxhM ubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhjxhM hj`hhubj )}(hhh]j9)}(hAMark a folio dirty for filesystems which do not use buffer_heads.h]hAMark a folio dirty for filesystems which do not use buffer_heads.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjxhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh](j)}(hG``struct address_space *mapping`` Address space this folio belongs to. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(h$Address space this folio belongs to.h]h$Address space this folio belongs to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h5``struct folio *folio`` Folio to be marked as dirty. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(hFolio to be marked as dirty.h]hFolio to be marked as dirty.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hM hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(folio_redirty_for_writepage (C function)c.folio_redirty_for_writepagehNtauh1hhjhhhNhNubh)}(hhh](h)}(hUbool folio_redirty_for_writepage (struct writeback_control *wbc, struct folio *folio)h]h)}(hTbool folio_redirty_for_writepage(struct writeback_control *wbc, struct folio *folio)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hfolio_redirty_for_writepageh]h)}(hfolio_redirty_for_writepageh]hfolio_redirty_for_writepage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h4(struct writeback_control *wbc, struct folio *folio)h](j)}(hstruct writeback_control *wbch](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_redirty_for_writepageasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj:hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hwbch]hwbc}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hfolioh]hfolio}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j(c.folio_redirty_for_writepageasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(hDecline to write a dirty folio.h]hDecline to write a dirty folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh](j)}(h9``struct writeback_control *wbc`` The writeback control. h](j)}(h!``struct writeback_control *wbc``h]j?)}(hj"h]hstruct writeback_control *wbc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j9)}(hThe writeback control.h]hThe writeback control.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hM hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM hjubj)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj[h]hstruct folio *folio}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjUubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(hWhen 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](hHWhen a writepage implementation decides that it doesn’t want to write }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh7 for some reason, it should call this function, unlock }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and return 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(hHTrue if we redirtied the folio. False if someone else dirtied it first.h]hHTrue if we redirtied the folio. False if someone else dirtied it first.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mark_dirty (C function)c.folio_mark_dirtyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+bool folio_mark_dirty (struct folio *folio)h]h)}(h*bool folio_mark_dirty(struct folio *folio)h](j)}(hj)h]hbool}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj3hM ubh)}(hfolio_mark_dirtyh]h)}(hfolio_mark_dirtyh]hfolio_mark_dirty}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj3hM ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjbhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjHsbc.folio_mark_dirtyasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjZubah}(h]h ]h"]h$]h&]jj uh1jhj"hhhj3hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj3hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj3hM hjhhubj )}(hhh]j9)}(hMark a folio as being modified.h]hMark a folio as being modified.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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. **Return** True if the folio was newly dirtied, false if it was already dirty.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj&h]hstruct folio *folio}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(hXThe 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]hXThe 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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj9)}(hCTrue if the folio was newly dirtied, false if it was already dirty.h]hCTrue if the folio was newly dirtied, false if it was already dirty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_wait_writeback (C function)c.folio_wait_writebackhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void folio_wait_writeback (struct folio *folio)h]h)}(h.void folio_wait_writeback(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM' ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM' ubh)}(hfolio_wait_writebackh]h)}(hfolio_wait_writebackh]hfolio_wait_writeback}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM' ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj*modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_wait_writebackasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjVhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM' ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM' ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM' hjhhubj )}(hhh]j9)}(h%Wait for a folio to finish writeback.h]h%Wait for a folio to finish writeback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM' hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM' ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM+ hjubj)}(hhh]j)}(h/``struct folio *folio`` The folio to wait for. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM( hjubj)}(hhh]j9)}(hThe folio to wait for.h]hThe folio to wait for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM( hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM( hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM* hjubj9)}(hVIf the folio is currently being written back to storage, wait for the I/O to complete.h]hVIf the folio is currently being written back to storage, wait for the I/O to complete.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM* hjubj9)}(h **Context**h]jz)}(hj0h]hContext}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM- hjubj9)}(hSleeps. 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]hSleeps. 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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM- hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*folio_wait_writeback_killable (C function)c.folio_wait_writeback_killablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7int folio_wait_writeback_killable (struct folio *folio)h]h)}(h6int folio_wait_writeback_killable(struct folio *folio)h](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM< ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhM< ubh)}(hfolio_wait_writeback_killableh]h)}(hfolio_wait_writeback_killableh]hfolio_wait_writeback_killable}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhM< ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_wait_writeback_killableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjqhhhjhM< ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhM< ubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1hhjhM< hjjhhubj )}(hhh]j9)}(h%Wait for a folio to finish writeback.h]h%Wait for a folio to finish writeback.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM< hj2hhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhM< ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jMj4jMj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM@ hjQubj)}(hhh]j)}(h/``struct folio *folio`` The folio to wait for. h](j)}(h``struct folio *folio``h]j?)}(hjvh]hstruct folio *folio}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM= hjpubj)}(hhh]j9)}(hThe folio to wait for.h]hThe folio to wait for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM= hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM= hjmubah}(h]h ]h"]h$]h&]uh1jhjQubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM? hjQubj9)}(hrIf the folio is currently being written back to storage, wait for the I/O to complete or a fatal signal to arrive.h]hrIf the folio is currently being written back to storage, wait for the I/O to complete or a fatal signal to arrive.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM? hjQubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMB hjQubj9)}(hSleeps. 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]hSleeps. 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMB hjQubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMG hjQubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMF hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_wait_stable (C function)c.folio_wait_stablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void folio_wait_stable (struct folio *folio)h]h)}(h+void folio_wait_stable(struct folio *folio)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMU ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjRhMU ubh)}(hfolio_wait_stableh]h)}(hfolio_wait_stableh]hfolio_wait_stable}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhjRhMU ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjgsbc.folio_wait_stableasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjyubah}(h]h ]h"]h$]h&]jj uh1jhj@hhhjRhMU ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhjRhMU ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhjRhMU hj9hhubj )}(hhh]j9)}(h+wait for writeback to finish, if necessary.h]h+wait for writeback to finish, if necessary.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMU hjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMU ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMY hj ubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j?)}(hjEh]hstruct folio *folio}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMV hj?ubj)}(hhh]j9)}(hThe folio to wait on.h]hThe folio to wait on.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhMV hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMV hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMX hj ubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMX hj ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM\ hj ubj9)}(hSleeps. 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]hSleeps. 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM\ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubeh}(h] writebackah ]h"] writebackah$]h&]uh1hhjHehhhhhKJubh)}(hhh](h)}(hTruncateh]hTruncate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKPubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_invalidate (C function)c.folio_invalidatehNtauh1hhjhhhNhNubh)}(hhh](h)}(hIvoid folio_invalidate (struct folio *folio, size_t offset, size_t length)h]h)}(hHvoid folio_invalidate(struct folio *folio, size_t offset, size_t length)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKyubh)}(hfolio_invalidateh]h)}(hfolio_invalidateh]hfolio_invalidate}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKyubj)}(h3(struct folio *folio, size_t offset, size_t length)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjBhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]h)}(hfolioh]hfolio}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]je)}jXj(sbc.folio_invalidateasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubj)}(h size_t offseth](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j|c.folio_invalidateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubj)}(h size_t lengthh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j|c.folio_invalidateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlengthh]hlength}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKyhjhhubj )}(hhh]j9)}(h"Invalidate part or all of a folio.h]h"Invalidate part or all of a folio.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKyhjRhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKyubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chK}hjqubj)}(hhh](j)}(h5``struct folio *folio`` The folio which is affected. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKzhjubj)}(hhh]j9)}(hThe folio which is affected.h]hThe folio which is affected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjubj)}(h3``size_t offset`` start of the range to invalidate h](j)}(h``size_t offset``h]j?)}(hjh]h size_t offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chK{hjubj)}(hhh]j9)}(h start of the range to invalidateh]h start of the range to invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK{hjubj)}(h4``size_t length`` length of the range to invalidate h](j)}(h``size_t length``h]j?)}(hjh]h size_t length}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chK|hjubj)}(hhh]j9)}(h!length of the range to invalidateh]h!length of the range to invalidate}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chK~hjqubj9)}(hjfolio_invalidate() is called when all or part of the folio has become invalidated by a truncate operation.h]hjfolio_invalidate() is called when all or part of the folio has become invalidated by a truncate operation.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chK~hjqubj9)}(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](hqfolio_invalidate() does not have to release all buffers, but it must ensure that no dirty buffer is left outside }(hjhhhhNhNubjz)}(h **offset**h]hoffset}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh 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.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'truncate_inode_pages_range (C function)c.truncate_inode_pages_rangehNtauh1hhjhhhNhNubh)}(hhh](h)}(h[void truncate_inode_pages_range (struct address_space *mapping, loff_t lstart, loff_t lend)h]h)}(hZvoid truncate_inode_pages_range(struct address_space *mapping, loff_t lstart, loff_t lend)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM>ubh)}(htruncate_inode_pages_rangeh]h)}(htruncate_inode_pages_rangeh]htruncate_inode_pages_range}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM>ubj)}(h;(struct address_space *mapping, loff_t lstart, loff_t lend)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.truncate_inode_pages_rangeasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj2hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj]modnameN classnameNj\j_)}jb]j c.truncate_inode_pages_rangeasbuh1hhjTubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hlstarth]hlstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.truncate_inode_pages_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlendh]hlend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM>hjhhubj )}(hhh]j9)}(h=truncate range of pages specified by start & end byte offsetsh]h=truncate range of pages specified by start & end byte offsets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct address_space *mapping`` mapping to truncate ``loff_t lstart`` offset from which to truncate ``loff_t lend`` offset to which to truncate (inclusive) **Description** Truncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned). Truncate takes two passes - the first pass is nonblocking. It will not block on page locks and it will not block on writeback. The second pass will wait. This is to prevent as much IO as possible in the affected region. The first pass will remove most pages, so the search cost of the second pass is low. We pass down the cache-hot hint to the page freeing code. Even if the mapping is large, it is probably the case that the final pages are the most recently touched, and freeing happens in ascending file offset order. Note that since ->invalidate_folio() accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMBhjubj)}(hhh](j)}(h6``struct address_space *mapping`` mapping to truncate h](j)}(h!``struct address_space *mapping``h]j?)}(hj:h]hstruct address_space *mapping}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM?hj4ubj)}(hhh]j9)}(hmapping to truncateh]hmapping to truncate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhM?hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM?hj1ubj)}(h0``loff_t lstart`` offset from which to truncate h](j)}(h``loff_t lstart``h]j?)}(hjsh]h loff_t lstart}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM@hjmubj)}(hhh]j9)}(hoffset from which to truncateh]hoffset from which to truncate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM@hj1ubj)}(h8``loff_t lend`` offset to which to truncate (inclusive) h](j)}(h``loff_t lend``h]j?)}(hjh]h loff_t lend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMAhjubj)}(hhh]j9)}(h'offset to which to truncate (inclusive)h]h'offset to which to truncate (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMChjubj9)}(hTruncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned).h]hTruncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMChjubj9)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMGhjubj9)}(hWe 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]hWe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMMhjubj9)}(hNote 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]hNote that since ->invalidate_folio() accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!truncate_inode_pages (C function)c.truncate_inode_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hHvoid truncate_inode_pages (struct address_space *mapping, loff_t lstart)h]h)}(hGvoid truncate_inode_pages(struct address_space *mapping, loff_t lstart)h](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjghMubh)}(htruncate_inode_pagesh]h)}(htruncate_inode_pagesh]htruncate_inode_pages}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjghMubj)}(h.(struct address_space *mapping, loff_t lstart)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj|sbc.truncate_inode_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jc.truncate_inode_pagesasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlstarth]hlstart}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjUhhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjghMubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjNhhubj )}(hhh]j9)}(h'truncate *all* the pages from an offseth](h truncate }(hjahhhNhNubjK)}(h*all*h]hall}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjaubh the pages from an offset}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh](j)}(h6``struct address_space *mapping`` mapping to truncate h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hmapping to truncateh]hmapping to truncate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``loff_t lstart`` offset from which to truncate h](j)}(h``loff_t lstart``h]j?)}(hjh]h loff_t lstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hoffset from which to truncateh]hoffset from which to truncate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(hMCalled under (and serialised by) inode->i_rwsem and mapping->invalidate_lock.h]hMCalled under (and serialised by) inode->i_rwsem and mapping->invalidate_lock.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(h**Note**h]jz)}(hjOh]hNote}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(hWhen 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]hWhen 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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'truncate_inode_pages_final (C function)c.truncate_inode_pages_finalhNtauh1hhjhhhNhNubh)}(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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(htruncate_inode_pages_finalh]h)}(htruncate_inode_pages_finalh]htruncate_inode_pages_final}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.truncate_inode_pages_finalasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&truncate *all* pages before inode diesh](h truncate }(hjThhhNhNubjK)}(h*all*h]hall}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjTubh pages before inode dies}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j)}(h6``struct address_space *mapping`` mapping to truncate h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hmapping to truncateh]hmapping to truncate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(h0Called under (and serialized by) inode->i_rwsem.h]h0Called under (and serialized by) inode->i_rwsem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(hFilesystems 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]hFilesystems 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%invalidate_mapping_pages (C function)c.invalidate_mapping_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hbunsigned long invalidate_mapping_pages (struct address_space *mapping, pgoff_t start, pgoff_t end)h]h)}(haunsigned long invalidate_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM1ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhM1ubj)}(hlongh]hlong}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhM1ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhM1ubh)}(hinvalidate_mapping_pagesh]h)}(hinvalidate_mapping_pagesh]hinvalidate_mapping_pages}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhjDhM1ubj)}(h;(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjusbc.invalidate_mapping_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.invalidate_mapping_pagesasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjNmodnameN classnameNj\j_)}jb]jc.invalidate_mapping_pagesasbuh1hhjEubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hendh]hend}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj2hhhjDhM1ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhjDhM1ubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhjDhM1hj+hhubj )}(hhh]j9)}(h1Invalidate all clean, unlocked cache of one inodeh]h1Invalidate all clean, unlocked cache of one inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjDhM1ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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 invalidatedh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM5hjubj)}(hhh](j)}(hX``struct address_space *mapping`` the address_space which holds the cache to invalidate h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM2hjubj)}(hhh]j9)}(h5the address_space which holds the cache to invalidateh]h5the address_space which holds the cache to invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubj)}(h8``pgoff_t start`` the offset 'from' which to invalidate h](j)}(h``pgoff_t start``h]j?)}(hjh]h pgoff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM3hjubj)}(hhh]j9)}(h%the offset 'from' which to invalidateh]h)the offset ‘from’ which to invalidate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hM3hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hM3hjubj)}(h@``pgoff_t end`` the offset 'to' which to invalidate (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hjUh]h pgoff_t end}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM4hjOubj)}(hhh]j9)}(h/the offset 'to' which to invalidate (inclusive)h]h3the offset ‘to’ which to invalidate (inclusive)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhM4hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM6hjubj9)}(hThis function removes pages that are clean, unmapped and unlocked, as well as shadow entries. It will not block on IO activity.h]hThis function removes pages that are clean, unmapped and unlocked, as well as shadow entries. It will not block on IO activity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM6hjubj9)}(hzIf you want to remove all the pages of one inode, regardless of their use and writeback state, use truncate_inode_pages().h]hzIf you want to remove all the pages of one inode, regardless of their use and writeback state, use truncate_inode_pages().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM9hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM<hjubj9)}(h9The number of indices that had their contents invalidatedh]h9The number of indices that had their contents invalidated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*invalidate_inode_pages2_range (C function)c.invalidate_inode_pages2_rangehNtauh1hhjhhhNhNubh)}(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)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM}ubh)}(hinvalidate_inode_pages2_rangeh]h)}(hinvalidate_inode_pages2_rangeh]hinvalidate_inode_pages2_range}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM}ubj)}(h;(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjHhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]h)}(h address_spaceh]h address_space}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]je)}jXj.sbc.invalidate_inode_pages2_rangeasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjDubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@ubj)}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.invalidate_inode_pages2_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@ubj)}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.invalidate_inode_pages2_rangeasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj@ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM}ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM}hjhhubj )}(hhh]j9)}(h+remove range of pages from an address_spaceh]h+remove range of pages from an address_space}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM}hjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM}ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjwubj)}(hhh](j)}(h4``struct address_space *mapping`` the address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM~hjubj)}(hhh]j9)}(hthe address_spaceh]hthe address_space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubj)}(h=``pgoff_t start`` the page offset 'from' which to invalidate h](j)}(h``pgoff_t start``h]j?)}(hjh]h pgoff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(h*the page offset 'from' which to invalidateh]h.the page offset ‘from’ which to invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hE``pgoff_t end`` the page offset 'to' which to invalidate (inclusive) h](j)}(h``pgoff_t end``h]j?)}(hjh]h pgoff_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(h4the page offset 'to' which to invalidate (inclusive)h]h8the page offset ‘to’ which to invalidate (inclusive)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjwubj9)}(hZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.h]hZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjwubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjwubj9)}(h--EBUSY if any pages could not be invalidated.h]h--EBUSY if any pages could not be invalidated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$invalidate_inode_pages2 (C function)c.invalidate_inode_pages2hNtauh1hhjhhhNhNubh)}(hhh](h)}(h;int invalidate_inode_pages2 (struct address_space *mapping)h]h)}(h:int invalidate_inode_pages2(struct address_space *mapping)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hinvalidate_inode_pages2h]h)}(hinvalidate_inode_pages2h]hinvalidate_inode_pages2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.invalidate_inode_pages2asbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj>hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&remove all pages from an address_spaceh]h&remove all pages from an address_space}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j)}(h4``struct address_space *mapping`` the address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hthe address_spaceh]hthe address_space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(hZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.h]hZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(h--EBUSY if any pages could not be invalidated.h]h--EBUSY if any pages could not be invalidated.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtruncate_pagecache (C function)c.truncate_pagecachehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void truncate_pagecache (struct inode *inode, loff_t newsize)h]h)}(h ah"]h$]h&]uh1j1 hjubh)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hloff_t newsizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.truncate_pagecacheasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnewsizeh]hnewsize}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjYhhhjkhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjkhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1hhjkhMhjRhhubj )}(hhh]j9)}(h2unmap and remove pagecache that has been truncatedh]h2unmap and remove pagecache that has been truncated}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j}j4j}j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh](j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j?)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``loff_t newsize`` new file size h](j)}(h``loff_t newsize``h]j?)}(hjh]hloff_t newsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(h new file sizeh]h new file size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(hOinode's new i_size must already be written before truncate_pagecache is called.h]hQinode’s new i_size must already be written before truncate_pagecache is called.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj9)}(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?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtruncate_setsize (C function)c.truncate_setsizehNtauh1hhjhhhNhNubh)}(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)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj|hMubh)}(htruncate_setsizeh]h)}(htruncate_setsizeh]htruncate_setsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhj|hMubj)}(h%(struct inode *inode, loff_t newsize)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.truncate_setsizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hloff_t newsizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj"modnameN classnameNj\j_)}jb]jc.truncate_setsizeasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnewsizeh]hnewsize}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhj|hMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhj|hMhjchhubj )}(hhh]j9)}(h.update inode and pagecache for a new file sizeh]h.update inode and pagecache for a new file size}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj)}(hhh](j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j?)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(hhh]j9)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``loff_t newsize`` new file size h](j)}(h``loff_t newsize``h]j?)}(hjh]hloff_t newsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj)}(hhh]j9)}(h new file sizeh]h new file size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj9)}(htruncate_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](hTtruncate_setsize updates i_size and performs pagecache truncation (if necessary) to }(hjAhhhNhNubjz)}(h **newsize**h]hnewsize}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubhf. It will be typically be called from the filesystem’s setattr function when ATTR_SIZE is passed in.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj9)}(hMust 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]hMust 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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%pagecache_isize_extended (C function)c.pagecache_isize_extendedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hKvoid pagecache_isize_extended (struct inode *inode, loff_t from, loff_t to)h]h)}(hJvoid pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpagecache_isize_extendedh]h)}(hpagecache_isize_extendedh]hpagecache_isize_extended}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h-(struct inode *inode, loff_t from, loff_t to)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.pagecache_isize_extendedasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hinodeh]hinode}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t fromh](h)}(hhh]h)}(hloff_th]hloff_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjEmodnameN classnameNj\j_)}jb]jc.pagecache_isize_extendedasbuh1hhj<ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hfromh]hfrom}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h loff_t toh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.pagecache_isize_extendedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htoh]hto}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h*update pagecache after extension of i_sizeh]h*update pagecache after extension of i_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM#hjubj)}(hhh](j)}(h<``struct inode *inode`` inode for which i_size was extended h](j)}(h``struct inode *inode``h]j?)}(hj"h]hstruct inode *inode}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj)}(hhh]j9)}(h#inode for which i_size was extendedh]h#inode for which i_size was extended}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hM hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM hjubj)}(h$``loff_t from`` original inode size h](j)}(h``loff_t from``h]j?)}(hj[h]h loff_t from}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM!hjUubj)}(hhh]j9)}(horiginal inode sizeh]horiginal inode size}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphM!hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM!hjubj)}(h``loff_t to`` new inode size h](j)}(h ``loff_t to``h]j?)}(hjh]h loff_t to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM"hjubj)}(hhh]j9)}(hnew inode sizeh]hnew inode size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM$hjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM$hjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%truncate_pagecache_range (C function)c.truncate_pagecache_rangehNtauh1hhjhhhNhNubh)}(hhh](h)}(hOvoid truncate_pagecache_range (struct inode *inode, loff_t lstart, loff_t lend)h]h)}(hNvoid truncate_pagecache_range(struct inode *inode, loff_t lstart, loff_t lend)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM_ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj1hM_ubh)}(htruncate_pagecache_rangeh]h)}(htruncate_pagecache_rangeh]htruncate_pagecache_range}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj1hM_ubj)}(h1(struct inode *inode, loff_t lstart, loff_t lend)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hj`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hinodeh]hinode}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjFsbc.truncate_pagecache_rangeasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXubj)}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.truncate_pagecache_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlstarth]hlstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXubj)}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.truncate_pagecache_rangeasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlendh]hlend}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj1hM_ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hM_ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj1hM_hjhhubj )}(hhh]j9)}(h/unmap and remove pagecache that is hole-punchedh]h/unmap and remove pagecache that is hole-punched}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM_hjphhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hM_ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct inode *inode`` inode ``loff_t lstart`` offset of beginning of hole ``loff_t lend`` offset of last byte of hole **Description** This function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMchjubj)}(hhh](j)}(h``struct inode *inode`` inode h](j)}(h``struct inode *inode``h]j?)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM`hjubj)}(hhh]j9)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubj)}(h.``loff_t lstart`` offset of beginning of hole h](j)}(h``loff_t lstart``h]j?)}(hjh]h loff_t lstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMahjubj)}(hhh]j9)}(hoffset of beginning of holeh]hoffset of beginning of hole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(h,``loff_t lend`` offset of last byte of hole h](j)}(h``loff_t lend``h]j?)}(hj&h]h loff_t lend}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMbhj ubj)}(hhh]j9)}(hoffset of last byte of holeh]hoffset of last byte of hole}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMbhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMdhjubj9)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_set_wb_err (C function)c.filemap_set_wb_errhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@void filemap_set_wb_err (struct address_space *mapping, int err)h]h)}(h?void filemap_set_wb_err(struct address_space *mapping, int err)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKHubh)}(hfilemap_set_wb_errh]h)}(hfilemap_set_wb_errh]hfilemap_set_wb_err}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKHubj)}(h((struct address_space *mapping, int err)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.filemap_set_wb_errasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj/hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint errh](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(herrh]herr}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKHubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKHhjhhubj )}(hhh]j9)}(h)set a writeback error on an address_spaceh]h)set a writeback error on an address_space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKHhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKHubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKLhjubj)}(hhh](j)}(hJ``struct address_space *mapping`` mapping in which to set writeback error h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKIhjubj)}(hhh]j9)}(h'mapping in which to set writeback errorh]h'mapping in which to set writeback error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKIhjubj)}(h'``int err`` error to be set in mapping h](j)}(h ``int err``h]j?)}(hjh]hint err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKJhjubj)}(hhh]j9)}(herror to be set in mappingh]herror to be set in mapping}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hKJhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKJhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKLhjubj9)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKLhjubj9)}(hWhen 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]hWhen 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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!filemap_check_wb_err (C function)c.filemap_check_wb_errhNtauh1hhjhhhNhNubh)}(hhh](h)}(hHint filemap_check_wb_err (struct address_space *mapping, errseq_t since)h]h)}(hGint filemap_check_wb_err(struct address_space *mapping, errseq_t since)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK]ubh)}(hfilemap_check_wb_errh]h)}(hfilemap_check_wb_errh]hfilemap_check_wb_err}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK]ubj)}(h/(struct address_space *mapping, errseq_t since)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.filemap_check_wb_errasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj-hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(herrseq_t sinceh](h)}(hhh]h)}(herrseq_th]herrseq_t}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjXmodnameN classnameNj\j_)}jb]jc.filemap_check_wb_errasbuh1hhjOubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hsinceh]hsince}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK]ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK]hjhhubj )}(hhh]j9)}(h1has an error occurred since the mark was sampled?h]h1has an error occurred since the mark was sampled?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hXG**Parameters** ``struct address_space *mapping`` mapping to check for writeback errors ``errseq_t since`` previously-sampled errseq_t **Description** Grab the errseq_t value from the mapping, and see if it has changed "since" the given value was sampled. If it has then report the latest error set, otherwise return 0.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKahjubj)}(hhh](j)}(hH``struct address_space *mapping`` mapping to check for writeback errors h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK^hjubj)}(hhh]j9)}(h%mapping to check for writeback errorsh]h%mapping to check for writeback errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK^hjubj)}(h/``errseq_t since`` previously-sampled errseq_t h](j)}(h``errseq_t since``h]j?)}(hj&h]herrseq_t since}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK_hj ubj)}(hhh]j9)}(hpreviously-sampled errseq_th]hpreviously-sampled errseq_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hK_hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hK_hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKahjubj9)}(hhGrab the errseq_t value from the mapping, and see if it has changed "since" the given value was sampled.h]hlGrab the errseq_t value from the mapping, and see if it has changed “since” the given value was sampled.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKahjubj9)}(h?If it has then report the latest error set, otherwise return 0.h]h?If it has then report the latest error set, otherwise return 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"filemap_sample_wb_err (C function)c.filemap_sample_wb_errhNtauh1hhjhhhNhNubh)}(hhh](h)}(h>errseq_t filemap_sample_wb_err (struct address_space *mapping)h]h)}(h=errseq_t filemap_sample_wb_err(struct address_space *mapping)h](h)}(hhh]h)}(herrseq_th]herrseq_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfilemap_sample_wb_errsbc.filemap_sample_wb_errasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKmubh)}(hfilemap_sample_wb_errh]h)}(hjh]hfilemap_sample_wb_err}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKmubj)}(h(struct address_space *mapping)h]j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'modnameN classnameNj\j_)}jb]jc.filemap_sample_wb_errasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjQhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKmhjhhubj )}(hhh]j9)}(h4sample the current errseq_t to test for later errorsh]h4sample the current errseq_t to test for later errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKmubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKqhjubj)}(hhh]j)}(h8``struct address_space *mapping`` mapping to be sampled h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKnhjubj)}(hhh]j9)}(hmapping to be sampledh]hmapping to be sampled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKphjubj9)}(hWriteback errors are always reported relative to a particular sample point in the past. This function provides those sample points.h]hWriteback errors are always reported relative to a particular sample point in the past. This function provides those sample points.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKphjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfile_sample_sb_err (C function)c.file_sample_sb_errhNtauh1hhjhhhNhNubh)}(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]h)}(herrseq_th]herrseq_t}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjNmodnameN classnameNj\j_)}jb]je)}jXfile_sample_sb_errsbc.file_sample_sb_errasbuh1hhjEhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKyubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjmhKyubh)}(hfile_sample_sb_errh]h)}(hjjh]hfile_sample_sb_err}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhjmhKyubj)}(h(struct file *file)h]j)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jhc.file_sample_sb_errasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjEhhhjmhKyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhjmhKyubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1hhjmhKyhj>hhubj )}(hhh]j9)}(h4sample the current errseq_t to test for later errorsh]h4sample the current errseq_t to test for later errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKyhjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjmhKyubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK}hj8ubj)}(hhh]j)}(h1``struct file *file`` file pointer to be sampled h](j)}(h``struct file *file``h]j?)}(hj]h]hstruct file *file}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKzhjWubj)}(hhh]j9)}(hfile pointer to be sampledh]hfile pointer to be sampled}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhKzhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhKzhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK|hj8ubj9)}(hPGrab the most current superblock-level errseq_t value for the given struct file.h]hPGrab the most current superblock-level errseq_t value for the given struct file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK|hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmapping_set_error (C function)c.mapping_set_errorhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAvoid mapping_set_error (struct address_space *mapping, int error)h]h)}(h@void mapping_set_error(struct address_space *mapping, int error)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hmapping_set_errorh]h)}(hmapping_set_errorh]hmapping_set_error}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h*(struct address_space *mapping, int error)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:modnameN classnameNj\j_)}jb]je)}jXjsbc.mapping_set_errorasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int errorh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(herrorh]herror}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h-record a writeback error in the address_spaceh]h-record a writeback error in the address_space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjubj)}(hhh](j)}(hN``struct address_space *mapping`` the mapping in which an error should be set h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhj ubj)}(hhh]j9)}(h+the mapping in which an error should be seth]h+the mapping in which an error should be set}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h.``int error`` the error to set in the mapping h](j)}(h ``int error``h]j?)}(hjLh]h int error}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjFubj)}(hhh]j9)}(hthe error to set in the mappingh]hthe error to set in the mapping}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjubj9)}(hWhen 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]hWhen 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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mapping_set_large_folios (C function)c.mapping_set_large_folioshNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void mapping_set_large_folios (struct address_space *mapping)h]h)}(h ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h(Indicate the file supports large folios.h]h(Indicate the file supports large folios.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j)}(hA``struct address_space *mapping`` The address space of the file. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j9)}(hThe address space of the file.h]hThe address space of the file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(hThe 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]hThe 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.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(h **Context**h]jz)}(hj> h]hContext}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj< ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(hHThis should not be called while the inode is active as it is non-atomic.h]hHThis should not be called while the inode is active as it is non-atomic.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ mapping_align_index (C function)c.mapping_align_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(hJpgoff_t mapping_align_index (struct address_space *mapping, pgoff_t index)h]h)}(hIpgoff_t mapping_align_index(struct address_space *mapping, pgoff_t index)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXmapping_align_indexsbc.mapping_align_indexasbuh1hhj hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(hmapping_align_indexh]h)}(hj h]hmapping_align_index}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]j c.mapping_align_indexasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hmappingh]hmapping}(hj, hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjH hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjJ modnameN classnameNj\j_)}jb]j c.mapping_align_indexasbuh1hhjA ubj)}(h h]h }(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubh)}(hindexh]hindex}(hjt hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{ hhhj hMubah}(h]jv ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjx hhubj )}(hhh]j9)}(hAlign index for this mapping.h]hAlign index for this mapping.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjx hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubj)}(hhh](j)}(h5``struct address_space *mapping`` The address_space. h](j)}(h!``struct address_space *mapping``h]j?)}(hj h]hstruct address_space *mapping}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubj)}(hhh]j9)}(hThe address_space.h]hThe address_space.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j?)}(hj h]h pgoff_t index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubj)}(hhh]j9)}(hThe page index.h]hThe page index.}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj- hMhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjS h]h Description}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubj9)}(hThe 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]hThe 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.}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_flush_mapping (C function)c.folio_flush_mappinghNtauh1hhjhhhNhNubh)}(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!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM%ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM%ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXfolio_flush_mappingsbc.folio_flush_mappingasbuh1hhj hhhj hM%ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM%ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj hhhj hM%ubh)}(hfolio_flush_mappingh]h)}(hj h]hfolio_flush_mapping}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM%ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hj0 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj- ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj2 modnameN classnameNj\j_)}jb]j c.folio_flush_mappingasbuh1hhj ubj)}(h h]h }(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj\ hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hji hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM%ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hM%hj hhubj )}(hhh]j9)}(h,Find the file mapping this folio belongs to.h]h,Find the file mapping this folio belongs to.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM%hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM%ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM)hj ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj h]hstruct folio *folio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM&hj ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM&hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM&hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM(hj ubj9)}(hFor 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]hFor 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% hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM(hj ubj9)}(hThis 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]hThis 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().}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM,hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_inode (C function) c.folio_inodehNtauh1hhjhhhNhNubh)}(hhh](h)}(h0struct inode * folio_inode (struct folio *folio)h]h)}(h.struct inode *folio_inode(struct folio *folio)h](j!)}(hj$h]hstruct}(hjc hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_ hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM9ubj)}(h h]h }(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ hhhjp hM9ubh)}(hhh]h)}(hinodeh]hinode}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jX folio_inodesb c.folio_inodeasbuh1hhj_ hhhjp hM9ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ hhhjp hM9ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_ hhhjp hM9ubh)}(h folio_inodeh]h)}(hj h]h folio_inode}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_ hhhjp hM9ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]j  c.folio_inodeasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhj_ hhhjp hM9ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[ hhhjp hM9ubah}(h]jV ah ](jjeh"]h$]h&]jj)jhuh1hhjp hM9hjX hhubj )}(hhh]j9)}(h"Get the host inode for this folio.h]h"Get the host inode for this folio.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM9hj[hhubah}(h]h ]h"]h$]h&]uh1jhjX hhhjp hM9ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jvj4jvj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM=hjzubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM:hjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjzubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM<hjzubj9)}(hTFor folios which are in the page cache, return the inode that this folio belongs to.h]hTFor folios which are in the page cache, return the inode that this folio belongs to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM<hjzubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM?hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_attach_private (C function)c.folio_attach_privatehNtauh1hhjhhhNhNubh)}(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)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj<hMGubh)}(hfolio_attach_privateh]h)}(hfolio_attach_privateh]hfolio_attach_private}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj<hMGubj)}(h!(struct folio *folio, void *data)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjkhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjQsbc.folio_attach_privateasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjgubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubeh}(h]h ]h"]h$]h&]jj uh1jhj*hhhj<hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj<hMGubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1hhj<hMGhj#hhubj )}(hhh]j9)}(hAttach private data to a folio.h]hAttach private data to a folio.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGhj-hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj<hMGubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jHj4jHj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMKhjLubj)}(hhh](j)}(h1``struct folio *folio`` Folio to attach data to. h](j)}(h``struct folio *folio``h]j?)}(hjqh]hstruct folio *folio}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMHhjkubj)}(hhh]j9)}(hFolio to attach data to.h]hFolio to attach data to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjhubj)}(h(``void *data`` Data to attach to folio. h](j)}(h``void *data``h]j?)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMIhjubj)}(hhh]j9)}(hData to attach to folio.h]hData to attach to folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjhubeh}(h]h ]h"]h$]h&]uh1jhjLubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMKhjLubj9)}(hAttaching private data to a folio increments the page's reference count. The data must be detached before the folio will be freed.h]hAttaching private data to a folio increments the page’s reference count. The data must be detached before the folio will be freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMKhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_change_private (C function)c.folio_change_privatehNtauh1hhjhhhNhNubh)}(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)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMVubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hMVubj2 )}(hj5 h]h*}(hjGhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj&hhhj8hMVubh)}(hfolio_change_privateh]h)}(hfolio_change_privateh]hfolio_change_private}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj8hMVubj)}(h!(struct folio *folio, void *data)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjZsbc.folio_change_privateasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjpubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubeh}(h]h ]h"]h$]h&]jj uh1jhj&hhhj8hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj8hMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj8hMVhjhhubj )}(hhh]j9)}(hChange private data on a folio.h]hChange private data on a folio.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMVhj6hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hMVubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMZhjUubj)}(hhh](j)}(h5``struct folio *folio`` Folio to change the data on. h](j)}(h``struct folio *folio``h]j?)}(hjzh]hstruct folio *folio}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMWhjtubj)}(hhh]j9)}(hFolio to change the data on.h]hFolio to change the data on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjqubj)}(h)``void *data`` Data to set on the folio. h](j)}(h``void *data``h]j?)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMXhjubj)}(hhh]j9)}(hData to set on the folio.h]hData to set on the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMZhjUubj9)}(hChange 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]hChange 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMZhjUubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM^hjUubj9)}(h/Data that was previously attached to the folio.h]h/Data that was previously attached to the folio.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM^hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_detach_private (C function)c.folio_detach_privatehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void * folio_detach_private (struct folio *folio)h]h)}(h/void *folio_detach_private(struct folio *folio)h](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhMiubj2 )}(hj5 h]h*}(hjwhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjVhhhjhhMiubh)}(hfolio_detach_privateh]h)}(hfolio_detach_privateh]hfolio_detach_private}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjhhMiubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_detach_privateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjVhhhjhhMiubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjhhMiubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhjhhMihjOhhubj )}(hhh]j9)}(h!Detach private data from a folio.h]h!Detach private data from a folio.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMihj$hhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhMiubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMmhjCubj)}(hhh]j)}(h3``struct folio *folio`` Folio to detach data from. h](j)}(h``struct folio *folio``h]j?)}(hjhh]hstruct folio *folio}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMjhjbubj)}(hhh]j9)}(hFolio to detach data from.h]hFolio to detach data from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMjhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMjhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMlhjCubj9)}(hcRemoves the data that was previously attached to the folio and decrements the refcount on the page.h]hcRemoves the data that was previously attached to the folio and decrements the refcount on the page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMlhjCubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMohjCubj9)}(h$Data that was attached to the folio.h]h$Data that was attached to the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMohjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfgf_t (C type)c.fgf_thNtauh1hhjhhhNhNubh)}(hhh](h)}(hfgf_th]h)}(h type fgf_th](j!)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMtubh)}(hfgf_th]h)}(hj h]hfgf_t}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMtubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMthjhhubj )}(hhh]j9)}(h-Flags for getting folios from the page cache.h]h-Flags for getting folios from the page cache.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMtubeh}(h]h ](j-typeeh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhjhNhNubj9)}(h**Description**h]jz)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh](j+)}(h5``FGP_ACCESSED`` - The folio will be marked accessed.h]j9)}(hjh](j?)}(h``FGP_ACCESSED``h]h FGP_ACCESSED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh% - The folio will be marked accessed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h,``FGP_LOCK`` - The folio is returned locked.h]j9)}(hjh](j?)}(h ``FGP_LOCK``h]hFGP_LOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - The folio is returned locked.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(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]j9)}(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](j?)}(h ``FGP_CREAT``h]h FGP_CREAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(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]j9)}(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](j?)}(h``FGP_FOR_MMAP``h]h FGP_FOR_MMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h;``FGP_WRITE`` - The folio will be written to by the caller.h]j9)}(hj4h](j?)}(h ``FGP_WRITE``h]h FGP_WRITE}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubh. - The folio will be written to by the caller.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h0``FGP_NOFS`` - __GFP_FS will get cleared in gfp.h]j9)}(hjZh](j?)}(h ``FGP_NOFS``h]hFGP_NOFS}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh$ - __GFP_FS will get cleared in gfp.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjXubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h/``FGP_NOWAIT`` - Don't block on the folio lock.h]j9)}(hjh](j?)}(h``FGP_NOWAIT``h]h FGP_NOWAIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh# - Don’t block on the folio lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj~ubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(hE``FGP_STABLE`` - Wait for the folio to be stable (finished writeback)h]j9)}(hjh](j?)}(h``FGP_STABLE``h]h FGP_STABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh7 - Wait for the folio to be stable (finished writeback)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(h(``FGP_DONTCACHE`` - Uncached buffered IOh]j9)}(hjh](j?)}(h``FGP_DONTCACHE``h]h FGP_DONTCACHE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - Uncached buffered IO}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(hU``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation. h]j9)}(hS``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation.h](j?)}(h``FGP_WRITEBEGIN``h]hFGP_WRITEBEGIN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhA - The flags to use in a filesystem write_begin() implementation.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjhMhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfgf_set_order (C function)c.fgf_set_orderhNtauh1hhjhhhNhNubh)}(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]h)}(hfgf_th]hfgf_t}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]je)}jX fgf_set_ordersbc.fgf_set_orderasbuh1hhj2hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjZhMubh)}(h fgf_set_orderh]h)}(hjWh]h fgf_set_order}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhjZhMubj)}(h (size_t size)h]j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jUc.fgf_set_orderasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhj2hhhjZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhjZhMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhjZhMhj+hhubj )}(hhh]j9)}(h#Encode a length in the fgf_t flags.h]h#Encode a length in the fgf_t flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjZhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j)}(h;``size_t size`` The suggested size of the folio to create. h](j)}(h``size_t size``h]j?)}(hj"h]h size_t size}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j9)}(h*The suggested size of the folio to create.h]h*The suggested size of the folio to create.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_get_folio (C function)c.filemap_get_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(hOstruct folio * filemap_get_folio (struct address_space *mapping, pgoff_t index)h]h)}(hMstruct folio *filemap_get_folio(struct address_space *mapping, pgoff_t index)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfilemap_get_foliosbc.filemap_get_folioasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hfilemap_get_folioh]h)}(hjh]hfilemap_get_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]jc.filemap_get_folioasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.filemap_get_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hFind and get a folio.h]hFind and get a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh](j)}(h?``struct address_space *mapping`` The address_space to search. h](j)}(h!``struct address_space *mapping``h]j?)}(hj&h]hstruct address_space *mapping}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj ubj)}(hhh]j9)}(hThe address_space to search.h]hThe address_space to search.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j?)}(hj_h]h pgoff_t index}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjYubj)}(hhh]j9)}(hThe page index.h]hThe page index.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(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 }(hjhhhNhNubjz)}(h **mapping**h]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h **index**h]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhD. If a folio is present, it is returned with an increased refcount.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_lock_folio (C function)c.filemap_lock_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(hPstruct folio * filemap_lock_folio (struct address_space *mapping, pgoff_t index)h]h)}(hNstruct folio *filemap_lock_folio(struct address_space *mapping, pgoff_t index)h](j!)}(hj$h]hstruct}(hj*hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj&hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubh)}(hhh]h)}(hfolioh]hfolio}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjKmodnameN classnameNj\j_)}jb]je)}jXfilemap_lock_foliosbc.filemap_lock_folioasbuh1hhj&hhhj7hMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj&hhhj7hMubh)}(hfilemap_lock_folioh]h)}(hjgh]hfilemap_lock_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj7hMubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jec.filemap_lock_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jec.filemap_lock_folioasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj&hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(hFind and lock a folio.h]hFind and lock a folio.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh](j)}(h?``struct address_space *mapping`` The address_space to search. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j9)}(hThe address_space to search.h]hThe address_space to search.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j?)}(hjh]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j9)}(hThe page index.h]hThe page index.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(hLooks 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 }(hj8hhhNhNubjz)}(h **mapping**h]hmapping}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh & }(hj8hhhNhNubjz)}(h **index**h]hindex}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubhK. If a folio is present, it is returned locked with an increased refcount.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj9)}(h **Context**h]jz)}(hjmh]hContext}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjubj9)}(h May sleep.h]h May sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_grab_folio (C function)c.filemap_grab_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(hPstruct folio * filemap_grab_folio (struct address_space *mapping, pgoff_t index)h]h)}(hNstruct folio *filemap_grab_folio(struct address_space *mapping, pgoff_t index)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfilemap_grab_foliosbc.filemap_grab_folioasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hj'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hfilemap_grab_folioh]h)}(hjh]hfilemap_grab_folio}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjShhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]h)}(h address_spaceh]h address_space}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjsmodnameN classnameNj\j_)}jb]jc.filemap_grab_folioasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjOubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.filemap_grab_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h grab a folio from the page cacheh]h grab a folio from the page cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj8ubj)}(hhh](j)}(h>``struct address_space *mapping`` The address space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hj]h]hstruct address_space *mapping}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjWubj)}(hhh]j9)}(hThe address space to searchh]hThe address space to search}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h!``pgoff_t index`` The page index h](j)}(h``pgoff_t index``h]j?)}(hjh]h pgoff_t index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j9)}(hThe page indexh]hThe page index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj8ubj9)}(hLooks 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 }(hjhhhNhNubjz)}(h **mapping**h]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h **index**h]hindex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhf. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj8ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj8ubj9)}(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.}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_get_page (C function)c.find_get_pagehNtauh1hhjhhhNhNubh)}(hhh](h)}(hKstruct page * find_get_page (struct address_space *mapping, pgoff_t offset)h]h)}(hIstruct page *find_get_page(struct address_space *mapping, pgoff_t offset)h](j!)}(hj$h]hstruct}(hja hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj] hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM)ubj)}(h h]h }(hjo hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] hhhjn hM)ubh)}(hhh]h)}(hpageh]hpage}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj} ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jX find_get_pagesbc.find_get_pageasbuh1hhj] hhhjn hM)ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] hhhjn hM)ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj] hhhjn hM)ubh)}(h find_get_pageh]h)}(hj h]h find_get_page}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj] hhhjn hM)ubj)}(h/(struct address_space *mapping, pgoff_t offset)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]j c.find_get_pageasbuh1hhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj%!hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hmappingh]hmapping}(hj2!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(hpgoff_t offseth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjN!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK!ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjP!modnameN classnameNj\j_)}jb]j c.find_get_pageasbuh1hhjG!ubj)}(h h]h }(hjl!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!ubh)}(hoffseth]hoffset}(hjz!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG!ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubeh}(h]h ]h"]h$]h&]jj uh1jhj] hhhjn hM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjY hhhjn hM)ubah}(h]jT ah ](jjeh"]h$]h&]jj)jhuh1hhjn hM)hjV hhubj )}(hhh]j9)}(hfind and get a page referenceh]hfind and get a page reference}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM)hj!hhubah}(h]h ]h"]h$]h&]uh1jhjV hhhjn hM)ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!j4j!j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM-hj!ubj)}(hhh](j)}(h>``struct address_space *mapping`` the address_space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hj!h]hstruct address_space *mapping}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM*hj!ubj)}(hhh]j9)}(hthe address_space to searchh]hthe address_space to search}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hM*hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM*hj!ubj)}(h"``pgoff_t offset`` the page index h](j)}(h``pgoff_t offset``h]j?)}(hj"h]hpgoff_t offset}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM+hj"ubj)}(hhh]j9)}(hthe page indexh]hthe page index}(hj7"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3"hM+hj4"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj3"hM+hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjY"h]h Description}(hj["hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW"ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM-hj!ubj9)}(hLooks 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 }(hjo"hhhNhNubjz)}(h **mapping**h]hmapping}(hjw"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo"ubh & }(hjo"hhhNhNubjz)}(h **offset**h]hoffset}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo"ubhL. If there is a page cache page, it is returned with an increased refcount.}(hjo"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM-hj!ubj9)}(h Otherwise, ``NULL`` is returned.h](h Otherwise, }(hj"hhhNhNubj?)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubh is returned.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM0hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_lock_page (C function)c.find_lock_pagehNtauh1hhjhhhNhNubh)}(hhh](h)}(hKstruct page * find_lock_page (struct address_space *mapping, pgoff_t index)h]h)}(hIstruct page *find_lock_page(struct address_space *mapping, pgoff_t index)h](j!)}(hj$h]hstruct}(hj"hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj"hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM?ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM?ubh)}(hhh]h)}(hpageh]hpage}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]je)}jXfind_lock_pagesbc.find_lock_pageasbuh1hhj"hhhj"hM?ubj)}(h h]h }(hj##hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM?ubj2 )}(hj5 h]h*}(hj1#hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj"hhhj"hM?ubh)}(hfind_lock_pageh]h)}(hj #h]hfind_lock_page}(hjB#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj"hM?ubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj]#hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjY#ubj)}(h h]h }(hjj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY#ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj{#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}#modnameN classnameNj\j_)}jb]j#c.find_lock_pageasbuh1hhjY#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY#ubj2 )}(hj5 h]h*}(hj#hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjY#ubh)}(hmappingh]hmapping}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjU#ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]j#c.find_lock_pageasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hindexh]hindex}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjU#ubeh}(h]h ]h"]h$]h&]jj uh1jhj"hhhj"hM?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj"hM?ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1hhj"hM?hj"hhubj )}(hhh]j9)}(h%locate, pin and lock a pagecache pageh]h%locate, pin and lock a pagecache page}(hj&$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM?hj#$hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hM?ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>$j4j>$j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjH$h]h Parameters}(hjJ$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF$ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMChjB$ubj)}(hhh](j)}(h>``struct address_space *mapping`` the address_space to search h](j)}(h!``struct address_space *mapping``h]j?)}(hjg$h]hstruct address_space *mapping}(hji$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hje$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM@hja$ubj)}(hhh]j9)}(hthe address_space to searchh]hthe address_space to search}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|$hM@hj}$ubah}(h]h ]h"]h$]h&]uh1jhja$ubeh}(h]h ]h"]h$]h&]uh1jhj|$hM@hj^$ubj)}(h!``pgoff_t index`` the page index h](j)}(h``pgoff_t index``h]j?)}(hj$h]h pgoff_t index}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMAhj$ubj)}(hhh]j9)}(hthe page indexh]hthe page index}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMAhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMAhj^$ubeh}(h]h ]h"]h$]h&]uh1jhjB$ubj9)}(h**Description**h]jz)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMChjB$ubj9)}(hLooks 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$hhhNhNubjz)}(h **mapping**h]hmapping}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh & }(hj$hhhNhNubjz)}(h **index**h]hindex}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubhW. If there is a page cache page, it is returned locked and with an increased refcount.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMChjB$ubj9)}(h **Context**h]jz)}(hj&%h]hContext}(hj(%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$%ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGhjB$ubj9)}(h May sleep.h]h May sleep.}(hj<%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGhjB$ubj9)}(h **Return**h]jz)}(hjM%h]hReturn}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK%ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMIhjB$ubj9)}(hJA struct page or ``NULL`` if there is no page in the cache for this index.h](hA struct page or }(hjc%hhhNhNubj?)}(h``NULL``h]hNULL}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjc%ubh1 if there is no page in the cache for this index.}(hjc%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMHhjB$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ find_or_create_page (C function)c.find_or_create_pagehNtauh1hhjhhhNhNubh)}(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!)}(hj$h]hstruct}(hj%hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj%hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMRubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMRubh)}(hhh]h)}(hpageh]hpage}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj%modnameN classnameNj\j_)}jb]je)}jXfind_or_create_pagesbc.find_or_create_pageasbuh1hhj%hhhj%hMRubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMRubj2 )}(hj5 h]h*}(hj%hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj%hhhj%hMRubh)}(hfind_or_create_pageh]h)}(hj%h]hfind_or_create_page}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj%hMRubj)}(h>(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj&hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj&ubj)}(h h]h }(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj<&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj>&modnameN classnameNj\j_)}jb]j%c.find_or_create_pageasbuh1hhj&ubj)}(h h]h }(hjZ&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj2 )}(hj5 h]h*}(hjh&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj&ubh)}(hmappingh]hmapping}(hju&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj&ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj&modnameN classnameNj\j_)}jb]j%c.find_or_create_pageasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hindexh]hindex}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj&ubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj&modnameN classnameNj\j_)}jb]j%c.find_or_create_pageasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hgfp_maskh]hgfp_mask}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj&ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj%hMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj%hMRubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1hhj%hMRhj%hhubj )}(hhh]j9)}(hlocate or add a pagecache pageh]hlocate or add a pagecache page}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMRhj,'hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jG'j4jG'j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjQ'h]h Parameters}(hjS'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO'ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMVhjK'ubj)}(hhh](j)}(h;``struct address_space *mapping`` the page's address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjp'h]hstruct address_space *mapping}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjn'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMShjj'ubj)}(hhh]j9)}(hthe page's address_spaceh]hthe page’s address_space}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMShj'ubah}(h]h ]h"]h$]h&]uh1jhjj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMShjg'ubj)}(h4``pgoff_t index`` the page's index into the mapping h](j)}(h``pgoff_t index``h]j?)}(hj'h]h pgoff_t index}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMThj'ubj)}(hhh]j9)}(h!the page's index into the mappingh]h#the page’s index into the mapping}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMThj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMThjg'ubj)}(h(``gfp_t gfp_mask`` page allocation mode h](j)}(h``gfp_t gfp_mask``h]j?)}(hj'h]hgfp_t gfp_mask}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMUhj'ubj)}(hhh]j9)}(hpage allocation modeh]hpage allocation mode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMUhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMUhjg'ubeh}(h]h ]h"]h$]h&]uh1jhjK'ubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMWhjK'ubj9)}(hLooks 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 }(hj3(hhhNhNubjz)}(h **mapping**h]hmapping}(hj;(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3(ubh & }(hj3(hhhNhNubjz)}(h **offset**h]hoffset}(hjM(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3(ubhW. If there is a page cache page, it is returned locked and with an increased refcount.}(hj3(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMWhjK'ubj9)}(hIf 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 }(hjf(hhhNhNubjz)}(h **gfp_mask**h]hgfp_mask}(hjn(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf(ubhr and added to the page cache and the VM’s LRU list. The page is returned locked and with an increased refcount.}(hjf(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM[hjK'ubj9)}(h+On memory exhaustion, ``NULL`` is returned.h](hOn memory exhaustion, }(hj(hhhNhNubj?)}(h``NULL``h]hNULL}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubh is returned.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM_hjK'ubj9)}(hVfind_or_create_page() may sleep, even if **gfp_flags** specifies an atomic allocation!h](h)find_or_create_page() may sleep, even if }(hj(hhhNhNubjz)}(h **gfp_flags**h]h gfp_flags}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh specifies an atomic allocation!}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMahjK'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#grab_cache_page_nowait (C function)c.grab_cache_page_nowaithNtauh1hhjhhhNhNubh)}(hhh](h)}(hSstruct page * grab_cache_page_nowait (struct address_space *mapping, pgoff_t index)h]h)}(hQstruct page *grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)h](j!)}(hj$h]hstruct}(hj(hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj(hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMmubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMmubh)}(hhh]h)}(hpageh]hpage}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj )modnameN classnameNj\j_)}jb]je)}jXgrab_cache_page_nowaitsbc.grab_cache_page_nowaitasbuh1hhj(hhhj(hMmubj)}(h h]h }(hj))hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMmubj2 )}(hj5 h]h*}(hj7)hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj(hhhj(hMmubh)}(hgrab_cache_page_nowaith]h)}(hj&)h]hgrab_cache_page_nowait}(hjH)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj(hMmubj)}(h.(struct address_space *mapping, pgoff_t index)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjc)hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_)ubj)}(h h]h }(hjp)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_)ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj)modnameN classnameNj\j_)}jb]j$)c.grab_cache_page_nowaitasbuh1hhj_)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_)ubj2 )}(hj5 h]h*}(hj)hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_)ubh)}(hmappingh]hmapping}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[)ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj)modnameN classnameNj\j_)}jb]j$)c.grab_cache_page_nowaitasbuh1hhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hindexh]hindex}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[)ubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj(hMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj(hMmubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhj(hMmhj(hhubj )}(hhh]j9)}(h1returns locked page at given index in given cacheh]h1returns locked page at given index in given cache}(hj,*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMmhj)*hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMmubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jD*j4jD*j5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct address_space *mapping`` target address_space ``pgoff_t index`` the page index **Description** Same as grab_cache_page(), but do not wait if the page is unavailable. 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](j9)}(h**Parameters**h]jz)}(hjN*h]h Parameters}(hjP*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL*ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMqhjH*ubj)}(hhh](j)}(h7``struct address_space *mapping`` target address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjm*h]hstruct address_space *mapping}(hjo*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjk*ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMnhjg*ubj)}(hhh]j9)}(htarget address_spaceh]htarget address_space}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMnhj*ubah}(h]h ]h"]h$]h&]uh1jhjg*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMnhjd*ubj)}(h!``pgoff_t index`` the page index h](j)}(h``pgoff_t index``h]j?)}(hj*h]h pgoff_t index}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMohj*ubj)}(hhh]j9)}(hthe page indexh]hthe page index}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMohj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMohjd*ubeh}(h]h ]h"]h$]h&]uh1jhjH*ubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMqhjH*ubj9)}(hX Same as grab_cache_page(), but do not wait if the page is unavailable. 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]hX Same as grab_cache_page(), but do not wait if the page is unavailable. 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*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMqhjH*ubj9)}(huClear __GFP_FS when allocating the page to avoid recursion into the fs and deadlock against the caller's locked page.h]hwClear __GFP_FS when allocating the page to avoid recursion into the fs and deadlock against the caller’s locked page.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMvhjH*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_next_index (C function)c.folio_next_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.pgoff_t folio_next_index (struct folio *folio)h]h)}(h-pgoff_t folio_next_index(struct folio *folio)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj8+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:+modnameN classnameNj\j_)}jb]je)}jXfolio_next_indexsbc.folio_next_indexasbuh1hhj1+hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjZ+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1+hhhjY+hMubh)}(hfolio_next_indexh]h)}(hjV+h]hfolio_next_index}(hjl+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1+hhhjY+hMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj+hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]h)}(hfolioh]hfolio}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]jT+c.folio_next_indexasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj+ubh)}(hfolioh]hfolio}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj+ubah}(h]h ]h"]h$]h&]jj uh1jhj1+hhhjY+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-+hhhjY+hMubah}(h]j(+ah ](jjeh"]h$]h&]jj)jhuh1hhjY+hMhj*+hhubj )}(hhh]j9)}(h Get the index of the next folio.h]h Get the index of the next folio.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj*+hhhjY+hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j ,j4j ,j5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct folio *folio`` The current folio. **Return** The index of the folio which follows this folio in the file.h](j9)}(h**Parameters**h]jz)}(hj*,h]h Parameters}(hj,,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(,ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj$,ubj)}(hhh]j)}(h+``struct folio *folio`` The current folio. h](j)}(h``struct folio *folio``h]j?)}(hjI,h]hstruct folio *folio}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjG,ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjC,ubj)}(hhh]j9)}(hThe current folio.h]hThe current folio.}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^,hMhj_,ubah}(h]h ]h"]h$]h&]uh1jhjC,ubeh}(h]h ]h"]h$]h&]uh1jhj^,hMhj@,ubah}(h]h ]h"]h$]h&]uh1jhj$,ubj9)}(h **Return**h]jz)}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj$,ubj9)}(h ah"]h$]h&]uh1j1 hj,hhhj,hMubh)}(hfolio_file_pageh]h)}(hj-h]hfolio_file_page}(hj(-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj,hMubj)}(h$(struct folio *folio, pgoff_t index)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjC-hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj?-ubj)}(h h]h }(hjP-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?-ubh)}(hhh]h)}(hfolioh]hfolio}(hja-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^-ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjc-modnameN classnameNj\j_)}jb]j-c.folio_file_pageasbuh1hhj?-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?-ubj2 )}(hj5 h]h*}(hj-hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?-ubh)}(hfolioh]hfolio}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?-ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj;-ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj-modnameN classnameNj\j_)}jb]j-c.folio_file_pageasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hindexh]hindex}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj;-ubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj,hhhj,hMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhj,hMhj,hhubj )}(hhh]j9)}(h The page for a particular index.h]h The page for a particular index.}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj .hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$.j4j$.j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj..h]h Parameters}(hj0.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,.ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj(.ubj)}(hhh](j)}(h=``struct folio *folio`` The folio which contains this index. h](j)}(h``struct folio *folio``h]j?)}(hjM.h]hstruct folio *folio}(hjO.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjK.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjG.ubj)}(hhh]j9)}(h$The folio which contains this index.h]h$The folio which contains this index.}(hjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjb.hMhjc.ubah}(h]h ]h"]h$]h&]uh1jhjG.ubeh}(h]h ]h"]h$]h&]uh1jhjb.hMhjD.ubj)}(h0``pgoff_t index`` The index we want to look up. h](j)}(h``pgoff_t index``h]j?)}(hj.h]h pgoff_t index}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj.ubj)}(hhh]j9)}(hThe index we want to look up.h]hThe index we want to look up.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjD.ubeh}(h]h ]h"]h$]h&]uh1jhj(.ubj9)}(h**Description**h]jz)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj(.ubj9)}(hySometimes after looking up a folio in the page cache, we need to obtain the specific page for an index (eg a page fault).h]hySometimes after looking up a folio in the page cache, we need to obtain the specific page for an index (eg a page fault).}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj(.ubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj(.ubj9)}(h1The page containing the file data for this index.h]h1The page containing the file data for this index.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj(.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_contains (C function)c.folio_containshNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool folio_contains (struct folio *folio, pgoff_t index)h]h)}(h7bool folio_contains(struct folio *folio, pgoff_t index)h](j)}(hj)h]hbool}(hj-/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj;/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)/hhhj:/hMubh)}(hfolio_containsh]h)}(hfolio_containsh]hfolio_contains}(hjM/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)/hhhj:/hMubj)}(h$(struct folio *folio, pgoff_t index)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hji/hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hje/ubj)}(h h]h }(hjv/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje/ubh)}(hhh]h)}(hfolioh]hfolio}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/modnameN classnameNj\j_)}jb]je)}jXjO/sbc.folio_containsasbuh1hhje/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje/ubj2 )}(hj5 h]h*}(hj/hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hje/ubh)}(hfolioh]hfolio}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje/ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhja/ubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/modnameN classnameNj\j_)}jb]j/c.folio_containsasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hindexh]hindex}(hj 0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhja/ubeh}(h]h ]h"]h$]h&]jj uh1jhj)/hhhj:/hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%/hhhj:/hMubah}(h]j /ah ](jjeh"]h$]h&]jj)jhuh1hhj:/hMhj"/hhubj )}(hhh]j9)}(h#Does this folio contain this index?h]h#Does this folio contain this index?}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj10hhubah}(h]h ]h"]h$]h&]uh1jhj"/hhhj:/hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jL0j4jL0j5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hjV0h]h Parameters}(hjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT0ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP0ubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hju0h]hstruct folio *folio}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjs0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjo0ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjo0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjl0ubj)}(h2``pgoff_t index`` The page index within the file. h](j)}(h``pgoff_t index``h]j?)}(hj0h]h pgoff_t index}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0ubj)}(hhh]j9)}(hThe page index within the file.h]hThe page index within the file.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjl0ubeh}(h]h ]h"]h$]h&]uh1jhjP0ubj9)}(h **Context**h]jz)}(hj0h]hContext}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP0ubj9)}(hiThe caller should have the folio locked and ensure e.g., shmem did not move this folio to the swap cache.h]hiThe caller should have the folio locked and ensure e.g., shmem did not move this folio to the swap cache.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP0ubj9)}(h **Return**h]jz)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP0ubj9)}(htrue or false.h]htrue or false.}(hj&1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP0ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_pgoff (C function) c.page_pgoffhNtauh1hhjhhhNhNubh)}(hhh](h)}(hGpgoff_t page_pgoff (const struct folio *folio, const struct page *page)h]h)}(hFpgoff_t page_pgoff(const struct folio *folio, const struct page *page)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjX1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjU1ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjZ1modnameN classnameNj\j_)}jb]je)}jX page_pgoffsb c.page_pgoffasbuh1hhjQ1hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjz1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ1hhhjy1hMubh)}(h page_pgoffh]h)}(hjv1h]h page_pgoff}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQ1hhhjy1hMubj)}(h4(const struct folio *folio, const struct page *page)h](j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj1hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj!)}(hj$h]hstruct}(hj1hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]h)}(hfolioh]hfolio}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj1modnameN classnameNj\j_)}jb]jt1 c.page_pgoffasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj2 )}(hj5 h]h*}(hj 2hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj1ubh)}(hfolioh]hfolio}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1ubj)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hj22hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj.2ubj)}(h h]h }(hj?2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.2ubj!)}(hj$h]hstruct}(hjM2hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj.2ubj)}(h h]h }(hjZ2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.2ubh)}(hhh]h)}(hpageh]hpage}(hjk2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjm2modnameN classnameNj\j_)}jb]jt1 c.page_pgoffasbuh1hhj.2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.2ubj2 )}(hj5 h]h*}(hj2hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj.2ubh)}(hpageh]hpage}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.2ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1ubeh}(h]h ]h"]h$]h&]jj uh1jhjQ1hhhjy1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjM1hhhjy1hMubah}(h]jH1ah ](jjeh"]h$]h&]jj)jhuh1hhjy1hMhjJ1hhubj )}(hhh]j9)}(h/Calculate the logical page offset of this page.h]h/Calculate the logical page offset of this page.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjJ1hhhjy1hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj)}(hhh](j)}(h>``const struct folio *folio`` The folio containing this page. h](j)}(h``const struct folio *folio``h]j?)}(hj3h]hconst struct folio *folio}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj 3ubj)}(hhh]j9)}(hThe folio containing this page.h]hThe folio containing this page.}(hj(3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$3hMhj%3ubah}(h]h ]h"]h$]h&]uh1jhj 3ubeh}(h]h ]h"]h$]h&]uh1jhj$3hMhj3ubj)}(hB``const struct page *page`` The page which we need the offset of. h](j)}(h``const struct page *page``h]j?)}(hjH3h]hconst struct page *page}(hjJ3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjF3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjB3ubj)}(hhh]j9)}(h%The page which we need the offset of.h]h%The page which we need the offset of.}(hja3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]3hMhj^3ubah}(h]h ]h"]h$]h&]uh1jhjB3ubeh}(h]h ]h"]h$]h&]uh1jhj]3hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj9)}(h**Description**h]jz)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj9)}(hFor 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]hFor 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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj9)}(h **Context**h]jz)}(hj3h]hContext}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj9)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj9)}(h **Return**h]jz)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj9)}(h!The offset in units of PAGE_SIZE.h]h!The offset in units of PAGE_SIZE.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_pos (C function) c.folio_poshNtauh1hhjhhhNhNubh)}(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]h)}(hloff_th]hloff_t}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj4modnameN classnameNj\j_)}jb]je)}jX folio_possb c.folio_posasbuh1hhj4hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj;4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj:4hMubh)}(h folio_posh]h)}(hj74h]h folio_pos}(hjM4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhj:4hMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjh4hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjd4ubj)}(h h]h }(hju4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd4ubj!)}(hj$h]hstruct}(hj4hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjd4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd4ubh)}(hhh]h)}(hfolioh]hfolio}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj4modnameN classnameNj\j_)}jb]j54 c.folio_posasbuh1hhjd4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd4ubj2 )}(hj5 h]h*}(hj4hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjd4ubh)}(hfolioh]hfolio}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjd4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj`4ubah}(h]h ]h"]h$]h&]jj uh1jhj4hhhj:4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj:4hMubah}(h]j 4ah ](jjeh"]h$]h&]jj)jhuh1hhj:4hMhj 4hhubj )}(hhh]j9)}(h4Returns the byte position of this folio in its file.h]h4Returns the byte position of this folio in its file.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhj 4hhhj:4hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhjhNhNubjp)}(h:**Parameters** ``const struct folio *folio`` The folio.h](j9)}(h**Parameters**h]jz)}(hj&5h]h Parameters}(hj(5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$5ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj 5ubj)}(hhh]j)}(h(``const struct folio *folio`` The folio.h](j)}(h``const struct folio *folio``h]j?)}(hjE5h]hconst struct folio *folio}(hjG5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj?5ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj^5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj[5ubah}(h]h ]h"]h$]h&]uh1jhj?5ubeh}(h]h ]h"]h$]h&]uh1jhjZ5hMhj<5ubah}(h]h ]h"]h$]h&]uh1jhj 5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_trylock (C function)c.folio_trylockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(bool folio_trylock (struct folio *folio)h]h)}(h'bool folio_trylock(struct folio *folio)h](j)}(hj)h]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM(ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hM(ubh)}(h folio_trylockh]h)}(h folio_trylockh]h folio_trylock}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj5hM(ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj5hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]h)}(hfolioh]hfolio}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj5modnameN classnameNj\j_)}jb]je)}jXj5sbc.folio_trylockasbuh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj2 )}(hj5 h]h*}(hj'6hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj5ubh)}(hfolioh]hfolio}(hj46hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj5ubah}(h]h ]h"]h$]h&]jj uh1jhj5hhhj5hM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj5hM(ubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhj5hM(hj5hhubj )}(hhh]j9)}(hAttempt to lock a folio.h]hAttempt to lock a folio.}(hj^6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM(hj[6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jv6j4jv6j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~6ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM,hjz6ubj)}(hhh]j)}(h6``struct folio *folio`` The folio to attempt to lock. h](j)}(h``struct folio *folio``h]j?)}(hj6h]hstruct folio *folio}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM)hj6ubj)}(hhh]j9)}(hThe folio to attempt to lock.h]hThe folio to attempt to lock.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hM)hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM)hj6ubah}(h]h ]h"]h$]h&]uh1jhjz6ubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM+hjz6ubj9)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM+hjz6ubj9)}(h **Context**h]jz)}(hj7h]hContext}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM0hjz6ubj9)}(h Any context.h]h Any context.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM0hjz6ubj9)}(h **Return**h]jz)}(hj(7h]hReturn}(hj*7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&7ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM2hjz6ubj9)}(h+Whether the lock was successfully acquired.h]h+Whether the lock was successfully acquired.}(hj>7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM1hjz6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_lock (C function) c.folio_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void folio_lock (struct folio *folio)h]h)}(h$void folio_lock(struct folio *folio)h](j)}(hvoidh]hvoid}(hjm7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji7hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMAubj)}(h h]h }(hj|7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji7hhhj{7hMAubh)}(h folio_lockh]h)}(h folio_lockh]h folio_lock}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhji7hhhj{7hMAubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj7hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(hfolioh]hfolio}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]je)}jXj7sb c.folio_lockasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2 )}(hj5 h]h*}(hj7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7ubh)}(hfolioh]hfolio}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubah}(h]h ]h"]h$]h&]jj uh1jhji7hhhj{7hMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhje7hhhj{7hMAubah}(h]j`7ah ](jjeh"]h$]h&]jj)jhuh1hhj{7hMAhjb7hhubj )}(hhh]j9)}(hLock this folio.h]hLock this folio.}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMAhj*8hhubah}(h]h ]h"]h$]h&]uh1jhjb7hhhj{7hMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jE8j4jE8j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjO8h]h Parameters}(hjQ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM8ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMEhjI8ubj)}(hhh]j)}(h+``struct folio *folio`` The folio to lock. h](j)}(h``struct folio *folio``h]j?)}(hjn8h]hstruct folio *folio}(hjp8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjl8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMBhjh8ubj)}(hhh]j9)}(hThe folio to lock.h]hThe folio to lock.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hMBhj8ubah}(h]h ]h"]h$]h&]uh1jhjh8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMBhje8ubah}(h]h ]h"]h$]h&]uh1jhjI8ubj9)}(h**Description**h]jz)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMDhjI8ubj9)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMDhjI8ubj9)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhjI8ubj9)}(h **Context**h]jz)}(hj8h]hContext}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMPhjI8ubj9)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMPhjI8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌlock_page (C function) c.lock_pagehNtauh1hhjhhhNhNubh)}(hhh](h)}(h"void lock_page (struct page *page)h]h)}(h!void lock_page(struct page *page)h](j)}(hvoidh]hvoid}(hj$9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM^ubj)}(h h]h }(hj39hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9hhhj29hM^ubh)}(h lock_pageh]h)}(h lock_pageh]h lock_page}(hjE9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj 9hhhj29hM^ubj)}(h(struct page *page)h]j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hja9hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj]9ubj)}(h h]h }(hjn9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]9ubh)}(hhh]h)}(hpageh]hpage}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|9ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]je)}jXjG9sb c.lock_pageasbuh1hhj]9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]9ubj2 )}(hj5 h]h*}(hj9hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj]9ubh)}(hpageh]hpage}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]9ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjY9ubah}(h]h ]h"]h$]h&]jj uh1jhj 9hhhj29hM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj29hM^ubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1hhj29hM^hj9hhubj )}(hhh]j9)}(h$Lock the folio containing this page.h]h$Lock the folio containing this page.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM^hj9hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj29hM^ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMbhj:ubj)}(hhh]j)}(h(``struct page *page`` The page to lock. h](j)}(h``struct page *page``h]j?)}(hj%:h]hstruct page *page}(hj':hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM_hj:ubj)}(hhh]j9)}(hThe page to lock.h]hThe page to lock.}(hj>:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj::hM_hj;:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj::hM_hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h**Description**h]jz)}(hj`:h]h Description}(hjb:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^:ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMahj:ubj9)}(hSee 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]hSee folio_lock() for a description of what the lock protects. This is a legacy function and new code should probably use folio_lock() instead.}(hjv:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMahj:ubj9)}(h **Context**h]jz)}(hj:h]hContext}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMehj:ubj9)}(hjMay sleep. Pages in the same folio share a lock, so do not attempt to lock two pages which share a folio.h]hjMay sleep. Pages in the same folio share a lock, so do not attempt to lock two pages which share a folio.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMehj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_lock_killable (C function)c.folio_lock_killablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int folio_lock_killable (struct folio *folio)h]h)}(h,int folio_lock_killable(struct folio *folio)h](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMsubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMsubh)}(hfolio_lock_killableh]h)}(hfolio_lock_killableh]hfolio_lock_killable}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj:hMsubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj ;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(hfolioh]hfolio}(hj';hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$;ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj);modnameN classnameNj\j_)}jb]je)}jXj:sbc.folio_lock_killableasbuh1hhj;ubj)}(h h]h }(hjG;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hjU;hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hfolioh]hfolio}(hjb;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj;ubah}(h]h ]h"]h$]h&]jj uh1jhj:hhhj:hMsubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj:hMsubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhj:hMshj:hhubj )}(hhh]j9)}(h1Lock this folio, interruptible by a fatal signal.h]h1Lock this folio, interruptible by a fatal signal.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMshj;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hMsubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMwhj;ubj)}(hhh]j)}(h+``struct folio *folio`` The folio to lock. h](j)}(h``struct folio *folio``h]j?)}(hj;h]hstruct folio *folio}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMthj;ubj)}(hhh]j9)}(hThe folio to lock.h]hThe folio to lock.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMthj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMthj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hj<h]h Description}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMvhj;ubj9)}(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<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMvhj;ubj9)}(h **Context**h]jz)}(hj/<h]hContext}(hj1<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMyhj;ubj9)}(hMay sleep; see folio_lock().h]hMay sleep; see folio_lock().}(hjE<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMyhj;ubj9)}(h **Return**h]jz)}(hjV<h]hReturn}(hjX<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM{hj;ubj9)}(hB0 if the lock was acquired; -EINTR if a fatal signal was received.h]hB0 if the lock was acquired; -EINTR if a fatal signal was received.}(hjl<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMzhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*filemap_range_needs_writeback (C function)c.filemap_range_needs_writebackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hfbool filemap_range_needs_writeback (struct address_space *mapping, loff_t start_byte, loff_t end_byte)h]h)}(hebool filemap_range_needs_writeback(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hj)h]hbool}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hMubh)}(hfilemap_range_needs_writebackh]h)}(hfilemap_range_needs_writebackh]hfilemap_range_needs_writeback}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhj<hMubj)}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj<hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]h)}(h address_spaceh]h address_space}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]je)}jXj<sbc.filemap_range_needs_writebackasbuh1hhj<ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj2 )}(hj5 h]h*}(hj#=hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj<ubh)}(hmappingh]hmapping}(hj0=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubj)}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hjL=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI=ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjN=modnameN classnameNj\j_)}jb]j=c.filemap_range_needs_writebackasbuh1hhjE=ubj)}(h h]h }(hjj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE=ubh)}(h start_byteh]h start_byte}(hjx=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubj)}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj=modnameN classnameNj\j_)}jb]j=c.filemap_range_needs_writebackasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hend_byteh]hend_byte}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj<hMubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1hhj<hMhj<hhubj )}(hhh]j9)}(h*check if range potentially needs writebackh]h*check if range potentially needs writeback}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj >h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj >ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubj)}(hhh](j)}(hF``struct address_space *mapping`` address space within which to check h](j)}(h!``struct address_space *mapping``h]j?)}(hj+>h]hstruct address_space *mapping}(hj->hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%>ubj)}(hhh]j9)}(h#address space within which to checkh]h#address space within which to check}(hjD>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@>hMhjA>ubah}(h]h ]h"]h$]h&]uh1jhj%>ubeh}(h]h ]h"]h$]h&]uh1jhj@>hMhj">ubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j?)}(hjd>h]hloff_t start_byte}(hjf>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjb>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^>ubj)}(hhh]j9)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hj}>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjy>hMhjz>ubah}(h]h ]h"]h$]h&]uh1jhj^>ubeh}(h]h ]h"]h$]h&]uh1jhjy>hMhj">ubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j?)}(hj>h]hloff_t end_byte}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubj)}(hhh]j9)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj">ubeh}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubj9)}(hFind 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]hFind at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback. Used by O_DIRECT read/write with IOCB_NOWAIT, to see if the caller needs to do filemap_write_and_wait_range() before proceeding.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubj9)}(h **Return**h]jz)}(hj>h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubj9)}(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](j?)}(h``true``h]htrue}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubhg if the caller should do filemap_write_and_wait_range() before doing O_DIRECT to a page in this range, }(hj?hhhNhNubj?)}(h ``false``h]hfalse}(hj+?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubh otherwise.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_control (C struct)c.readahead_controlhNtauh1hhjhhhNhNubh)}(hhh](h)}(hreadahead_controlh]h)}(hstruct readahead_controlh](j!)}(hj$h]hstruct}(hjd?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`?hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjr?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`?hhhjq?hMubh)}(hreadahead_controlh]h)}(hj^?h]hreadahead_control}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`?hhhjq?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\?hhhjq?hMubah}(h]jW?ah ](jjeh"]h$]h&]jj)jhuh1hhjq?hMhjY?hhubj )}(hhh]j9)}(hDescribes a readahead request.h]hDescribes a readahead request.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjY?hhhjq?hMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh:}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj?ubj)}(hustruct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; };h]hustruct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; };}hj?sbah}(h]h ]h"]h$]h&]jj uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj?ubj9)}(h **Members**h]jz)}(hj?h]hMembers}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj?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]j?)}(hj@h]hfile}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj @ubj)}(hhh]j9)}(hxThe file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem.h]hxThe file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem.}(hj,@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj)@ubah}(h]h ]h"]h$]h&]uh1jhj @ubeh}(h]h ]h"]h$]h&]uh1jhj(@hMhj @ubj)}(h.``mapping`` Readahead this filesystem object. h](j)}(h ``mapping``h]j?)}(hjM@h]hmapping}(hjO@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjK@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjG@ubj)}(hhh]j9)}(h!Readahead this filesystem object.h]h!Readahead this filesystem object.}(hjf@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjb@hMhjc@ubah}(h]h ]h"]h$]h&]uh1jhjG@ubeh}(h]h ]h"]h$]h&]uh1jhjb@hMhj @ubj)}(h*``ra`` File readahead state. May be NULL.h](j)}(h``ra``h]j?)}(hj@h]hra}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj@ubj)}(hhh]j9)}(h#File readahead state. May be NULL.h]h#File readahead state. May be NULL.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj @ubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubj9)}(h**Description**h]jz)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj9)}(hA 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]hA 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@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj9)}(h\Most of the fields in this struct are private and should be accessed by the functions below.h]h\Most of the fields in this struct are private and should be accessed by the functions below.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&page_cache_sync_readahead (C function)c.page_cache_sync_readaheadhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid 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)}(hvoid 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)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM4ubj)}(h h]h }(hj%AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhj$AhM4ubh)}(hpage_cache_sync_readaheadh]h)}(hpage_cache_sync_readaheadh]hpage_cache_sync_readahead}(hj7AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3Aubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhj$AhM4ubj)}(ht(struct address_space *mapping, struct file_ra_state *ra, struct file *file, pgoff_t index, unsigned long req_count)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjSAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjOAubj)}(h h]h }(hj`AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOAubh)}(hhh]h)}(h address_spaceh]h address_space}(hjqAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnAubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjsAmodnameN classnameNj\j_)}jb]je)}jXj9Asbc.page_cache_sync_readaheadasbuh1hhjOAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOAubj2 )}(hj5 h]h*}(hjAhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjOAubh)}(hmappingh]hmapping}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKAubj)}(hstruct file_ra_state *rah](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(h file_ra_stateh]h file_ra_state}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjAmodnameN classnameNj\j_)}jb]jAc.page_cache_sync_readaheadasbuh1hhjAubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjAubh)}(hrah]hra}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKAubj)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hj5BhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1Bubj)}(h h]h }(hjBBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Bubh)}(hhh]h)}(hfileh]hfile}(hjSBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUBmodnameN classnameNj\j_)}jb]jAc.page_cache_sync_readaheadasbuh1hhj1Bubj)}(h h]h }(hjqBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Bubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj1Bubh)}(hfileh]hfile}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1Bubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKAubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjBmodnameN classnameNj\j_)}jb]jAc.page_cache_sync_readaheadasbuh1hhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hindexh]hindex}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKAubj)}(hunsigned long req_counth](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hlongh]hlong}(hj ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(h req_counth]h req_count}(hj%ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKAubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhj$AhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhj$AhM4ubah}(h]j Aah ](jjeh"]h$]h&]jj)jhuh1hhj$AhM4hj Ahhubj )}(hhh]j9)}(hgeneric file readaheadh]hgeneric file readahead}(hjOChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM4hjLChhubah}(h]h ]h"]h$]h&]uh1jhj Ahhhj$AhM4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgCj4jgCj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjqCh]h Parameters}(hjsChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoCubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM8hjkCubj)}(hhh](j)}(hZ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors h](j)}(h!``struct address_space *mapping``h]j?)}(hjCh]hstruct address_space *mapping}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM5hjCubj)}(hhh]j9)}(h7address_space which holds the pagecache and I/O vectorsh]h7address_space which holds the pagecache and I/O vectors}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM5hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM5hjCubj)}(hK``struct file_ra_state *ra`` file_ra_state which holds the readahead state h](j)}(h``struct file_ra_state *ra``h]j?)}(hjCh]hstruct file_ra_state *ra}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM6hjCubj)}(hhh]j9)}(h-file_ra_state which holds the readahead stateh]h-file_ra_state which holds the readahead state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM6hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM6hjCubj)}(hA``struct file *file`` Used by the filesystem for authentication. h](j)}(h``struct file *file``h]j?)}(hjDh]hstruct file *file}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM7hjCubj)}(hhh]j9)}(h*Used by the filesystem for authentication.h]h*Used by the filesystem for authentication.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhM7hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM7hjCubj)}(h2``pgoff_t index`` Index of first page to be read. h](j)}(h``pgoff_t index``h]j?)}(hj;Dh]h pgoff_t index}(hj=DhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9Dubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM8hj5Dubj)}(hhh]j9)}(hIndex of first page to be read.h]hIndex of first page to be read.}(hjTDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPDhM8hjQDubah}(h]h ]h"]h$]h&]uh1jhj5Dubeh}(h]h ]h"]h$]h&]uh1jhjPDhM8hjCubj)}(hL``unsigned long req_count`` Total number of pages being read by the caller. h](j)}(h``unsigned long req_count``h]j?)}(hjtDh]hunsigned long req_count}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM9hjnDubj)}(hhh]j9)}(h/Total number of pages being read by the caller.h]h/Total number of pages being read by the caller.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhM9hjDubah}(h]h ]h"]h$]h&]uh1jhjnDubeh}(h]h ]h"]h$]h&]uh1jhjDhM9hjCubeh}(h]h ]h"]h$]h&]uh1jhjkCubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM;hjkCubj9)}(hpage_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]hpage_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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM;hjkCubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'page_cache_async_readahead (C function)c.page_cache_async_readaheadhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid 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)}(hvoid 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)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjEhMJubh)}(hpage_cache_async_readaheadh]h)}(hpage_cache_async_readaheadh]hpage_cache_async_readahead}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjEhMJubj)}(hz(struct address_space *mapping, struct file_ra_state *ra, struct file *file, struct folio *folio, unsigned long req_count)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj1EhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj-Eubj)}(h h]h }(hj>EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Eubh)}(hhh]h)}(h address_spaceh]h address_space}(hjOEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLEubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjQEmodnameN classnameNj\j_)}jb]je)}jXjEsbc.page_cache_async_readaheadasbuh1hhj-Eubj)}(h h]h }(hjoEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Eubj2 )}(hj5 h]h*}(hj}EhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj-Eubh)}(hmappingh]hmapping}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Eubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)Eubj)}(hstruct file_ra_state *rah](j!)}(hj$h]hstruct}(hjEhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]h)}(h file_ra_stateh]h file_ra_state}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjEmodnameN classnameNj\j_)}jb]jkEc.page_cache_async_readaheadasbuh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj2 )}(hj5 h]h*}(hjEhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjEubh)}(hrah]hra}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)Eubj)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hjFhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjFubj)}(h h]h }(hj FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]h)}(hfileh]hfile}(hj1FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.Fubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj3FmodnameN classnameNj\j_)}jb]jkEc.page_cache_async_readaheadasbuh1hhjFubj)}(h h]h }(hjOFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj2 )}(hj5 h]h*}(hj]FhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjFubh)}(hfileh]hfile}(hjjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)Eubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjFhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]h)}(hfolioh]hfolio}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjFmodnameN classnameNj\j_)}jb]jkEc.page_cache_async_readaheadasbuh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj2 )}(hj5 h]h*}(hjFhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjFubh)}(hfolioh]hfolio}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)Eubj)}(hunsigned long req_counth](j)}(hunsignedh]hunsigned}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(h req_counth]h req_count}(hj+GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)Eubeh}(h]h ]h"]h$]h&]jj uh1jhjDhhhjEhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjEhMJubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhjEhMJhjDhhubj )}(hhh]j9)}(hfile readahead for marked pagesh]hfile readahead for marked pages}(hjUGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhjRGhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjEhMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmGj4jmGj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjwGh]h Parameters}(hjyGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuGubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMNhjqGubj)}(hhh](j)}(hZ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors h](j)}(h!``struct address_space *mapping``h]j?)}(hjGh]hstruct address_space *mapping}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMKhjGubj)}(hhh]j9)}(h7address_space which holds the pagecache and I/O vectorsh]h7address_space which holds the pagecache and I/O vectors}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMKhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMKhjGubj)}(hK``struct file_ra_state *ra`` file_ra_state which holds the readahead state h](j)}(h``struct file_ra_state *ra``h]j?)}(hjGh]hstruct file_ra_state *ra}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMLhjGubj)}(hhh]j9)}(h-file_ra_state which holds the readahead stateh]h-file_ra_state which holds the readahead state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMLhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMLhjGubj)}(hA``struct file *file`` Used by the filesystem for authentication. h](j)}(h``struct file *file``h]j?)}(hjHh]hstruct file *file}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMMhjHubj)}(hhh]j9)}(h*Used by the filesystem for authentication.h]h*Used by the filesystem for authentication.}(hj!HhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMMhjGubj)}(hF``struct folio *folio`` The folio which triggered the readahead call. h](j)}(h``struct folio *folio``h]j?)}(hjAHh]hstruct folio *folio}(hjCHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?Hubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMNhj;Hubj)}(hhh]j9)}(h-The folio which triggered the readahead call.h]h-The folio which triggered the readahead call.}(hjZHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVHhMNhjWHubah}(h]h ]h"]h$]h&]uh1jhj;Hubeh}(h]h ]h"]h$]h&]uh1jhjVHhMNhjGubj)}(hL``unsigned long req_count`` Total number of pages being read by the caller. h](j)}(h``unsigned long req_count``h]j?)}(hjzHh]hunsigned long req_count}(hj|HhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMOhjtHubj)}(hhh]j9)}(h/Total number of pages being read by the caller.h]h/Total number of pages being read by the caller.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMOhjHubah}(h]h ]h"]h$]h&]uh1jhjtHubeh}(h]h ]h"]h$]h&]uh1jhjHhMOhjGubeh}(h]h ]h"]h$]h&]uh1jhjqGubj9)}(h**Description**h]jz)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMQhjqGubj9)}(hpage_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]hpage_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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMQhjqGubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_folio (C function)c.readahead_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(h@struct folio * readahead_folio (struct readahead_control *ractl)h]h)}(h>struct folio *readahead_folio(struct readahead_control *ractl)h](j!)}(hj$h]hstruct}(hjHhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjHhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMtubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjIhMtubh)}(hhh]h)}(hfolioh]hfolio}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjImodnameN classnameNj\j_)}jb]je)}jXreadahead_foliosbc.readahead_folioasbuh1hhjHhhhjIhMtubj)}(h h]h }(hj:IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjIhMtubj2 )}(hj5 h]h*}(hjHIhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHhhhjIhMtubh)}(hreadahead_folioh]h)}(hj7Ih]hreadahead_folio}(hjYIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjIhMtubj)}(h!(struct readahead_control *ractl)h]j)}(hstruct readahead_control *ractlh](j!)}(hj$h]hstruct}(hjtIhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjpIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpIubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjImodnameN classnameNj\j_)}jb]j5Ic.readahead_folioasbuh1hhjpIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpIubj2 )}(hj5 h]h*}(hjIhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjpIubh)}(hractlh]hractl}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpIubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlIubah}(h]h ]h"]h$]h&]jj uh1jhjHhhhjIhMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjIhMtubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjIhMthjHhhubj )}(hhh]j9)}(hGet the next folio to read.h]hGet the next folio to read.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMthjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjIhMtubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Jj4j Jj5j6j7uh1hhhhjhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMxhjJubj)}(hhh]j)}(hC``struct readahead_control *ractl`` The current readahead request. h](j)}(h#``struct readahead_control *ractl``h]j?)}(hj6Jh]hstruct readahead_control *ractl}(hj8JhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4Jubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMuhj0Jubj)}(hhh]j9)}(hThe current readahead request.h]hThe current readahead request.}(hjOJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKJhMuhjLJubah}(h]h ]h"]h$]h&]uh1jhj0Jubeh}(h]h ]h"]h$]h&]uh1jhjKJhMuhj-Jubah}(h]h ]h"]h$]h&]uh1jhjJubj9)}(h **Context**h]jz)}(hjqJh]hContext}(hjsJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoJubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMwhjJubj9)}(hbThe folio is locked. The caller should unlock the folio once all I/O to that folio has completed.h]hbThe folio is locked. The caller should unlock the folio once all I/O to that folio has completed.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMwhjJubj9)}(h **Return**h]jz)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMzhjJubj9)}(h8A pointer to the next folio, or ``NULL`` if we are done.h](h A pointer to the next folio, or }(hjJhhhNhNubj?)}(h``NULL``h]hNULL}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubh if we are done.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMyhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_pos (C function)c.readahead_poshNtauh1hhjhhhNhNubh)}(hhh](h)}(h4loff_t readahead_pos (struct readahead_control *rac)h]h)}(h3loff_t readahead_pos(struct readahead_control *rac)h](h)}(hhh]h)}(hloff_th]hloff_t}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjJmodnameN classnameNj\j_)}jb]je)}jX readahead_possbc.readahead_posasbuh1hhjJhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjKhMubh)}(h readahead_posh]h)}(hjKh]h readahead_pos}(hj&KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Kubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjKhMubj)}(h(struct readahead_control *rac)h]j)}(hstruct readahead_control *rach](j!)}(hj$h]hstruct}(hjAKhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=Kubj)}(h h]h }(hjNKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Kubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hj_KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\Kubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjaKmodnameN classnameNj\j_)}jb]jKc.readahead_posasbuh1hhj=Kubj)}(h h]h }(hj}KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Kubj2 )}(hj5 h]h*}(hjKhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=Kubh)}(hrach]hrac}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=Kubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9Kubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhjKhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjKhMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjKhMhjJhhubj )}(hhh]j9)}(h8The byte offset into the file of this readahead request.h]h8The byte offset into the file of this readahead request.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjKhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhjhNhNubjp)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjKubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j?)}(hjLh]hstruct readahead_control *rac}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjKubj)}(hhh]j9)}(hThe readahead request.h]hThe readahead request.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_length (C function)c.readahead_lengthhNtauh1hhjhhhNhNubh)}(hhh](h)}(h7size_t readahead_length (struct readahead_control *rac)h]h)}(h6size_t readahead_length(struct readahead_control *rac)h](h)}(hhh]h)}(hsize_th]hsize_t}(hj`LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Lubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbLmodnameN classnameNj\j_)}jb]je)}jXreadahead_lengthsbc.readahead_lengthasbuh1hhjYLhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYLhhhjLhMubh)}(hreadahead_lengthh]h)}(hj~Lh]hreadahead_length}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYLhhhjLhMubj)}(h(struct readahead_control *rac)h]j)}(hstruct readahead_control *rach](j!)}(hj$h]hstruct}(hjLhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjLmodnameN classnameNj\j_)}jb]j|Lc.readahead_lengthasbuh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj2 )}(hj5 h]h*}(hjLhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjLubh)}(hrach]hrac}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubah}(h]h ]h"]h$]h&]jj uh1jhjYLhhhjLhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjULhhhjLhMubah}(h]jPLah ](jjeh"]h$]h&]jj)jhuh1hhjLhMhjRLhhubj )}(hhh]j9)}(h.The number of bytes in this readahead request.h]h.The number of bytes in this readahead request.}(hj0MhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj-Mhhubah}(h]h ]h"]h$]h&]uh1jhjRLhhhjLhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jHMj4jHMj5j6j7uh1hhhhjhNhNubjp)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j9)}(h**Parameters**h]jz)}(hjRMh]h Parameters}(hjTMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPMubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjLMubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j?)}(hjqMh]hstruct readahead_control *rac}(hjsMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoMubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjkMubj)}(hhh]j9)}(hThe readahead request.h]hThe readahead request.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubah}(h]h ]h"]h$]h&]uh1jhjkMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjhMubah}(h]h ]h"]h$]h&]uh1jhjLMubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_index (C function)c.readahead_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(h7pgoff_t readahead_index (struct readahead_control *rac)h]h)}(h6pgoff_t readahead_index(struct readahead_control *rac)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjMmodnameN classnameNj\j_)}jb]je)}jXreadahead_indexsbc.readahead_indexasbuh1hhjMhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhjMhMubh)}(hreadahead_indexh]h)}(hjMh]hreadahead_index}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhjMhMubj)}(h(struct readahead_control *rac)h]j)}(hstruct readahead_control *rach](j!)}(hj$h]hstruct}(hjNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjNubj)}(h h]h }(hj*NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hj;NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8Nubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj=NmodnameN classnameNj\j_)}jb]jMc.readahead_indexasbuh1hhjNubj)}(h h]h }(hjYNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj2 )}(hj5 h]h*}(hjgNhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjNubh)}(hrach]hrac}(hjtNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjNubah}(h]h ]h"]h$]h&]jj uh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjMhMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhjMhMhjMhhubj )}(hhh]j9)}(h6The index of the first page in this readahead request.h]h6The index of the first page in this readahead request.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhjhNhNubjp)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjNubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j?)}(hjNh]hstruct readahead_control *rac}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjNubj)}(hhh]j9)}(hThe readahead request.h]hThe readahead request.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_count (C function)c.readahead_counthNtauh1hhjhhhNhNubh)}(hhh](h)}(h ah"]h$]h&]uh1j1 hjOubh)}(hrach]hrac}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjOubah}(h]h ]h"]h$]h&]jj uh1jhj5OhhhjGOhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1OhhhjGOhMubah}(h]j,Oah ](jjeh"]h$]h&]jj)jhuh1hhjGOhMhj.Ohhubj )}(hhh]j9)}(h.The number of pages in this readahead request.h]h.The number of pages in this readahead request.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhj.OhhhjGOhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-Pj4j-Pj5j6j7uh1hhhhjhNhNubjp)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j9)}(h**Parameters**h]jz)}(hj7Ph]h Parameters}(hj9PhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5Pubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj1Pubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j?)}(hjVPh]hstruct readahead_control *rac}(hjXPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjPPubj)}(hhh]j9)}(hThe readahead request.h]hThe readahead request.}(hjoPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjlPubah}(h]h ]h"]h$]h&]uh1jhjPPubeh}(h]h ]h"]h$]h&]uh1jhjkPhMhjMPubah}(h]h ]h"]h$]h&]uh1jhj1Pubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#readahead_batch_length (C function)c.readahead_batch_lengthhNtauh1hhjhhhNhNubh)}(hhh](h)}(h=size_t readahead_batch_length (struct readahead_control *rac)h]h)}(hQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj2 )}(hj5 h]h*}(hjLQhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjPubh)}(hrach]hrac}(hjYQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjPubah}(h]h ]h"]h$]h&]jj uh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPhhhjPhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1hhjPhMhjPhhubj )}(hhh]j9)}(h)The number of bytes in the current batch.h]h)The number of bytes in the current batch.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhjhNhNubjp)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j9)}(h**Parameters**h]jz)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j?)}(hjQh]hstruct readahead_control *rac}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQubj)}(hhh]j9)}(hThe readahead request.h]hThe readahead request.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)folio_mkwrite_check_truncate (C function)c.folio_mkwrite_check_truncatehNtauh1hhjhhhNhNubh)}(hhh](h)}(hOssize_t folio_mkwrite_check_truncate (struct folio *folio, struct inode *inode)h]h)}(hNssize_t folio_mkwrite_check_truncate(struct folio *folio, struct inode *inode)h](h)}(hhh]h)}(hssize_th]hssize_t}(hj!RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#RmodnameN classnameNj\j_)}jb]je)}jXfolio_mkwrite_check_truncatesbc.folio_mkwrite_check_truncateasbuh1hhjRhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjCRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjBRhMubh)}(hfolio_mkwrite_check_truncateh]h)}(hj?Rh]hfolio_mkwrite_check_truncate}(hjURhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjBRhMubj)}(h*(struct folio *folio, struct inode *inode)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjpRhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjlRubj)}(h h]h }(hj}RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlRubh)}(hhh]h)}(hfolioh]hfolio}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRmodnameN classnameNj\j_)}jb]j=Rc.folio_mkwrite_check_truncateasbuh1hhjlRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlRubj2 )}(hj5 h]h*}(hjRhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjlRubh)}(hfolioh]hfolio}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjhRubj)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjRhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(hinodeh]hinode}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjSmodnameN classnameNj\j_)}jb]j=Rc.folio_mkwrite_check_truncateasbuh1hhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj2 )}(hj5 h]h*}(hj*ShhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRubh)}(hinodeh]hinode}(hj7ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjhRubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjBRhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjBRhMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1hhjBRhMhjRhhubj )}(hhh]j9)}(hcheck if folio was truncatedh]hcheck if folio was truncated}(hjaShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^Shhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjBRhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jySj4jySj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct folio *folio`` the folio to check ``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](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj}Subj)}(hhh](j)}(h+``struct folio *folio`` the folio to check h](j)}(h``struct folio *folio``h]j?)}(hjSh]hstruct folio *folio}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj)}(hhh]j9)}(hthe folio to checkh]hthe folio to check}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h=``struct inode *inode`` the inode to check the folio against h](j)}(h``struct inode *inode``h]j?)}(hjSh]hstruct inode *inode}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj)}(hhh]j9)}(h$the inode to check the folio againsth]h$the inode to check the folio against}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubeh}(h]h ]h"]h$]h&]uh1jhj}Subj9)}(h **Return**h]jz)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj}Subj9)}(hRthe number of bytes in the folio up to EOF, or -EFAULT if the folio was truncated.h]hRthe number of bytes in the folio up to EOF, or -EFAULT if the folio was truncated.}(hj,ThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj}Subeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌi_blocks_per_folio (C function)c.i_blocks_per_foliohNtauh1hhjhhhNhNubh)}(hhh](h)}(hJunsigned int i_blocks_per_folio (struct inode *inode, struct folio *folio)h]h)}(hIunsigned int i_blocks_per_folio(struct inode *inode, struct folio *folio)h](j)}(hunsignedh]hunsigned}(hj[ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWThhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hjjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWThhhjiThMubj)}(hinth]hint}(hjxThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWThhhjiThMubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWThhhjiThMubh)}(hi_blocks_per_folioh]h)}(hi_blocks_per_folioh]hi_blocks_per_folio}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWThhhjiThMubj)}(h*(struct inode *inode, struct folio *folio)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjThhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]h)}(hinodeh]hinode}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjTmodnameN classnameNj\j_)}jb]je)}jXjTsbc.i_blocks_per_folioasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj2 )}(hj5 h]h*}(hjUhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjTubh)}(hinode2h]hinode}(hj UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj&UhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj"Uubj)}(h h]h }(hj3UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubh)}(hhh]h)}(hfolioh]hfolio}(hjDUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAUubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjFUmodnameN classnameNj\j_)}jb]jTc.i_blocks_per_folioasbuh1hhj"Uubj)}(h h]h }(hjbUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubj2 )}(hj5 h]h*}(hjpUhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj"Uubh)}(hfolioh]hfolio}(hj}UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Uubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTubeh}(h]h ]h"]h$]h&]jj uh1jhjWThhhjiThMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjSThhhjiThMubah}(h]jNTah ](jjeh"]h$]h&]jj)jhuh1hhjiThMhjPThhubj )}(hhh]j9)}(h"How many blocks fit in this folio.h]h"How many blocks fit in this folio.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjPThhhjiThMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jUj4jUj5j6j7uh1hhhhjhNhNubjp)}(hXm**Parameters** ``struct inode *inode`` The inode which contains the blocks. ``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](j9)}(h**Parameters**h]jz)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj)}(hhh](j)}(h=``struct inode *inode`` The inode which contains the blocks. h](j)}(h``struct inode *inode``h]j?)}(hjUh]hstruct inode *inode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj)}(hhh]j9)}(h$The inode which contains the blocks.h]h$The inode which contains the blocks.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjUubj)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj!Vh]hstruct folio *folio}(hj#VhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjVubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj:VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6VhMhj7Vubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhj6VhMhjUubeh}(h]h ]h"]h$]h&]uh1jhjUubj9)}(h**Description**h]jz)}(hj\Vh]h Description}(hj^VhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZVubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj9)}(hEIf the block size is larger than the size of this folio, return zero.h]hEIf the block size is larger than the size of this folio, return zero.}(hjrVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj9)}(h **Context**h]jz)}(hjVh]hContext}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj9)}(hNThe caller should hold a refcount on the folio to prevent it from being split.h]hNThe caller should hold a refcount on the folio to prevent it from being split.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubj9)}(h6The number of filesystem blocks covered by this folio.h]h6The number of filesystem blocks covered by this folio.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubeh}(h]truncateah ]h"]truncateah$]h&]uh1hhjHehhhhhKPubeh}(h]file-mapping-and-page-cacheah ]h"]file mapping and page cacheah$]h&]uh1hhhhhhhhK8ubh)}(hhh](h)}(h Memory poolsh]h Memory pools}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhhhhhKYubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmempool_exit (C function)c.mempool_exithNtauh1hhjVhhhNhNubh)}(hhh](h)}(h#void mempool_exit (mempool_t *pool)h]h)}(h"void mempool_exit(mempool_t *pool)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj WhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj WhhhjWhKubh)}(h mempool_exith]h)}(h mempool_exith]h mempool_exit}(hj1WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Wubah}(h]h ](jjeh"]h$]h&]jj uh1hhj WhhhjWhKubj)}(h(mempool_t *pool)h]j)}(hmempool_t *poolh](h)}(hhh]h)}(h mempool_th]h mempool_t}(hjPWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMWubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRWmodnameN classnameNj\j_)}jb]je)}jXj3Wsbc.mempool_exitasbuh1hhjIWubj)}(h h]h }(hjpWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIWubj2 )}(hj5 h]h*}(hj~WhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjIWubh)}(hpoolh]hpool}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEWubah}(h]h ]h"]h$]h&]jj uh1jhj WhhhjWhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjWhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1hhjWhKhjWhhubj )}(hhh]j9)}(h.exit a mempool initialized with mempool_init()h]h.exit a mempool initialized with mempool_init()}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhjVhNhNubjp)}(hXN**Parameters** ``mempool_t *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](j9)}(h**Parameters**h]jz)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWubj)}(hhh]j)}(hZ``mempool_t *pool`` pointer to the memory pool which was initialized with mempool_init(). h](j)}(h``mempool_t *pool``h]j?)}(hjWh]hmempool_t *pool}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWubj)}(hhh]j9)}(hEpointer to the memory pool which was initialized with mempool_init().h]hEpointer to the memory pool which was initialized with mempool_init().}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhj Xubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhj XhKhjWubah}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hj2Xh]h Description}(hj4XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0Xubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWubj9)}(hxFree all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps.h](hFree all reserved elements in }(hjHXhhhNhNubjz)}(h**pool**h]hpool}(hjPXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHXubh and }(hjHXhhhNhNubjz)}(h**pool**h]hpool}(hjbXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHXubhE itself. This function only sleeps if the free_fn() function sleeps.}(hjHXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWubj9)}(hTMay be called on a zeroed but uninitialized mempool (i.e. allocated with kzalloc()).h]hTMay be called on a zeroed but uninitialized mempool (i.e. allocated with kzalloc()).}(hj{XhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmempool_destroy (C function)c.mempool_destroyhNtauh1hhjVhhhNhNubh)}(hhh](h)}(h&void mempool_destroy (mempool_t *pool)h]h)}(h%void mempool_destroy(mempool_t *pool)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhKubh)}(hmempool_destroyh]h)}(hmempool_destroyh]hmempool_destroy}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjXhKubj)}(h(mempool_t *pool)h]j)}(hmempool_t *poolh](h)}(hhh]h)}(h mempool_th]h mempool_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjXmodnameN classnameNj\j_)}jb]je)}jXjXsbc.mempool_destroyasbuh1hhjXubj)}(h h]h }(hj YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj2 )}(hj5 h]h*}(hjYhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjXubh)}(hpoolh]hpool}(hj%YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXubah}(h]h ]h"]h$]h&]jj uh1jhjXhhhjXhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjXhKubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjXhKhjXhhubj )}(hhh]j9)}(hdeallocate a memory poolh]hdeallocate a memory pool}(hjOYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjLYhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjXhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgYj4jgYj5j6j7uh1hhhhjVhNhNubjp)}(h**Parameters** ``mempool_t *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](j9)}(h**Parameters**h]jz)}(hjqYh]h Parameters}(hjsYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoYubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjkYubj)}(hhh]j)}(hY``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). h](j)}(h``mempool_t *pool``h]j?)}(hjYh]hmempool_t *pool}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjYubj)}(hhh]j9)}(hDpointer to the memory pool which was allocated via mempool_create().h]hDpointer to the memory pool which was allocated via mempool_create().}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhKhjYubah}(h]h ]h"]h$]h&]uh1jhjkYubj9)}(h**Description**h]jz)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjkYubj9)}(hxFree all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps.h](hFree all reserved elements in }(hjYhhhNhNubjz)}(h**pool**h]hpool}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh and }(hjYhhhNhNubjz)}(h**pool**h]hpool}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubhE itself. This function only sleeps if the free_fn() function sleeps.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chKhjkYubeh}(h]h ] kernelindentah"]h$]h&]uh1johjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmempool_resize (C function)c.mempool_resizehNtauh1hhjVhhhNhNubh)}(hhh](h)}(h4int mempool_resize (mempool_t *pool, int new_min_nr)h]h)}(h3int mempool_resize(mempool_t *pool, int new_min_nr)h](j)}(hinth]hint}(hj5ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM#ubj)}(h h]h }(hjDZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ZhhhjCZhM#ubh)}(hmempool_resizeh]h)}(hmempool_resizeh]hmempool_resize}(hjVZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRZubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1ZhhhjCZhM#ubj)}(h!(mempool_t *pool, int new_min_nr)h](j)}(hmempool_t *poolh](h)}(hhh]h)}(h mempool_th]h mempool_t}(hjuZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjwZmodnameN classnameNj\j_)}jb]je)}jXjXZsbc.mempool_resizeasbuh1hhjnZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnZubj2 )}(hj5 h]h*}(hjZhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjnZubh)}(hpoolh]hpool}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjZubj)}(hint new_min_nrh](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(h new_min_nrh]h new_min_nr}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjZubeh}(h]h ]h"]h$]h&]jj uh1jhj1ZhhhjCZhM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-ZhhhjCZhM#ubah}(h]j(Zah ](jjeh"]h$]h&]jj)jhuh1hhjCZhM#hj*Zhhubj )}(hhh]j9)}(hresize an existing memory poolh]hresize an existing memory pool}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM#hj [hhubah}(h]h ]h"]h$]h&]uh1jhj*ZhhhjCZhM#ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'[j4j'[j5j6j7uh1hhhhjVhNhNubjp)}(hX**Parameters** ``mempool_t *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](j9)}(h**Parameters**h]jz)}(hj1[h]h Parameters}(hj3[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM'hj+[ubj)}(hhh](j)}(hY``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). h](j)}(h``mempool_t *pool``h]j?)}(hjP[h]hmempool_t *pool}(hjR[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjN[ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM%hjJ[ubj)}(hhh]j9)}(hDpointer to the memory pool which was allocated via mempool_create().h]hDpointer to the memory pool which was allocated via mempool_create().}(hji[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM$hjf[ubah}(h]h ]h"]h$]h&]uh1jhjJ[ubeh}(h]h ]h"]h$]h&]uh1jhje[hM%hjG[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]j?)}(hj[h]hint new_min_nr}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM'hj[ubj)}(hhh]j9)}(hLthe new minimum number of elements guaranteed to be allocated for this pool.h]hLthe new minimum number of elements guaranteed to be allocated for this pool.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM&hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM'hjG[ubeh}(h]h ]h"]h$]h&]uh1jhj+[ubj9)}(h**Description**h]jz)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM)hj+[ubj9)}(hThis 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]hThis 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[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM)hj+[ubj9)}(hNote, 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]hNote, 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[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM.hj+[ubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM2hj+[ubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh+ on success, negative error code otherwise.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chM2hj+[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'mempool_alloc_preallocated (C function)c.mempool_alloc_preallocatedhNtauh1hhjVhhhNhNubh)}(hhh](h)}(h3void * mempool_alloc_preallocated (mempool_t *pool)h]h)}(h1void *mempool_alloc_preallocated(mempool_t *pool)h](j)}(hvoidh]hvoid}(hjO\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK\hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMubj)}(h h]h }(hj^\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK\hhhj]\hMubj2 )}(hj5 h]h*}(hjl\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjK\hhhj]\hMubh)}(hmempool_alloc_preallocatedh]h)}(hmempool_alloc_preallocatedh]hmempool_alloc_preallocated}(hj}\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjK\hhhj]\hMubj)}(h(mempool_t *pool)h]j)}(hmempool_t *poolh](h)}(hhh]h)}(h mempool_th]h mempool_t}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj\modnameN classnameNj\j_)}jb]je)}jXj\sbc.mempool_alloc_preallocatedasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hj\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hpoolh]hpool}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubah}(h]h ]h"]h$]h&]jj uh1jhjK\hhhj]\hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjG\hhhj]\hMubah}(h]jB\ah ](jjeh"]h$]h&]jj)jhuh1hhj]\hMhjD\hhubj )}(hhh]j9)}(hRallocate an element from preallocated elements belonging to a specific memory poolh]hRallocate an element from preallocated elements belonging to a specific memory pool}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjD\hhhj]\hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhjVhNhNubjp)}(hX**Parameters** ``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). **Description** This function is similar to mempool_alloc, but it only attempts allocating an element from the preallocated elements. It does not sleep and immediately returns if no preallocated elements are available. **Return** pointer to the allocated element or ``NULL`` if no elements are available.h](j9)}(h**Parameters**h]jz)}(hj#]h]h Parameters}(hj%]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!]ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj]ubj)}(hhh]j)}(hY``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). h](j)}(h``mempool_t *pool``h]j?)}(hjB]h]hmempool_t *pool}(hjD]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@]ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj<]ubj)}(hhh]j9)}(hDpointer to the memory pool which was allocated via mempool_create().h]hDpointer to the memory pool which was allocated via mempool_create().}(hj[]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhjX]ubah}(h]h ]h"]h$]h&]uh1jhj<]ubeh}(h]h ]h"]h$]h&]uh1jhjW]hMhj9]ubah}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hj~]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|]ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj]ubj9)}(hThis function is similar to mempool_alloc, but it only attempts allocating an element from the preallocated elements. It does not sleep and immediately returns if no preallocated elements are available.h]hThis function is similar to mempool_alloc, but it only attempts allocating an element from the preallocated elements. It does not sleep and immediately returns if no preallocated elements are available.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj]ubj9)}(h **Return**h]jz)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj]ubj9)}(hJpointer to the allocated element or ``NULL`` if no elements are available.h](h$pointer to the allocated element or }(hj]hhhNhNubj?)}(h``NULL``h]hNULL}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubh if no elements are available.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjVhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmempool_free (C function)c.mempool_freehNtauh1hhjVhhhNhNubh)}(hhh](h)}(h2void mempool_free (void *element, mempool_t *pool)h]h)}(h1void mempool_free(void *element, mempool_t *pool)h](j)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMubj)}(h h]h }(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhj ^hMubh)}(h mempool_freeh]h)}(h mempool_freeh]h mempool_free}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhj ^hMubj)}(h (void *element, mempool_t *pool)h](j)}(h void *elementh](j)}(hvoidh]hvoid}(hj9^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5^ubj)}(h h]h }(hjG^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5^ubj2 )}(hj5 h]h*}(hjU^hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj5^ubh)}(helementh]helement}(hjb^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1^ubj)}(hmempool_t *poolh](h)}(hhh]h)}(h mempool_th]h mempool_t}(hj~^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{^ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj^modnameN classnameNj\j_)}jb]je)}jXj^sbc.mempool_freeasbuh1hhjw^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw^ubj2 )}(hj5 h]h*}(hj^hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjw^ubh)}(hpoolh]hpool}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj1^ubeh}(h]h ]h"]h$]h&]jj uh1jhj]hhhj ^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhj ^hMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1hhj ^hMhj]hhubj )}(hhh]j9)}(hreturn an element to the pool.h]hreturn an element to the pool.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj ^hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^j4j^j5j6j7uh1hhhhjVhNhNubjp)}(h**Parameters** ``void *element`` pool element pointer. ``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). **Description** this function only sleeps if the free_fn() function sleeps.h](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj^ubj)}(hhh](j)}(h(``void *element`` pool element pointer. h](j)}(h``void *element``h]j?)}(hj$_h]h void *element}(hj&_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"_ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj_ubj)}(hhh]j9)}(hpool element pointer.h]hpool element pointer.}(hj=_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9_hMhj:_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj9_hMhj_ubj)}(hY``mempool_t *pool`` pointer to the memory pool which was allocated via mempool_create(). h](j)}(h``mempool_t *pool``h]j?)}(hj]_h]hmempool_t *pool}(hj__hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[_ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhjW_ubj)}(hhh]j9)}(hDpointer to the memory pool which was allocated via mempool_create().h]hDpointer to the memory pool which was allocated via mempool_create().}(hjv_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhjs_ubah}(h]h ]h"]h$]h&]uh1jhjW_ubeh}(h]h ]h"]h$]h&]uh1jhjr_hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj^ubj9)}(h**Description**h]jz)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj^ubj9)}(h;this function only sleeps if the free_fn() function sleeps.h]h;this function only sleeps if the free_fn() function sleeps.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:91: ./mm/mempool.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjVhhhNhNubeh}(h] memory-poolsah ]h"] memory poolsah$]h&]uh1hhhhhhhhKYubh)}(hhh](h)}(h DMA poolsh]h DMA pools}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hhhhhK_ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!dma_pool_create_node (C function)c.dma_pool_create_nodehNtauh1hhj_hhhNhNubh)}(hhh](h)}(hstruct dma_pool * dma_pool_create_node (const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)h]h)}(hstruct dma_pool *dma_pool_create_node(const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)h](j!)}(hj$h]hstruct}(hj_hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj`hKubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]je)}jXdma_pool_create_nodesbc.dma_pool_create_nodeasbuh1hhj_hhhj`hKubj)}(h h]h }(hj7`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj`hKubj2 )}(hj5 h]h*}(hjE`hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_hhhj`hKubh)}(hdma_pool_create_nodeh]h)}(hj4`h]hdma_pool_create_node}(hjV`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhj`hKubj)}(h\(const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)h](j)}(hconst char *nameh](j!)}(hjeh]hconst}(hjq`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjm`ubj)}(h h]h }(hj~`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm`ubj)}(hcharh]hchar}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm`ubj2 )}(hj5 h]h*}(hj`hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjm`ubh)}(hnameh]hname}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjm`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubj)}(hstruct device *devh](j!)}(hj$h]hstruct}(hj`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]h)}(hdeviceh]hdevice}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]j2`c.dma_pool_create_nodeasbuh1hhj`ubj)}(h h]h }(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj2 )}(hj5 h]h*}(hjahhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`ubh)}(hdevh]hdev}(hj%ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjAahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>aubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjCamodnameN classnameNj\j_)}jb]j2`c.dma_pool_create_nodeasbuh1hhj:aubj)}(h h]h }(hj_ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:aubh)}(hsizeh]hsize}(hjmahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:aubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]j2`c.dma_pool_create_nodeasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(halignh]halign}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubj)}(hsize_t boundaryh](h)}(hhh]h)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]j2`c.dma_pool_create_nodeasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hboundaryh]hboundary}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubj)}(hint nodeh](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hj$bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hnodeh]hnode}(hj2bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1jhji`ubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhj`hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhj`hKubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1hhj`hKhj_hhubj )}(hhh]j9)}(h4Creates a pool of consistent memory blocks, for dma.h]h4Creates a pool of consistent memory blocks, for dma.}(hj\bhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjYbhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj`hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtbj4jtbj5j6j7uh1hhhhj_hNhNubjp)}(hXX**Parameters** ``const char *name`` name of pool, for diagnostics ``struct device *dev`` device that will be doing the DMA ``size_t size`` size of the blocks in this pool. ``size_t align`` alignment requirement for blocks; must be a power of two ``size_t boundary`` returned blocks won't cross this power of two boundary ``int node`` optional NUMA node to allocate structs 'dma_pool' and 'dma_page' on **Context** not in_interrupt() **Description** Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have "consistent" DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment. If **boundary** is nonzero, objects returned from dma_pool_alloc() won't cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes. **Return** a dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.h](j9)}(h**Parameters**h]jz)}(hj~bh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|bubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj)}(hhh](j)}(h3``const char *name`` name of pool, for diagnostics h](j)}(h``const char *name``h]j?)}(hjbh]hconst char *name}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjbubj)}(hhh]j9)}(hname of pool, for diagnosticsh]hname of pool, for diagnostics}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjbubj)}(h9``struct device *dev`` device that will be doing the DMA h](j)}(h``struct device *dev``h]j?)}(hjbh]hstruct device *dev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjbubj)}(hhh]j9)}(h!device that will be doing the DMAh]h!device that will be doing the DMA}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjbubj)}(h1``size_t size`` size of the blocks in this pool. h](j)}(h``size_t size``h]j?)}(hjch]h size_t size}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj cubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhj cubj)}(hhh]j9)}(h size of the blocks in this pool.h]h size of the blocks in this pool.}(hj(chhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$chKhj%cubah}(h]h ]h"]h$]h&]uh1jhj cubeh}(h]h ]h"]h$]h&]uh1jhj$chKhjbubj)}(hJ``size_t align`` alignment requirement for blocks; must be a power of two h](j)}(h``size_t align``h]j?)}(hjHch]h size_t align}(hjJchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFcubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjBcubj)}(hhh]j9)}(h8alignment requirement for blocks; must be a power of twoh]h8alignment requirement for blocks; must be a power of two}(hjachhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]chKhj^cubah}(h]h ]h"]h$]h&]uh1jhjBcubeh}(h]h ]h"]h$]h&]uh1jhj]chKhjbubj)}(hK``size_t boundary`` returned blocks won't cross this power of two boundary h](j)}(h``size_t boundary``h]j?)}(hjch]hsize_t boundary}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhj{cubj)}(hhh]j9)}(h6returned blocks won't cross this power of two boundaryh]h8returned blocks won’t cross this power of two boundary}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchKhjcubah}(h]h ]h"]h$]h&]uh1jhj{cubeh}(h]h ]h"]h$]h&]uh1jhjchKhjbubj)}(hQ``int node`` optional NUMA node to allocate structs 'dma_pool' and 'dma_page' on h](j)}(h ``int node``h]j?)}(hjch]hint node}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjcubj)}(hhh]j9)}(hCoptional NUMA node to allocate structs 'dma_pool' and 'dma_page' onh]hKoptional NUMA node to allocate structs ‘dma_pool’ and ‘dma_page’ on}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKhjbubeh}(h]h ]h"]h$]h&]uh1jhjxbubj9)}(h **Context**h]jz)}(hjch]hContext}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(hnot in_interrupt()h]hnot in_interrupt()}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(hX)Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have "consistent" DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment.h]hX-Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have “consistent” DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment.}(hj2dhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(hIf **boundary** is nonzero, objects returned from dma_pool_alloc() won't cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes.h](hIf }(hjAdhhhNhNubjz)}(h **boundary**h]hboundary}(hjIdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAdubh is nonzero, objects returned from dma_pool_alloc() won’t cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes.}(hjAdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(h **Return**h]jz)}(hjddh]hReturn}(hjfdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbdubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubj9)}(h^a dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.h](h=a dma allocation pool with the requested characteristics, or }(hjzdhhhNhNubj?)}(h``NULL``h]hNULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzdubh if one can’t be created.}(hjzdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjxbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_pool_destroy (C function)c.dma_pool_destroyhNtauh1hhj_hhhNhNubh)}(hhh](h)}(h-void dma_pool_destroy (struct dma_pool *pool)h]h)}(h,void dma_pool_destroy(struct dma_pool *pool)h](j)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjdhMdubh)}(hdma_pool_destroyh]h)}(hdma_pool_destroyh]hdma_pool_destroy}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjdhMdubj)}(h(struct dma_pool *pool)h]j)}(hstruct dma_pool *poolh](j!)}(hj$h]hstruct}(hjdhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjdubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXjdsbc.dma_pool_destroyasbuh1hhjdubj)}(h h]h }(hj6ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj2 )}(hj5 h]h*}(hjDehhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjdubh)}(hpoolh]hpool}(hjQehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjdubah}(h]h ]h"]h$]h&]jj uh1jhjdhhhjdhMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhMdubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhjdhMdhjdhhubj )}(hhh]j9)}(h%destroys a pool of dma memory blocks.h]h%destroys a pool of dma memory blocks.}(hj{ehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMdhjxehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhj_hNhNubjp)}(h**Parameters** ``struct dma_pool *pool`` dma pool that will be destroyed **Context** !in_interrupt() **Description** Caller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.h](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhhjeubj)}(hhh]j)}(h:``struct dma_pool *pool`` dma pool that will be destroyed h](j)}(h``struct dma_pool *pool``h]j?)}(hjeh]hstruct dma_pool *pool}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMehjeubj)}(hhh]j9)}(hdma pool that will be destroyedh]hdma pool that will be destroyed}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMehjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMehjeubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h **Context**h]jz)}(hjeh]hContext}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMghjeubj9)}(h!in_interrupt()h]h!in_interrupt()}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMfhjeubj9)}(h**Description**h]jz)}(hjfh]h Description}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhhjeubj9)}(hyCaller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.h]hyCaller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.}(hj4fhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMghjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_pool_alloc (C function)c.dma_pool_allochNtauh1hhj_hhhNhNubh)}(hhh](h)}(hRvoid * dma_pool_alloc (struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)h]h)}(hPvoid *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)h](j)}(hvoidh]hvoid}(hjcfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_fhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hjrfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_fhhhjqfhMubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_fhhhjqfhMubh)}(hdma_pool_alloch]h)}(hdma_pool_alloch]hdma_pool_alloc}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_fhhhjqfhMubj)}(h<(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)h](j)}(hstruct dma_pool *poolh](j!)}(hj$h]hstruct}(hjfhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjfmodnameN classnameNj\j_)}jb]je)}jXjfsbc.dma_pool_allocasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjfubh)}(hpoolh]hpool}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubj)}(hgfp_t mem_flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj"ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj$gmodnameN classnameNj\j_)}jb]jfc.dma_pool_allocasbuh1hhjgubj)}(h h]h }(hj@ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(h mem_flagsh]h mem_flags}(hjNghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubj)}(hdma_addr_t *handleh](h)}(hhh]h)}(h dma_addr_th]h dma_addr_t}(hjjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjggubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlgmodnameN classnameNj\j_)}jb]jfc.dma_pool_allocasbuh1hhjcgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcgubj2 )}(hj5 h]h*}(hjghhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjcgubh)}(hhandleh]hhandle}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcgubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubeh}(h]h ]h"]h$]h&]jj uh1jhj_fhhhjqfhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[fhhhjqfhMubah}(h]jVfah ](jjeh"]h$]h&]jj)jhuh1hhjqfhMhjXfhhubj )}(hhh]j9)}(h get a block of consistent memoryh]h get a block of consistent memory}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjXfhhhjqfhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj_hNhNubjp)}(hXe**Parameters** ``struct dma_pool *pool`` dma pool that will produce the block ``gfp_t mem_flags`` GFP_* bitmask ``dma_addr_t *handle`` pointer to dma address of block **Return** the kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can't be allocated, ``NULL`` is returned.h](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjgubj)}(hhh](j)}(h?``struct dma_pool *pool`` dma pool that will produce the block h](j)}(h``struct dma_pool *pool``h]j?)}(hjhh]hstruct dma_pool *pool}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj hubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjhubj)}(hhh]j9)}(h$dma pool that will produce the blockh]h$dma pool that will produce the block}(hj'hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hhMhj$hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj#hhMhjhubj)}(h"``gfp_t mem_flags`` GFP_* bitmask h](j)}(h``gfp_t mem_flags``h]j?)}(hjGhh]hgfp_t mem_flags}(hjIhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjAhubj)}(hhh]j9)}(h GFP_* bitmaskh]h GFP_* bitmask}(hj`hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hhMhj]hubah}(h]h ]h"]h$]h&]uh1jhjAhubeh}(h]h ]h"]h$]h&]uh1jhj\hhMhjhubj)}(h7``dma_addr_t *handle`` pointer to dma address of block h](j)}(h``dma_addr_t *handle``h]j?)}(hjhh]hdma_addr_t *handle}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~hubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjzhubj)}(hhh]j9)}(hpointer to dma address of blockh]hpointer to dma address of block}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjzhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h **Return**h]jz)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjgubj9)}(hthe kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can't be allocated, ``NULL`` is returned.h](hthe kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can’t be allocated, }(hjhhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubh is returned.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_pool_free (C function)c.dma_pool_freehNtauh1hhj_hhhNhNubh)}(hhh](h)}(hGvoid dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t dma)h]h)}(hFvoid dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hj!ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj ihMubh)}(h dma_pool_freeh]h)}(h dma_pool_freeh]h dma_pool_free}(hj3ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/iubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj ihMubj)}(h4(struct dma_pool *pool, void *vaddr, dma_addr_t dma)h](j)}(hstruct dma_pool *poolh](j!)}(hj$h]hstruct}(hjOihhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjKiubj)}(h h]h }(hj\ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKiubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hjmihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjiubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjoimodnameN classnameNj\j_)}jb]je)}jXj5isbc.dma_pool_freeasbuh1hhjKiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKiubj2 )}(hj5 h]h*}(hjihhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjKiubh)}(hpoolh]hpool}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKiubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjGiubj)}(h void *vaddrh](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj2 )}(hj5 h]h*}(hjihhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjiubh)}(hvaddrh]hvaddr}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjGiubj)}(hdma_addr_t dmah](h)}(hhh]h)}(h dma_addr_th]h dma_addr_t}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjjmodnameN classnameNj\j_)}jb]jic.dma_pool_freeasbuh1hhjiubj)}(h h]h }(hj$jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hdmah]hdma}(hj2jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjGiubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhj ihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj ihhhj ihMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhj ihMhjihhubj )}(hhh]j9)}(hput block back into dma poolh]hput block back into dma pool}(hj\jhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjYjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhj ihMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtjj4jtjj5j6j7uh1hhhhj_hNhNubjp)}(hX**Parameters** ``struct dma_pool *pool`` the dma pool holding the block ``void *vaddr`` virtual address of block ``dma_addr_t dma`` dma address of block **Description** Caller promises neither device nor driver will again touch this block unless it is first re-allocated.h](j9)}(h**Parameters**h]jz)}(hj~jh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|jubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjxjubj)}(hhh](j)}(h9``struct dma_pool *pool`` the dma pool holding the block h](j)}(h``struct dma_pool *pool``h]j?)}(hjjh]hstruct dma_pool *pool}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjjubj)}(hhh]j9)}(hthe dma pool holding the blockh]hthe dma pool holding the block}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(h)``void *vaddr`` virtual address of block h](j)}(h``void *vaddr``h]j?)}(hjjh]h void *vaddr}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjjubj)}(hhh]j9)}(hvirtual address of blockh]hvirtual address of block}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(h(``dma_addr_t dma`` dma address of block h](j)}(h``dma_addr_t dma``h]j?)}(hjkh]hdma_addr_t dma}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj kubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj kubj)}(hhh]j9)}(hdma address of blockh]hdma address of block}(hj(khhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$khMhj%kubah}(h]h ]h"]h$]h&]uh1jhj kubeh}(h]h ]h"]h$]h&]uh1jhj$khMhjjubeh}(h]h ]h"]h$]h&]uh1jhjxjubj9)}(h**Description**h]jz)}(hjJkh]h Description}(hjLkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHkubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjxjubj9)}(hfCaller promises neither device nor driver will again touch this block unless it is first re-allocated.h]hfCaller promises neither device nor driver will again touch this block unless it is first re-allocated.}(hj`khhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjxjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_pool_create (C function)c.dmam_pool_createhNtauh1hhj_hhhNhNubh)}(hhh](h)}(hwstruct dma_pool * dmam_pool_create (const char *name, struct device *dev, size_t size, size_t align, size_t allocation)h]h)}(hustruct dma_pool *dmam_pool_create(const char *name, struct device *dev, size_t size, size_t align, size_t allocation)h](j!)}(hj$h]hstruct}(hjkhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjkhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhMubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjkmodnameN classnameNj\j_)}jb]je)}jXdmam_pool_createsbc.dmam_pool_createasbuh1hhjkhhhjkhMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhMubj2 )}(hj5 h]h*}(hjkhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjkhhhjkhMubh)}(hdmam_pool_createh]h)}(hjkh]hdmam_pool_create}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhjkhMubj)}(hT(const char *name, struct device *dev, size_t size, size_t align, size_t allocation)h](j)}(hconst char *nameh](j!)}(hjeh]hconst}(hj lhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hcharh]hchar}(hj$lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj2lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj2 )}(hj5 h]h*}(hj@lhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjlubh)}(hnameh]hname}(hjMlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hstruct device *devh](j!)}(hj$h]hstruct}(hjflhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjblubj)}(h h]h }(hjslhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjblubh)}(hhh]h)}(hdeviceh]hdevice}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlmodnameN classnameNj\j_)}jb]jkc.dmam_pool_createasbuh1hhjblubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjblubj2 )}(hj5 h]h*}(hjlhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjblubh)}(hdevh]hdev}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjblubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlmodnameN classnameNj\j_)}jb]jkc.dmam_pool_createasbuh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hsizeh]hsize}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hj!mhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#mmodnameN classnameNj\j_)}jb]jkc.dmam_pool_createasbuh1hhjmubj)}(h h]h }(hj?mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(halignh]halign}(hjMmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hsize_t allocationh](h)}(hhh]h)}(hsize_th]hsize_t}(hjimhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfmubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjkmmodnameN classnameNj\j_)}jb]jkc.dmam_pool_createasbuh1hhjbmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbmubh)}(h allocationh]h allocation}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubeh}(h]h ]h"]h$]h&]jj uh1jhjkhhhjkhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjkhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1hhjkhMhjkhhubj )}(hhh]j9)}(hManaged dma_pool_create()h]hManaged dma_pool_create()}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj_hNhNubjp)}(hXA**Parameters** ``const char *name`` name of pool, for diagnostics ``struct device *dev`` device that will be doing the DMA ``size_t size`` size of the blocks in this pool. ``size_t align`` alignment requirement for blocks; must be a power of two ``size_t allocation`` returned blocks won't cross this boundary (or zero) **Description** Managed dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach. **Return** a managed dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.h](j9)}(h**Parameters**h]jz)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubj)}(hhh](j)}(h3``const char *name`` name of pool, for diagnostics h](j)}(h``const char *name``h]j?)}(hjnh]hconst char *name}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubj)}(hhh]j9)}(hname of pool, for diagnosticsh]hname of pool, for diagnostics}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubj)}(h9``struct device *dev`` device that will be doing the DMA h](j)}(h``struct device *dev``h]j?)}(hj9nh]hstruct device *dev}(hj;nhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7nubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj3nubj)}(hhh]j9)}(h!device that will be doing the DMAh]h!device that will be doing the DMA}(hjRnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNnhMhjOnubah}(h]h ]h"]h$]h&]uh1jhj3nubeh}(h]h ]h"]h$]h&]uh1jhjNnhMhjmubj)}(h1``size_t size`` size of the blocks in this pool. h](j)}(h``size_t size``h]j?)}(hjrnh]h size_t size}(hjtnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjlnubj)}(hhh]j9)}(h size of the blocks in this pool.h]h size of the blocks in this pool.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjlnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubj)}(hJ``size_t align`` alignment requirement for blocks; must be a power of two h](j)}(h``size_t align``h]j?)}(hjnh]h size_t align}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjnubj)}(hhh]j9)}(h8alignment requirement for blocks; must be a power of twoh]h8alignment requirement for blocks; must be a power of two}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubj)}(hJ``size_t allocation`` returned blocks won't cross this boundary (or zero) h](j)}(h``size_t allocation``h]j?)}(hjnh]hsize_t allocation}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjnubj)}(hhh]j9)}(h3returned blocks won't cross this boundary (or zero)h]h5returned blocks won’t cross this boundary (or zero)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubeh}(h]h ]h"]h$]h&]uh1jhjmubj9)}(h**Description**h]jz)}(hjoh]h Description}(hj!ohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubj9)}(hlManaged dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach.h]hlManaged dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach.}(hj5ohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubj9)}(h **Return**h]jz)}(hjFoh]hReturn}(hjHohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDoubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubj9)}(hfa managed dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.h](hEa managed dma allocation pool with the requested characteristics, or }(hj\ohhhNhNubj?)}(h``NULL``h]hNULL}(hjdohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\oubh if one can’t be created.}(hj\ohhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_pool_destroy (C function)c.dmam_pool_destroyhNtauh1hhj_hhhNhNubh)}(hhh](h)}(h.void dmam_pool_destroy (struct dma_pool *pool)h]h)}(h-void dmam_pool_destroy(struct dma_pool *pool)h](j)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjohMubh)}(hdmam_pool_destroyh]h)}(hdmam_pool_destroyh]hdmam_pool_destroy}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjohMubj)}(h(struct dma_pool *pool)h]j)}(hstruct dma_pool *poolh](j!)}(hj$h]hstruct}(hjohhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjomodnameN classnameNj\j_)}jb]je)}jXjosbc.dmam_pool_destroyasbuh1hhjoubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj2 )}(hj5 h]h*}(hj&phhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjoubh)}(hpoolh]hpool}(hj3phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjoubah}(h]h ]h"]h$]h&]jj uh1jhjohhhjohMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjohMubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1hhjohMhjohhubj )}(hhh]j9)}(hManaged dma_pool_destroy()h]hManaged dma_pool_destroy()}(hj]phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjZphhubah}(h]h ]h"]h$]h&]uh1jhjohhhjohMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jupj4jupj5j6j7uh1hhhhj_hNhNubjp)}(hy**Parameters** ``struct dma_pool *pool`` dma pool that will be destroyed **Description** Managed dma_pool_destroy().h](j9)}(h**Parameters**h]jz)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}pubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjypubj)}(hhh]j)}(h:``struct dma_pool *pool`` dma pool that will be destroyed h](j)}(h``struct dma_pool *pool``h]j?)}(hjph]hstruct dma_pool *pool}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjpubj)}(hhh]j9)}(hdma pool that will be destroyedh]hdma pool that will be destroyed}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjypubj9)}(h**Description**h]jz)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjypubj9)}(hManaged dma_pool_destroy().h]hManaged dma_pool_destroy().}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjypubeh}(h]h ] kernelindentah"]h$]h&]uh1johj_hhhNhNubeh}(h] dma-poolsah ]h"] dma poolsah$]h&]uh1hhhhhhhhK_ubh)}(hhh](h)}(h More Memory Management Functionsh]h More Memory Management Functions}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj qhhhhhKeubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzap_vma_ptes (C function)c.zap_vma_pteshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hYvoid zap_vma_ptes (struct vm_area_struct *vma, unsigned long address, unsigned long size)h]h)}(hXvoid zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, unsigned long size)h](j)}(hvoidh]hvoid}(hj7qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3qhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjFqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3qhhhjEqhMubh)}(h zap_vma_ptesh]h)}(h zap_vma_ptesh]h zap_vma_ptes}(hjXqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTqubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3qhhhjEqhMubj)}(hG(struct vm_area_struct *vma, unsigned long address, unsigned long size)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjtqhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjpqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpqubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjqmodnameN classnameNj\j_)}jb]je)}jXjZqsbc.zap_vma_ptesasbuh1hhjpqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpqubj2 )}(hj5 h]h*}(hjqhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjpqubh)}(hvmah]hvma}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpqubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlqubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(haddressh]haddress}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlqubj)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hj7rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3rubj)}(h h]h }(hjErhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3rubj)}(hlongh]hlong}(hjSrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3rubj)}(h h]h }(hjarhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3rubh)}(hsizeh]hsize}(hjorhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3rubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlqubeh}(h]h ]h"]h$]h&]jj uh1jhj3qhhhjEqhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/qhhhjEqhMubah}(h]j*qah ](jjeh"]h$]h&]jj)jhuh1hhjEqhMhj,qhhubj )}(hhh]j9)}(hremove ptes mapping the vmah]hremove ptes mapping the vma}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jhj,qhhhjEqhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jrj4jrj5j6j7uh1hhhhj qhNhNubjp)}(hXW**Parameters** ``struct vm_area_struct *vma`` vm_area_struct holding ptes to be zapped ``unsigned long address`` starting address of pages to zap ``unsigned long size`` number of bytes to zap **Description** This function only unmaps ptes assigned to VM_PFNMAP vmas. The entire address range must be fully contained within the vma.h](j9)}(h**Parameters**h]jz)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjrubj)}(hhh](j)}(hH``struct vm_area_struct *vma`` vm_area_struct holding ptes to be zapped h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjrh]hstruct vm_area_struct *vma}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjrubj)}(hhh]j9)}(h(vm_area_struct holding ptes to be zappedh]h(vm_area_struct holding ptes to be zapped}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjrubj)}(h;``unsigned long address`` starting address of pages to zap h](j)}(h``unsigned long address``h]j?)}(hjsh]hunsigned long address}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hj subj)}(hhh]j9)}(h starting address of pages to zaph]h starting address of pages to zap}(hj,shhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(shM hj)subah}(h]h ]h"]h$]h&]uh1jhj subeh}(h]h ]h"]h$]h&]uh1jhj(shM hjrubj)}(h.``unsigned long size`` number of bytes to zap h](j)}(h``unsigned long size``h]j?)}(hjLsh]hunsigned long size}(hjNshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjFsubj)}(hhh]j9)}(hnumber of bytes to zaph]hnumber of bytes to zap}(hjeshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjashM hjbsubah}(h]h ]h"]h$]h&]uh1jhjFsubeh}(h]h ]h"]h$]h&]uh1jhjashM hjrubeh}(h]h ]h"]h$]h&]uh1jhjrubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjrubj9)}(h:This function only unmaps ptes assigned to VM_PFNMAP vmas.h]h:This function only unmaps ptes assigned to VM_PFNMAP vmas.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjrubj9)}(h@The entire address range must be fully contained within the vma.h]h@The entire address range must be fully contained within the vma.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_insert_pages (C function)c.vm_insert_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hmint vm_insert_pages (struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)h]h)}(hlint vm_insert_pages(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubh)}(hvm_insert_pagesh]h)}(hvm_insert_pagesh]hvm_insert_pages}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjshMubj)}(hY(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hj%thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj6thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3tubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8tmodnameN classnameNj\j_)}jb]je)}jXjssbc.vm_insert_pagesasbuh1hhjtubj)}(h h]h }(hjVthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hjdthhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(hvmah]hvma}(hjqthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(haddrh]haddr}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubj)}(hstruct page **pagesh](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(hpageh]hpage}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]jRtc.vm_insert_pagesasbuh1hhjtubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hj%uhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubj2 )}(hj5 h]h*}(hj2uhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(hpagesh]hpages}(hj?uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubj)}(hunsigned long *numh](j)}(hunsignedh]hunsigned}(hjXuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTuubj)}(h h]h }(hjfuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTuubj)}(hlongh]hlong}(hjtuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTuubj2 )}(hj5 h]h*}(hjuhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjTuubh)}(hnumh]hnum}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTuubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjtubeh}(h]h ]h"]h$]h&]jj uh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1hhjshMhjshhubj )}(hhh]j9)}(h;insert multiple pages into user vma, batching the pmd lock.h]h;insert multiple pages into user vma, batching the pmd lock.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjuubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjvh]hstruct vm_area_struct *vma}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjvubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hj!vhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjuubj)}(h@``unsigned long addr`` target start user address of these pages h](j)}(h``unsigned long addr``h]j?)}(hjAvh]hunsigned long addr}(hjCvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?vubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj;vubj)}(hhh]j9)}(h(target start user address of these pagesh]h(target start user address of these pages}(hjZvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVvhMhjWvubah}(h]h ]h"]h$]h&]uh1jhj;vubeh}(h]h ]h"]h$]h&]uh1jhjVvhMhjuubj)}(h,``struct page **pages`` source kernel pages h](j)}(h``struct page **pages``h]j?)}(hjzvh]hstruct page **pages}(hj|vhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjtvubj)}(hhh]j9)}(hsource kernel pagesh]hsource kernel pages}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjtvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjuubj)}(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]j?)}(hjvh]hunsigned long *num}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjvubj)}(hhh]j9)}(hvin: 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 }(hjvhhhNhNubjK)}(h*not*h]hnot}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjvubh6 mapped. (0 means all pages were successfully mapped).}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjuubeh}(h]h ]h"]h$]h&]uh1jhjuubj9)}(h**Description**h]jz)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjuubj9)}(h>Preferred over vm_insert_page() when inserting multiple pages.h]h>Preferred over vm_insert_page() when inserting multiple pages.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjuubj9)}(hIn 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]hIn case of error, we may have mapped a subset of the provided pages. It is the caller’s responsibility to account for this case.}(hj&whhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjuubj9)}(h3The same restrictions apply as in vm_insert_page().h]h3The same restrictions apply as in vm_insert_page().}(hj5whhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_insert_page (C function)c.vm_insert_pagehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hVint vm_insert_page (struct vm_area_struct *vma, unsigned long addr, struct page *page)h]h)}(hUint vm_insert_page(struct vm_area_struct *vma, unsigned long addr, struct page *page)h](j)}(hinth]hint}(hjdwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`whhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hjswhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`whhhjrwhM ubh)}(hvm_insert_pageh]h)}(hvm_insert_pageh]hvm_insert_page}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`whhhjrwhM ubj)}(hC(struct vm_area_struct *vma, unsigned long addr, struct page *page)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjwhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjwmodnameN classnameNj\j_)}jb]je)}jXjwsbc.vm_insert_pageasbuh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj2 )}(hj5 h]h*}(hjwhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjwubh)}(hvmah]hvma}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjwubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hj!xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hlongh]hlong}(hj/xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hj=xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(haddrh]haddr}(hjKxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjwubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjdxhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`xubj)}(h h]h }(hjqxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`xubh)}(hhh]h)}(hpageh]hpage}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjxmodnameN classnameNj\j_)}jb]jwc.vm_insert_pageasbuh1hhj`xubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`xubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`xubh)}(hpageh]hpage}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`xubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjwubeh}(h]h ]h"]h$]h&]jj uh1jhj`whhhjrwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\whhhjrwhM ubah}(h]jWwah ](jjeh"]h$]h&]jj)jhuh1hhjrwhM hjYwhhubj )}(hhh]j9)}(h insert single page into user vmah]h insert single page into user vma}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjxhhubah}(h]h ]h"]h$]h&]uh1jhjYwhhhjrwhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjyh]h Parameters}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjyubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj&yh]hstruct vm_area_struct *vma}(hj(yhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$yubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hj yubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hj?yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;yhM hjhj]yubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjYyubj)}(hhh]j9)}(h target user address of this pageh]h target user address of this page}(hjxyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjtyhM hjuyubah}(h]h ]h"]h$]h&]uh1jhjYyubeh}(h]h ]h"]h$]h&]uh1jhjtyhM hjyubj)}(h)``struct page *page`` source kernel page h](j)}(h``struct page *page``h]j?)}(hjyh]hstruct page *page}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjyubj)}(hhh]j9)}(hsource kernel pageh]hsource kernel page}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhM hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM hjyubeh}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjyubj9)}(hThis 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]hThis 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().}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjyubj9)}(hThe 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]hThe 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()).}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjyubj9)}(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!}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM" hjyubj9)}(h&The page does not need to be reserved.h]h&The page does not need to be reserved.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM( hjyubj9)}(hUsually 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]hUsually this function is called from f_op->mmap() handler under mm->mmap_lock write-lock, so it can change vma->vm_flags. Caller must set VM_MIXEDMAP on vma if it wants to call this function from other places, for example from page-fault handler.}(hj%zhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM* hjyubj9)}(h **Return**h]jz)}(hj6zh]hReturn}(hj8zhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4zubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM/ hjyubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjPzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLzubh+ on success, negative error code otherwise.}(hjLzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM/ hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_map_pages (C function)c.vm_map_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hUint vm_map_pages (struct vm_area_struct *vma, struct page **pages, unsigned long num)h]h)}(hTint vm_map_pages(struct vm_area_struct *vma, struct page **pages, unsigned long num)h](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMf ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMf ubh)}(h vm_map_pagesh]h)}(h vm_map_pagesh]h vm_map_pages}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjzhMf ubj)}(hD(struct vm_area_struct *vma, struct page **pages, unsigned long num)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjzhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjzmodnameN classnameNj\j_)}jb]je)}jXjzsbc.vm_map_pagesasbuh1hhjzubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj2 )}(hj5 h]h*}(hj{hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjzubh)}(hvmah]hvma}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjzubj)}(hstruct page **pagesh](j!)}(hj$h]hstruct}(hj8{hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj4{ubj)}(h h]h }(hjE{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4{ubh)}(hhh]h)}(hpageh]hpage}(hjV{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjX{modnameN classnameNj\j_)}jb]j{c.vm_map_pagesasbuh1hhj4{ubj)}(h h]h }(hjt{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4{ubj2 )}(hj5 h]h*}(hj{hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj4{ubj2 )}(hj5 h]h*}(hj{hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj4{ubh)}(hpagesh]hpages}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjzubj)}(hunsigned long numh](j)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hlongh]hlong}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hnumh]hnum}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjzubeh}(h]h ]h"]h$]h&]jj uh1jhjzhhhjzhMf ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjzhMf ubah}(h]j|zah ](jjeh"]h$]h&]jj)jhuh1hhjzhMf hj~zhhubj )}(hhh]j9)}(h6maps range of kernel pages starts with non zero offseth]h6maps range of kernel pages starts with non zero offset}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMf hj|hhubah}(h]h ]h"]h$]h&]uh1jhj~zhhhjzhMf ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/|j4j/|j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj9|h]h Parameters}(hj;|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7|ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMj hj3|ubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjX|h]hstruct vm_area_struct *vma}(hjZ|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjV|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMg hjR|ubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjq|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjm|hMg hjn|ubah}(h]h ]h"]h$]h&]uh1jhjR|ubeh}(h]h ]h"]h$]h&]uh1jhjm|hMg hjO|ubj)}(h@``struct page **pages`` pointer to array of source kernel pages h](j)}(h``struct page **pages``h]j?)}(hj|h]hstruct page **pages}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMh hj|ubj)}(hhh]j9)}(h'pointer to array of source kernel pagesh]h'pointer to array of source kernel pages}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMh hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMh hjO|ubj)}(h4``unsigned long num`` number of pages in page array h](j)}(h``unsigned long num``h]j?)}(hj|h]hunsigned long num}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMi hj|ubj)}(hhh]j9)}(hnumber of pages in page arrayh]hnumber of pages in page array}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMi hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMi hjO|ubeh}(h]h ]h"]h$]h&]uh1jhj3|ubj9)}(h**Description**h]jz)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMk hj3|ubj9)}(hVMaps an object consisting of **num** pages, catering for the user's requested vm_pgoffh](hMaps an object consisting of }(hj}hhhNhNubjz)}(h**num**h]hnum}(hj#}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh4 pages, catering for the user’s requested vm_pgoff}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMk hj3|ubj9)}(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<}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMn hj3|ubj9)}(h **Context**h]jz)}(hjM}h]hContext}(hjO}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK}ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMt hj3|ubj9)}(h)Process context. Called by mmap handlers.h]h)Process context. Called by mmap handlers.}(hjc}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMt hj3|ubj9)}(h **Return**h]jz)}(hjt}h]hReturn}(hjv}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr}ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMv hj3|ubj9)}(h&0 on success and error code otherwise.h]h&0 on success and error code otherwise.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMu hj3|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_map_pages_zero (C function)c.vm_map_pages_zerohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hZint vm_map_pages_zero (struct vm_area_struct *vma, struct page **pages, unsigned long num)h]h)}(hYint vm_map_pages_zero(struct vm_area_struct *vma, struct page **pages, unsigned long num)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hM ubh)}(hvm_map_pages_zeroh]h)}(hvm_map_pages_zeroh]hvm_map_pages_zero}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhj}hM ubj)}(hD(struct vm_area_struct *vma, struct page **pages, unsigned long num)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj}hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~modnameN classnameNj\j_)}jb]je)}jXj}sbc.vm_map_pages_zeroasbuh1hhj}ubj)}(h h]h }(hj4~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hjB~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hvmah]hvma}(hjO~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubj)}(hstruct page **pagesh](j!)}(hj$h]hstruct}(hjh~hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjd~ubj)}(h h]h }(hju~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd~ubh)}(hhh]h)}(hpageh]hpage}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~modnameN classnameNj\j_)}jb]j0~c.vm_map_pages_zeroasbuh1hhjd~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd~ubj2 )}(hj5 h]h*}(hj~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjd~ubj2 )}(hj5 h]h*}(hj~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjd~ubh)}(hpagesh]hpages}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjd~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubj)}(hunsigned long numh](j)}(hunsignedh]hunsigned}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hnumh]hnum}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubeh}(h]h ]h"]h$]h&]jj uh1jhj}hhhj}hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhj}hM ubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1hhj}hM hj}hhubj )}(hhh]j9)}(h1map range of kernel pages starts with zero offseth]h1map range of kernel pages starts with zero offset}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjDhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h@``struct page **pages`` pointer to array of source kernel pages h](j)}(h``struct page **pages``h]j?)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(h'pointer to array of source kernel pagesh]h'pointer to array of source kernel pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h4``unsigned long num`` number of pages in page array h](j)}(h``unsigned long num``h]j?)}(hjh]hunsigned long num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(hnumber of pages in page arrayh]hnumber of pages in page array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjcubj9)}(h**Description**h]jz)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj9)}(hSimilar 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]hSimilar 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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj9)}(h **Context**h]jz)}(hj\h]hContext}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj9)}(h)Process context. Called by mmap handlers.h]h)Process context. Called by mmap handlers.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubj9)}(h&0 on success and error code otherwise.h]h&0 on success and error code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ vmf_insert_pfn_prot (C function)c.vmf_insert_pfn_prothNtauh1hhj qhhhNhNubh)}(hhh](h)}(hsvm_fault_t vmf_insert_pfn_prot (struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)h]h)}(hrvm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)h](h)}(hhh]h)}(h vm_fault_th]h vm_fault_t}(hjˀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȀubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj̀modnameN classnameNj\j_)}jb]je)}jXvmf_insert_pfn_protsbc.vmf_insert_pfn_protasbuh1hhjĀhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĀhhhjhM ubh)}(hvmf_insert_pfn_proth]h)}(hjh]hvmf_insert_pfn_prot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjĀhhhjhM ubj)}(hT(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:modnameN classnameNj\j_)}jb]jc.vmf_insert_pfn_protasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjdhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjہhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjׁubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjׁubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjׁubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjׁubh)}(hpfnh]hpfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjׁubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgprot_t pgproth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj1modnameN classnameNj\j_)}jb]jc.vmf_insert_pfn_protasbuh1hhj(ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hpgproth]hpgprot}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjĀhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h5insert single pfn into user vma with specified pgproth]h5insert single pfn into user vma with specified pgprot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjƂh]hstruct vm_area_struct *vma}(hjȂhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjĂubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hj߂hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjۂhM hj܂ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۂhM hjubj)}(h8``unsigned long addr`` target user address of this page h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(h target user address of this pageh]h target user address of this page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h(``unsigned long pfn`` source kernel pfn h](j)}(h``unsigned long pfn``h]j?)}(hj8h]hunsigned long pfn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hj2ubj)}(hhh]j9)}(hsource kernel pfnh]hsource kernel pfn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhM hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM hjubj)}(h7``pgprot_t pgprot`` pgprot flags for the inserted page h](j)}(h``pgprot_t pgprot``h]j?)}(hjqh]hpgprot_t pgprot}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjkubj)}(hhh]j9)}(h"pgprot flags for the inserted pageh]h"pgprot flags for the inserted page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(hlThis is exactly like vmf_insert_pfn(), except that it allows drivers to override pgprot on a per-page basis.h]hlThis is exactly like vmf_insert_pfn(), except that it allows drivers to override pgprot on a per-page basis.}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(hThis 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]hThis 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уhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(hpgprot 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 }(hjhhhNhNubjz)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhG when drivers set caching- and encryption bits different than those of }(hjhhhNhNubjz)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhJ, because the caching- or encryption mode may not be known at mmap() time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(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](hThis is ok as long as }(hjhhhNhNubjz)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX$ 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()).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(hAlso 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]hAlso 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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(h **Context**h]jz)}(hjEh]hContext}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(h4Process context. May allocate using ``GFP_KERNEL``.h](h%Process context. May allocate using }(hj[hhhNhNubj?)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(h **Return**h]jz)}(hj~h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj9)}(hvm_fault_t value.h]hvm_fault_t value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn (C function)c.vmf_insert_pfnhNtauh1hhj qhhhNhNubh)}(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]h)}(h vm_fault_th]h vm_fault_t}(hjƄhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjÄubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjȄmodnameN classnameNj\j_)}jb]je)}jXvmf_insert_pfnsbc.vmf_insert_pfnasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hvmf_insert_pfnh]h)}(hjh]hvmf_insert_pfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(hC(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj5modnameN classnameNj\j_)}jb]jc.vmf_insert_pfnasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj_hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjօhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҅ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҅ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҅ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҅ubh)}(hpfnh]hpfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj҅ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(hinsert single pfn into user vmah]hinsert single pfn into user vma}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjyh]hstruct vm_area_struct *vma}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjsubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM hjpubj)}(h8``unsigned long addr`` target user address of this page h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(h target user address of this pageh]h target user address of this page}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdžhM hjȆubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjdžhM hjpubj)}(h(``unsigned long pfn`` source kernel pfn h](j)}(h``unsigned long pfn``h]j?)}(hjh]hunsigned long pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(hsource kernel pfnh]hsource kernel pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj9)}(h**Description**h]jz)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(hSimilar to vm_insert_page, this allows drivers to insert individual pages they've allocated into a user vma. Same comments apply.h]hSimilar to vm_insert_page, this allows drivers to insert individual pages they’ve allocated into a user vma. Same comments apply.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(hThis 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]hThis function should only be called from a vm_ops->fault handler, and in that case the handler should return the result of this function.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(hvma cannot be a COW mapping.h]hvma cannot be a COW mapping.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(htAs this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB.h]htAs this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(h **Context**h]jz)}(hjzh]hContext}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(h4Process context. May allocate using ``GFP_KERNEL``.h](h%Process context. May allocate using }(hjhhhNhNubj?)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubj9)}(hvm_fault_t value.h]hvm_fault_t value.}(hjɇhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌremap_pfn_range (C function)c.remap_pfn_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hzint remap_pfn_range (struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)h]h)}(hyint remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMQ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQ ubh)}(hremap_pfn_rangeh]h)}(hremap_pfn_rangeh]hremap_pfn_range}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMQ ubj)}(hf(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj5hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUmodnameN classnameNj\j_)}jb]je)}jXjsbc.remap_pfn_rangeasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj1ubh)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjÈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjшhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hj߈hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(h pgprot_t proth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]joc.remap_pfn_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hproth]hprot}(hjɉhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMQ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMQ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMQ hjhhubj )}(hhh]j9)}(h remap kernel memory to userspaceh]h remap kernel memory to userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMQ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMU hjubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj4h]hstruct vm_area_struct *vma}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMR hj.ubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMR hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMR hj+ubj)}(hD``unsigned long addr`` target page aligned user address to start at h](j)}(h``unsigned long addr``h]j?)}(hjmh]hunsigned long addr}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMS hjgubj)}(hhh]j9)}(h,target page aligned user address to start ath]h,target page aligned user address to start at}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMS hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMS hj+ubj)}(hJ``unsigned long pfn`` page frame number of kernel physical memory address h](j)}(h``unsigned long pfn``h]j?)}(hjh]hunsigned long pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMT hjubj)}(hhh]j9)}(h3page frame number of kernel physical memory addressh]h3page frame number of kernel physical memory address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMT hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMT hj+ubj)}(h,``unsigned long size`` size of mapping area h](j)}(h``unsigned long size``h]j?)}(hjߊh]hunsigned long size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj݊ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMU hjيubj)}(hhh]j9)}(hsize of mapping areah]hsize of mapping area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMU hjubah}(h]h ]h"]h$]h&]uh1jhjيubeh}(h]h ]h"]h$]h&]uh1jhjhMU hj+ubj)}(h9``pgprot_t prot`` page protection flags for this mapping h](j)}(h``pgprot_t prot``h]j?)}(hjh]h pgprot_t prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMV hjubj)}(hhh]j9)}(h&page protection flags for this mappingh]h&page protection flags for this mapping}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMV hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMV hj+ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Note**h]jz)}(hjSh]hNote}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMX hjubj9)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMX hjubj9)}(h **Return**h]jz)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMZ hjubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh+ on success, negative error code otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMZ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_iomap_memory (C function)c.vm_iomap_memoryhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hVint vm_iomap_memory (struct vm_area_struct *vma, phys_addr_t start, unsigned long len)h]h)}(hUint vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)h](j)}(hinth]hint}(hj͋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɋhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hj܋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɋhhhjۋhM ubh)}(hvm_iomap_memoryh]h)}(hvm_iomap_memoryh]hvm_iomap_memory}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjɋhhhjۋhM ubj)}(hB(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj*modnameN classnameNj\j_)}jb]je)}jXjsbc.vm_iomap_memoryasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjVhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hphys_addr_t starth](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jDc.vm_iomap_memoryasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjҌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjɋhhhjۋhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjŋhhhjۋhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjۋhM hj‹hhubj )}(hhh]j9)}(hremap memory to userspaceh]hremap memory to userspace}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hj#hhubah}(h]h ]h"]h$]h&]uh1jhj‹hhhjۋhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjgh]hstruct vm_area_struct *vma}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjaubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj^ubj)}(h@``phys_addr_t start`` start of the physical memory to be mapped h](j)}(h``phys_addr_t start``h]j?)}(hjh]hphys_addr_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjubj)}(hhh]j9)}(h)start of the physical memory to be mappedh]h)start of the physical memory to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj^ubj)}(h#``unsigned long len`` size of area h](j)}(h``unsigned long len``h]j?)}(hjٍh]hunsigned long len}(hjۍhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj׍ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjӍubj)}(hhh]j9)}(h size of areah]h size of area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjӍubeh}(h]h ]h"]h$]h&]uh1jhjhM hj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubj9)}(hThis 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]hThis 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*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubj9)}(hrNOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar.h]hrNOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubj9)}(h **Return**h]jz)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubj9)}(h0``0`` on success, negative error code otherwise.h](j?)}(h``0``h]h0}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubh+ on success, negative error code otherwise.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ unmap_mapping_pages (C function)c.unmap_mapping_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hcvoid unmap_mapping_pages (struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)h]h)}(hbvoid unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hunmap_mapping_pagesh]h)}(hunmap_mapping_pagesh]hunmap_mapping_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hJ(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjڎhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj֎ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֎ubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.unmap_mapping_pagesasbuh1hhj֎ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֎ubj2 )}(hj5 h]h*}(hj&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj֎ubh)}(hmappingh]hmapping}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֎ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҎubj)}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjQmodnameN classnameNj\j_)}jb]jc.unmap_mapping_pagesasbuh1hhjHubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hstarth]hstart}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҎubj)}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.unmap_mapping_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnrh]hnr}(hjÏhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҎubj)}(hbool even_cowsh](j)}(hj)h]hbool}(hj܏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؏ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؏ubh)}(h even_cowsh]h even_cows}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj؏ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҎubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hUnmap pages from processes.h]hUnmap pages from processes.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj=ubj)}(hhh](j)}(hU``struct address_space *mapping`` The address space containing pages to be unmapped. h](j)}(h!``struct address_space *mapping``h]j?)}(hjbh]hstruct address_space *mapping}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj\ubj)}(hhh]j9)}(h2The address space containing pages to be unmapped.h]h2The address space containing pages to be unmapped.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjYubj)}(h6``pgoff_t start`` Index of first page to be unmapped. h](j)}(h``pgoff_t start``h]j?)}(hjh]h pgoff_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(h#Index of first page to be unmapped.h]h#Index of first page to be unmapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(hK``pgoff_t nr`` Number of pages to be unmapped. 0 to unmap to end of file. h](j)}(h``pgoff_t nr``h]j?)}(hjԐh]h pgoff_t nr}(hj֐hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjҐubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjΐubj)}(hhh]j9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjΐubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(h>``bool even_cows`` Whether to unmap even private COWed pages. h](j)}(h``bool even_cows``h]j?)}(hj h]hbool even_cows}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(h*Whether to unmap even private COWed pages.h]h*Whether to unmap even private COWed pages.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubj9)}(h**Description**h]jz)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj=ubj9)}(hUnmap 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]hUnmap 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^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ unmap_mapping_range (C function)c.unmap_mapping_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(huvoid unmap_mapping_range (struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)h]h)}(htvoid unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hunmap_mapping_rangeh]h)}(hunmap_mapping_rangeh]hunmap_mapping_range}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h\(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjʑhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjƑubj)}(h h]h }(hjבhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƑubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.unmap_mapping_rangeasbuh1hhjƑubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƑubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjƑubh)}(hmappingh]hmapping}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƑubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj‘ubj)}(hloff_t const holebeginh](h)}(hhh]h)}(hloff_th]hloff_t}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjAmodnameN classnameNj\j_)}jb]jc.unmap_mapping_rangeasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj!)}(hjeh]hconst}(hjkhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj8ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(h holebeginh]h holebegin}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj‘ubj)}(hloff_t const holelenh](h)}(hhh]h)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.unmap_mapping_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hjeh]hconst}(hjΒhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjےhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hholelenh]hholelen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj‘ubj)}(h int even_cowsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h even_cowsh]h even_cows}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj‘ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hunmap the portion of all mmaps in the specified address_space corresponding to the specified byte range in the underlying file.h]hunmap the portion of all mmaps in the specified address_space corresponding to the specified byte range in the underlying file.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j`j4j`j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM#hjdubj)}(hhh](j)}(hU``struct address_space *mapping`` the address space containing mmaps to be unmapped. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM#hjubj)}(hhh]j9)}(h2the address space containing mmaps to be unmapped.h]h2the address space containing mmaps to be unmapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(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]j?)}(hj“h]hloff_t const holebegin}(hjēhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM(hjubj)}(hhh]j9)}(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ۓhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM$hjؓubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjדhM(hjubj)}(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]j?)}(hjh]hloff_t const holelen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM+hjubj)}(hhh]j9)}(hsize 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]hsize 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(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]j?)}(hj6h]h int even_cows}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM,hj0ubj)}(hhh]j9)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhM,hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM,hjubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ follow_pfnmap_start (C function)c.follow_pfnmap_starthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9int follow_pfnmap_start (struct follow_pfnmap_args *args)h]h)}(h8int follow_pfnmap_start(struct follow_pfnmap_args *args)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMrubh)}(hfollow_pfnmap_starth]h)}(hfollow_pfnmap_starth]hfollow_pfnmap_start}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMrubj)}(h!(struct follow_pfnmap_args *args)h]j)}(hstruct follow_pfnmap_args *argsh](j!)}(hj$h]hstruct}(hj̔hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjȔubj)}(h h]h }(hjٔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȔubh)}(hhh]h)}(hfollow_pfnmap_argsh]hfollow_pfnmap_args}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.follow_pfnmap_startasbuh1hhjȔubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȔubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjȔubh)}(hargsh]hargs}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȔubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjĔubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMrubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMrhjhhubj )}(hhh]j9)}(h/Look up a pfn mapping at a user virtual addressh]h/Look up a pfn mapping at a user virtual address}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMrhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMrubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMvhjkubj)}(hhh]j)}(hM``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** h](j)}(h#``struct follow_pfnmap_args *args``h]j?)}(hjh]hstruct follow_pfnmap_args *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMshjubj)}(hhh]j9)}(h(Pointer to struct **follow_pfnmap_args**h](hPointer to struct }(hjhhhNhNubjz)}(h**follow_pfnmap_args**h]hfollow_pfnmap_args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjٕh]h Description}(hjەhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjוubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMuhjkubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMuhjkubj9)}(hAfter 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]hAfter 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMyhjkubj9)}(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](h3During the start() and end() calls, the results in }(hj hhhNhNubjz)}(h**args**h]hargs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh[ will be valid as proper locks will be held. After the end() is called, all the fields in }(hj hhhNhNubjz)}(h**follow_pfnmap_args**h]hfollow_pfnmap_args}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 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 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM}hjkubj9)}(hIf 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]hIf 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@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjkubj9)}(hOnly 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]hOnly 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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjkubj9)}(h5This function must not be used to modify PTE content.h]h5This function must not be used to modify PTE content.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjkubj9)}(h **Return**h]jz)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjkubj9)}(h$zero on success, negative otherwise.h]h$zero on success, negative otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfollow_pfnmap_end (C function)c.follow_pfnmap_endhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h8void follow_pfnmap_end (struct follow_pfnmap_args *args)h]h)}(h7void follow_pfnmap_end(struct follow_pfnmap_args *args)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjÖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj–hMubh)}(hfollow_pfnmap_endh]h)}(hfollow_pfnmap_endh]hfollow_pfnmap_end}(hjՖhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjіubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj–hMubj)}(h!(struct follow_pfnmap_args *args)h]j)}(hstruct follow_pfnmap_args *argsh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfollow_pfnmap_argsh]hfollow_pfnmap_args}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjזsbc.follow_pfnmap_endasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj=hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hargsh]hargs}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj–hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj–hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj–hMhjhhubj )}(hhh]j9)}(h#End a follow_pfnmap_start() processh]h#End a follow_pfnmap_start() process}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj–hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j)}(hM``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** h](j)}(h#``struct follow_pfnmap_args *args``h]j?)}(hjh]hstruct follow_pfnmap_args *args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(h(Pointer to struct **follow_pfnmap_args**h](hPointer to struct }(hjΗhhhNhNubjz)}(h**follow_pfnmap_args**h]hfollow_pfnmap_args}(hj֗hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΗubeh}(h]h ]h"]h$]h&]uh1j8hjʗhMhj˗ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʗhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj9)}(hdMust be used in pair of follow_pfnmap_start(). See the start() function above for more information.h]hdMust be used in pair of follow_pfnmap_start(). See the start() function above for more information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ generic_access_phys (C function)c.generic_access_physhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hgint generic_access_phys (struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)h]h)}(hfint generic_access_phys(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjQhMubh)}(hgeneric_access_physh]h)}(hgeneric_access_physh]hgeneric_access_phys}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?hhhjQhMubj)}(hO(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)h](j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjfsbc.generic_access_physasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj2 )}(hj5 h]h*}(hj̘hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj|ubh)}(hvmah]hvma}(hj٘hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(h void *bufh](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj2 )}(hj5 h]h*}(hj_hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubh)}(hbufh]hbuf}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(hint lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(h int writeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjșhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwriteh]hwrite}(hj֙hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubeh}(h]h ]h"]h$]h&]jj uh1jhj?hhhjQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;hhhjQhMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1hhjQhMhj8hhubj )}(hhh]j9)}(h,generic implementation for iomem mmap accessh]h,generic implementation for iomem mmap access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh](j)}(h1``struct vm_area_struct *vma`` the vma to access h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjAh]hstruct vm_area_struct *vma}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj;ubj)}(hhh]j9)}(hthe vma to accessh]hthe vma to access}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubj)}(hM``unsigned long addr`` userspace address, not relative offset within **vma** h](j)}(h``unsigned long addr``h]j?)}(hjzh]hunsigned long addr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjtubj)}(hhh]j9)}(h5userspace address, not relative offset within **vma**h](h.userspace address, not relative offset within }(hjhhhNhNubjz)}(h**vma**h]hvma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhj8ubj)}(h#``void *buf`` buffer to read/write h](j)}(h ``void *buf``h]j?)}(hjh]h void *buf}(hjÚhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(hbuffer to read/writeh]hbuffer to read/write}(hjښhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj֚hMhjךubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֚hMhj8ubj)}(h``int len`` length of transfer h](j)}(h ``int len``h]j?)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(hlength of transferh]hlength of transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj8ubj)}(h@``int write`` set to FOLL_WRITE when writing, otherwise reading h](j)}(h ``int write``h]j?)}(hj3h]h int write}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj-ubj)}(hhh]j9)}(h1set to FOLL_WRITE when writing, otherwise readingh]h1set to FOLL_WRITE when writing, otherwise reading}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj8ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj9)}(hThis 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 }(hjhhhNhNubh)}(h<:c:type:`vm_operations_struct.access `h]j?)}(hjh]hvm_operations_struct.access}(hjhhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:vm_operations_structuh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubhM for an iomem mapping. This callback is used by access_process_vm() when the }(hjhhhNhNubjz)}(h**vma**h]hvma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not page based.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcopy_remote_vm_str (C function)c.copy_remote_vm_strhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hpint copy_remote_vm_str (struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)h]h)}(hoint copy_remote_vm_str(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hcopy_remote_vm_strh]h)}(hcopy_remote_vm_strh]hcopy_remote_vm_str}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hY(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)h](j)}(hstruct task_struct *tskh](j!)}(hj$h]hstruct}(hj%hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]h)}(h task_structh]h task_struct}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjEmodnameN classnameNj\j_)}jb]je)}jXj sbc.copy_remote_vm_strasbuh1hhj!ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj2 )}(hj5 h]h*}(hjqhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj!ubh)}(htskh]htsk}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjϜhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h void *bufh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hlenh]hlen}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int gup_flagsh](j)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(h gup_flagsh]h gup_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jۛah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjݛhhubj )}(hhh]j9)}(h3copy a string from another process's address space.h]h5copy a string from another process’s address space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjݛhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jٝj4jٝj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct task_struct *tsk`` the task of the target address space ``unsigned long addr`` start address to read from ``void *buf`` destination buffer ``int len`` number of bytes to copy ``unsigned int gup_flags`` flags modifying lookup behaviour **Description** The caller must hold a reference on **mm**. **Return** number of bytes copied from **addr** (source) to **buf** (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjݝubj)}(hhh](j)}(hA``struct task_struct *tsk`` the task of the target address space h](j)}(h``struct task_struct *tsk``h]j?)}(hjh]hstruct task_struct *tsk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(h$the task of the target address spaceh]h$the task of the target address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``unsigned long addr`` start address to read from h](j)}(h``unsigned long addr``h]j?)}(hj;h]hunsigned long addr}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj5ubj)}(hhh]j9)}(hstart address to read fromh]hstart address to read from}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubj)}(h!``void *buf`` destination buffer h](j)}(h ``void *buf``h]j?)}(hjth]h void *buf}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjnubj)}(hhh]j9)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``int len`` number of bytes to copy h](j)}(h ``int len``h]j?)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(hnumber of bytes to copyh]hnumber of bytes to copy}(hjƞhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjžhMhjÞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjžhMhjubj)}(h<``unsigned int gup_flags`` flags modifying lookup behaviour h](j)}(h``unsigned int gup_flags``h]j?)}(hjh]hunsigned int gup_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(hhh]j9)}(h flags modifying lookup behaviourh]h flags modifying lookup behaviour}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjݝubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjݝubj9)}(h+The caller must hold a reference on **mm**.h](h$The caller must hold a reference on }(hj7hhhNhNubjz)}(h**mm**h]hmm}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjݝubj9)}(h **Return**h]jz)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjݝubj9)}(hnumber of bytes copied from **addr** (source) to **buf** (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.h](hnumber of bytes copied from }(hjphhhNhNubjz)}(h**addr**h]haddr}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh (source) to }(hjphhhNhNubjz)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjݝubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$get_pfnblock_flags_mask (C function)c.get_pfnblock_flags_maskhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hfunsigned long get_pfnblock_flags_mask (const struct page *page, unsigned long pfn, unsigned long mask)h]h)}(heunsigned long get_pfnblock_flags_mask(const struct page *page, unsigned long pfn, unsigned long mask)h](j)}(hunsignedh]hunsigned}(hjßhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMeubj)}(h h]h }(hjҟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjџhMeubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjџhMeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjџhMeubh)}(hget_pfnblock_flags_maskh]h)}(hget_pfnblock_flags_maskh]hget_pfnblock_flags_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjџhMeubj)}(h@(const struct page *page, unsigned long pfn, unsigned long mask)h](j)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hj7hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjWmodnameN classnameNj\j_)}jb]je)}jXjsbc.get_pfnblock_flags_maskasbuh1hhjubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjŠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjӠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmaskh]hmask}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjџhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjџhMeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjџhMehjhhubj )}(hhh]j9)}(hMReturn the requested group of flags for the pageblock_nr_pages block of pagesh]hMReturn the requested group of flags for the pageblock_nr_pages block of pages}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMehjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjџhMeubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtj4jtj5j6j7uh1hhhhj qhNhNubjp)}(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 flagsh](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMihjxubj)}(hhh](j)}(hB``const struct page *page`` The page within the block of interest h](j)}(h``const struct page *page``h]j?)}(hjh]hconst struct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMfhjubj)}(hhh]j9)}(h%The page within the block of interesth]h%The page within the block of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h3``unsigned long pfn`` The target page frame number h](j)}(h``unsigned long pfn``h]j?)}(hj֡h]hunsigned long pfn}(hjءhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԡubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMghjСubj)}(hhh]j9)}(hThe target page frame numberh]hThe target page frame number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMghjubah}(h]h ]h"]h$]h&]uh1jhjСubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubj)}(hE``unsigned long mask`` mask of bits that the caller is interested in h](j)}(h``unsigned long mask``h]j?)}(hjh]hunsigned long mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhhj ubj)}(hhh]j9)}(h-mask of bits that the caller is interested inh]h-mask of bits that the caller is interested in}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h **Return**h]jz)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMjhjxubj9)}(hpageblock_bits flagsh]hpageblock_bits flags}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMjhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$set_pfnblock_flags_mask (C function)c.set_pfnblock_flags_maskhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hlvoid set_pfnblock_flags_mask (struct page *page, unsigned long flags, unsigned long pfn, unsigned long mask)h]h)}(hkvoid set_pfnblock_flags_mask(struct page *page, unsigned long flags, unsigned long pfn, unsigned long mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hset_pfnblock_flags_maskh]h)}(hset_pfnblock_flags_maskh]hset_pfnblock_flags_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hO(struct page *page, unsigned long flags, unsigned long pfn, unsigned long mask)h](j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj̢hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjȢubj)}(h h]h }(hj٢hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȢubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.set_pfnblock_flags_maskasbuh1hhjȢubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȢubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjȢubh)}(hpageh]hpage}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȢubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjĢubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hflagsh]hflags}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjĢubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hjǣhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjĢubj)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܣubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܣubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܣubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܣubh)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܣubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjĢubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hHSet the requested group of flags for a pageblock_nr_pages block of pagesh]hHSet the requested group of flags for a pageblock_nr_pages block of pages}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct page *page`` The page within the block of interest ``unsigned long flags`` The flags to set ``unsigned long pfn`` The target page frame number ``unsigned long mask`` mask of bits that the caller is interested inh](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj)}(hhh](j)}(h<``struct page *page`` The page within the block of interest h](j)}(h``struct page *page``h]j?)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj}ubj)}(hhh]j9)}(h%The page within the block of interesth]h%The page within the block of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubj)}(h)``unsigned long flags`` The flags to set h](j)}(h``unsigned long flags``h]j?)}(hjh]hunsigned long flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hThe flags to seth]hThe flags to set}(hjդhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjѤhMhjҤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѤhMhjzubj)}(h3``unsigned long pfn`` The target page frame number h](j)}(h``unsigned long pfn``h]j?)}(hjh]hunsigned long pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hThe target page frame numberh]hThe target page frame number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjzubj)}(hD``unsigned long mask`` mask of bits that the caller is interested inh](j)}(h``unsigned long mask``h]j?)}(hj.h]hunsigned long mask}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj(ubj)}(hhh]j9)}(h-mask of bits that the caller is interested inh]h-mask of bits that the caller is interested in}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)move_freepages_block_isolate (C function)c.move_freepages_block_isolatehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hYbool move_freepages_block_isolate (struct zone *zone, struct page *page, int migratetype)h]h)}(hXbool move_freepages_block_isolate(struct zone *zone, struct page *page, int migratetype)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubh)}(hmove_freepages_block_isolateh]h)}(hmove_freepages_block_isolateh]hmove_freepages_block_isolate}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMuubj)}(h7(struct zone *zone, struct page *page, int migratetype)h](j)}(hstruct zone *zoneh](j!)}(hj$h]hstruct}(hjĥhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjѥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzoneh]hzone}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߥubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.move_freepages_block_isolateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hzoneh]hzone}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj6hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]h)}(hpageh]hpage}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjVmodnameN classnameNj\j_)}jb]jc.move_freepages_block_isolateasbuh1hhj2ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj2ubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint migratetypeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h migratetypeh]h migratetype}(hj¦hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMuubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhjhMuhj}hhubj )}(hhh]j9)}(h+move free pages in block for page isolationh]h+move free pages in block for page isolation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct zone *zone`` the zone ``struct page *page`` the pageblock page ``int migratetype`` migratetype to set on the pageblock **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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMyhjubj)}(hhh](j)}(h``struct zone *zone`` the zone h](j)}(h``struct zone *zone``h]j?)}(hj-h]hstruct zone *zone}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMvhj'ubj)}(hhh]j9)}(hthe zoneh]hthe zone}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMvhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMvhj$ubj)}(h)``struct page *page`` the pageblock page h](j)}(h``struct page *page``h]j?)}(hjfh]hstruct page *page}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMwhj`ubj)}(hhh]j9)}(hthe pageblock pageh]hthe pageblock page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hMwhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMwhj$ubj)}(h8``int migratetype`` migratetype to set on the pageblock h](j)}(h``int migratetype``h]j?)}(hjh]hint migratetype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMxhjubj)}(hhh]j9)}(h#migratetype to set on the pageblockh]h#migratetype to set on the pageblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjڧh]h Description}(hjܧhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjاubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMzhjubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMzhjubj9)}(hUnlike 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]hUnlike 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM~hjubj9)}(hyThis function handles that. Straddling buddies are split into individual pageblocks. Only the block of interest is moved.h]hyThis function handles that. Straddling buddies are split into individual pageblocks. Only the block of interest is moved.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(h>Returns ``true`` if pages could be moved, ``false`` otherwise.h](hReturns }(hjhhhNhNubj?)}(h``true``h]htrue}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if pages could be moved, }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__putback_isolated_page (C function)c.__putback_isolated_pagehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hLvoid __putback_isolated_page (struct page *page, unsigned int order, int mt)h]h)}(hKvoid __putback_isolated_page(struct page *page, unsigned int order, int mt)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM^ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hM^ ubh)}(h__putback_isolated_pageh]h)}(h__putback_isolated_pageh]h__putback_isolated_page}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj~hM^ ubj)}(h/(struct page *page, unsigned int order, int mt)h](j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hj˨hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȨubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjͨmodnameN classnameNj\j_)}jb]je)}jXjsbc.__putback_isolated_pageasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint mth](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hmth]hmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjlhhhj~hM^ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj~hM^ ubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1hhj~hM^ hjehhubj )}(hhh]j9)}(h/Return a now-isolated page back where we got ith]h/Return a now-isolated page back where we got it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM^ hjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hM^ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jΩj4jΩj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjةh]h Parameters}(hjکhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj֩ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMb hjҩubj)}(hhh](j)}(h-``struct page *page`` Page that was isolated h](j)}(h``struct page *page``h]j?)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM_ hjubj)}(hhh]j9)}(hPage that was isolatedh]hPage that was isolated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM_ hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM_ hjubj)}(h2``unsigned int order`` Order of the isolated page h](j)}(h``unsigned int order``h]j?)}(hj0h]hunsigned int order}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM` hj*ubj)}(hhh]j9)}(hOrder of the isolated pageh]hOrder of the isolated page}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhM` hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM` hjubj)}(h.``int mt`` The page's pageblock's migratetype h](j)}(h ``int mt``h]j?)}(hjih]hint mt}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMa hjcubj)}(hhh]j9)}(h"The page's pageblock's migratetypeh]h&The page’s pageblock’s migratetype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hMa hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMa hjubeh}(h]h ]h"]h$]h&]uh1jhjҩubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMc hjҩubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMc hjҩubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ___free_pages (C function)c.___free_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hKvoid ___free_pages (struct page *page, unsigned int order, fpi_t fpi_flags)h]h)}(hJvoid ___free_pages(struct page *page, unsigned int order, fpi_t fpi_flags)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h ___free_pagesh]h)}(h ___free_pagesh]h ___free_pages}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h8(struct page *page, unsigned int order, fpi_t fpi_flags)h](j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj&hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]h)}(hpageh]hpage}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjFmodnameN classnameNj\j_)}jb]je)}jXj sbc.___free_pagesasbuh1hhj"ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj2 )}(hj5 h]h*}(hjrhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj"ubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj«hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hjЫhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hfpi_t fpi_flagsh](h)}(hhh]h)}(hfpi_th]hfpi_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j`c.___free_pagesasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h fpi_flagsh]h fpi_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jܪah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjުhhubj )}(hhh]j9)}(h(Free pages allocated with alloc_pages().h]h(Free pages allocated with alloc_pages().}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjުhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct page *page`` The page pointer returned from alloc_pages(). ``unsigned int order`` The order of the allocation. ``fpi_t fpi_flags`` Free Page Internal flags. **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](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj)}(hhh](j)}(hD``struct page *page`` The page pointer returned from alloc_pages(). h](j)}(h``struct page *page``h]j?)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj}ubj)}(hhh]j9)}(h-The page pointer returned from alloc_pages().h]h-The page pointer returned from alloc_pages().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubj)}(h4``unsigned int order`` The order of the allocation. h](j)}(h``unsigned int order``h]j?)}(hjh]hunsigned int order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hThe order of the allocation.h]hThe order of the allocation.}(hjլhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjѬhMhjҬubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѬhMhjzubj)}(h.``fpi_t fpi_flags`` Free Page Internal flags. h](j)}(h``fpi_t fpi_flags``h]j?)}(hjh]hfpi_t fpi_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hFree Page Internal flags.h]hFree Page Internal flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(hThis 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](hgThis function can free multi-page allocations that are not compound pages. It does not check that the }(hjFhhhNhNubjz)}(h **order**h]horder}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh 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.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(hXIf 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]hXIf 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().}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(h **Context**h]jz)}(hjxh]hContext}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages_exact (C function)c.alloc_pages_exacthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h6void * alloc_pages_exact (size_t size, gfp_t gfp_mask)h]h)}(h4void *alloc_pages_exact(size_t size, gfp_t gfp_mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hj̭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj˭hMubj2 )}(hj5 h]h*}(hjڭhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhj˭hMubh)}(halloc_pages_exacth]h)}(halloc_pages_exacth]halloc_pages_exact}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj˭hMubj)}(h(size_t size, gfp_t gfp_mask)h](j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsbc.alloc_pages_exactasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjVmodnameN classnameNj\j_)}jb]j&c.alloc_pages_exactasbuh1hhjMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj˭hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj˭hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj˭hMhjhhubj )}(hhh]j9)}(h5allocate an exact number physically-contiguous pages.h]h5allocate an exact number physically-contiguous pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj˭hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j®j4j®j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj̮h]h Parameters}(hjήhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʮubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj)}(hhh](j)}(h0``size_t size`` the number of bytes to allocate h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hthe number of bytes to allocateh]hthe number of bytes to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP h](j)}(h``gfp_t gfp_mask``h]j?)}(hj$h]hgfp_t gfp_mask}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(h9GFP flags for the allocation, must not contain __GFP_COMPh]h9GFP flags for the allocation, must not contain __GFP_COMP}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubeh}(h]h ]h"]h$]h&]uh1jhjƮubj9)}(h**Description**h]jz)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj9)}(hThis 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]hThis 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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj9)}(h0This function is also limited by MAX_PAGE_ORDER.h]h0This function is also limited by MAX_PAGE_ORDER.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj9)}(hIMemory allocated by this function must be released by free_pages_exact().h]hIMemory allocated by this function must be released by free_pages_exact().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubj9)}(h;pointer to the allocated area or ``NULL`` in case of error.h](h!pointer to the allocated area or }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hj¯hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh in case of error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjƮubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"alloc_pages_exact_nid (C function)c.alloc_pages_exact_nidhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hCvoid * alloc_pages_exact_nid (int nid, size_t size, gfp_t gfp_mask)h]h)}(hAvoid *alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhj hMubh)}(halloc_pages_exact_nidh]h)}(halloc_pages_exact_nidh]halloc_pages_exact_nid}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h&(int nid, size_t size, gfp_t gfp_mask)h](j)}(hint nidh](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hnidh]hnid}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj+sbc.alloc_pages_exact_nidasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjǰhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjİubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjɰmodnameN classnameNj\j_)}jb]jc.alloc_pages_exact_nidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(hBallocate an exact number of physically-contiguous pages on a node.h]hBallocate an exact number of physically-contiguous pages on a node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj9ubj)}(hhh](j)}(hC``int nid`` the preferred node ID where memory should be allocated h](j)}(h ``int nid``h]j?)}(hj^h]hint nid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjXubj)}(hhh]j9)}(h6the preferred node ID where memory should be allocatedh]h6the preferred node ID where memory should be allocated}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h0``size_t size`` the number of bytes to allocate h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hthe number of bytes to allocateh]hthe number of bytes to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(hM``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP h](j)}(h``gfp_t gfp_mask``h]j?)}(hjбh]hgfp_t gfp_mask}(hjұhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjαubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjʱubj)}(hhh]j9)}(h9GFP flags for the allocation, must not contain __GFP_COMPh]h9GFP flags for the allocation, must not contain __GFP_COMP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʱubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj9ubj9)}(hTLike alloc_pages_exact(), but try to allocate on node nid first before falling back.h]hTLike alloc_pages_exact(), but try to allocate on node nid first before falling back.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj9ubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM!hj9ubj9)}(h;pointer to the allocated area or ``NULL`` in case of error.h](h!pointer to the allocated area or }(hjHhhhNhNubj?)}(h``NULL``h]hNULL}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubh in case of error.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM!hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfree_pages_exact (C function)c.free_pages_exacthNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM2ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM2ubh)}(hfree_pages_exacth]h)}(hfree_pages_exacth]hfree_pages_exact}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM2ubj)}(h(void *virt, size_t size)h](j)}(h void *virth](j)}(hvoidh]hvoid}(hjƲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj²ubj)}(h h]h }(hjԲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj²ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj²ubh)}(hvirth]hvirt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj²ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsbc.free_pages_exactasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM2ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM2ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1hhjhM2hj~hhubj )}(hhh]j9)}(h0release memory allocated via alloc_pages_exact()h]h0release memory allocated via alloc_pages_exact()}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM2hj`hhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhM2ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM6hjubj)}(hhh](j)}(h8``void *virt`` the value returned by alloc_pages_exact. h](j)}(h``void *virt``h]j?)}(hjh]h void *virt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM3hjubj)}(hhh]j9)}(h(the value returned by alloc_pages_exact.h]h(the value returned by alloc_pages_exact.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(hQ``size_t size`` size of allocation, same value as passed to alloc_pages_exact(). h](j)}(h``size_t size``h]j?)}(hjݳh]h size_t size}(hj߳hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj۳ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM4hj׳ubj)}(hhh]j9)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM4hjubah}(h]h ]h"]h$]h&]uh1jhj׳ubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM6hjubj9)}(hERelease the memory allocated by a previous call to alloc_pages_exact.h]hERelease the memory allocated by a previous call to alloc_pages_exact.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnr_free_zone_pages (C function)c.nr_free_zone_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h-unsigned long nr_free_zone_pages (int offset)h]h)}(h,unsigned long nr_free_zone_pages(int offset)h](j)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMEubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMEubj)}(hlongh]hlong}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMEubh)}(hnr_free_zone_pagesh]h)}(hnr_free_zone_pagesh]hnr_free_zone_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjkhMEubj)}(h (int offset)h]j)}(h int offseth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjĴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoffseth]hoffset}(hjҴhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjYhhhjkhMEubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjkhMEubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1hhjkhMEhjRhhubj )}(hhh]j9)}(h+count number of pages beyond high watermarkh]h+count number of pages beyond high watermark}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhMEubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMIhjubj)}(hhh]j)}(h2``int offset`` The zone index of the highest zone h](j)}(h``int offset``h]j?)}(hj=h]h int offset}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMFhj7ubj)}(hhh]j9)}(h"The zone index of the highest zoneh]h"The zone index of the highest zone}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMFhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMFhj4ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMHhjubj9)}(hnr_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]hnr_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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMHhjubjU)}(h0nr_free_zone_pages = managed_pages - high_pages h]j9)}(h/nr_free_zone_pages = managed_pages - high_pagesh]h/nr_free_zone_pages = managed_pages - high_pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMLhjubah}(h]h ]h"]h$]h&]uh1jThjhMLhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMNhjubj9)}(h&number of pages beyond high watermark.h]h&number of pages beyond high watermark.}(hjεhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!nr_free_buffer_pages (C function)c.nr_free_buffer_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h)unsigned long nr_free_buffer_pages (void)h]h)}(h(unsigned long nr_free_buffer_pages(void)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMeubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMeubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMeubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMeubh)}(hnr_free_buffer_pagesh]h)}(hnr_free_buffer_pagesh]hnr_free_buffer_pages}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMeubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]noemphjj uh1jhjNubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMehjhhubj )}(hhh]j9)}(h+count number of pages beyond high watermarkh]h+count number of pages beyond high watermark}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMehj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMeubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMihjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjöhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjڶhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjֶhKhj׶ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjֶhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chKhjubj9)}(hvnr_free_buffer_pages() counts the number of pages which are beyond the high watermark within ZONE_DMA and ZONE_NORMAL.h]hvnr_free_buffer_pages() counts the number of pages which are beyond the high watermark within ZONE_DMA and ZONE_NORMAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMfhjubj9)}(h **Return**h]jz)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMihjubj9)}(hFnumber of pages beyond high watermark within ZONE_DMA and ZONE_NORMAL.h]hFnumber of pages beyond high watermark within ZONE_DMA and ZONE_NORMAL.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ find_next_best_node (C function)c.find_next_best_nodehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h>int find_next_best_node (int node, nodemask_t *used_node_mask)h]h)}(h=int find_next_best_node(int node, nodemask_t *used_node_mask)h](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhMubh)}(hfind_next_best_nodeh]h)}(hfind_next_best_nodeh]hfind_next_best_node}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjvhMubj)}(h&(int node, nodemask_t *used_node_mask)h](j)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hnodemask_t *used_node_maskh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hjݷhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڷubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj߷modnameN classnameNj\j_)}jb]je)}jXjsbc.find_next_best_nodeasbuh1hhjַubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjַubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjַubh)}(hused_node_maskh]hused_node_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjַubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjdhhhjvhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjvhMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1hhjvhMhj]hhubj )}(hhh]j9)}(hEfind the next node that should appear in a given node's fallback listh]hGfind the next node that should appear in a given node’s fallback list}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``int node`` node whose fallback list we're appending ``nodemask_t *used_node_mask`` nodemask_t of already used nodes **Description** We use a number of factors to determine which is the next node that should appear on a given node's fallback list. The node should not have appeared already in **node**'s fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they'll have very little allocation pressure on them otherwise. **Return** node id of the found node or ``NUMA_NO_NODE`` if no node is found.h](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj)}(hhh](j)}(h6``int node`` node whose fallback list we're appending h](j)}(h ``int node``h]j?)}(hjh]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj}ubj)}(hhh]j9)}(h(node whose fallback list we're appendingh]h*node whose fallback list we’re appending}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubj)}(h@``nodemask_t *used_node_mask`` nodemask_t of already used nodes h](j)}(h``nodemask_t *used_node_mask``h]j?)}(hjh]hnodemask_t *used_node_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(h nodemask_t of already used nodesh]h nodemask_t of already used nodes}(hjոhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjѸhMhjҸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѸhMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(hXWe 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](hWe 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 hhhNhNubjz)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubhX.’s fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they’ll have very little allocation pressure on them otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubj9)}(hBnode id of the found node or ``NUMA_NO_NODE`` if no node is found.h](hnode id of the found node or }(hjFhhhNhNubj?)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubh if no node is found.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"setup_per_zone_wmarks (C function)c.setup_per_zone_wmarkshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h!void setup_per_zone_wmarks (void)h]h)}(h void setup_per_zone_wmarks(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hsetup_per_zone_wmarksh]h)}(hsetup_per_zone_wmarksh]hsetup_per_zone_wmarks}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjĹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj|hhubj )}(hhh]j9)}(hIcalled when min_free_kbytes changes or when memory is hot-{added|removed}h]hIcalled when min_free_kbytes changes or when memory is hot-{added|removed}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj/h]hvoid}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chKhj)ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chKhj ubj9)}(hpEnsures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes.h]hpEnsures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_contig_range (C function)c.alloc_contig_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(heint alloc_contig_range (unsigned long start, unsigned long end, unsigned migratetype, gfp_t gfp_mask)h]h)}(hdint alloc_contig_range(unsigned long start, unsigned long end, unsigned migratetype, gfp_t gfp_mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(halloc_contig_rangeh]h)}(halloc_contig_rangeh]halloc_contig_range}(hjкhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̺ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hN(unsigned long start, unsigned long end, unsigned migratetype, gfp_t gfp_mask)h](j)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hlongh]hlong}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hendh]hend}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned migratetypeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h migratetypeh]h migratetype}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjƻhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjûubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjȻmodnameN classnameNj\j_)}jb]je)}jXjҺsbc.alloc_contig_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j)}(hhh]j+)}(h&tries to allocate given range of pagesh]j9)}(hj#h]h&tries to allocate given range of pages}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj!ubah}(h]h ]h"]h$]h&]uh1j+hjhhhj2hNubah}(h]h ]h"]h$]h&]j%j&uh1jhj2hMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jHj4jHj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``unsigned long start`` start PFN to allocate ``unsigned long end`` one-past-the-last PFN to allocate ``unsigned migratetype`` migratetype of the underlying pageblocks (either #MIGRATE_MOVABLE or #MIGRATE_CMA). All pageblocks in range must have the same migratetype and it must be either of the two. ``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. **Return** zero on success or negative error code. On success all pages which PFN is in [start, end) are allocated for the caller and need to be freed with free_contig_range().h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjLubj)}(hhh](j)}(h.``unsigned long start`` start PFN to allocate h](j)}(h``unsigned long start``h]j?)}(hjqh]hunsigned long start}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjkubj)}(hhh]j9)}(hstart PFN to allocateh]hstart PFN to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(h8``unsigned long end`` one-past-the-last PFN to allocate h](j)}(h``unsigned long end``h]j?)}(hjh]hunsigned long end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(h!one-past-the-last PFN to allocateh]h!one-past-the-last PFN to allocate}(hjühhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(h``unsigned migratetype`` migratetype of the underlying pageblocks (either #MIGRATE_MOVABLE or #MIGRATE_CMA). All pageblocks in range must have the same migratetype and it must be either of the two. h](j)}(h``unsigned migratetype``h]j?)}(hjh]hunsigned migratetype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjݼubj)}(hhh]j9)}(hmigratetype of the underlying pageblocks (either #MIGRATE_MOVABLE or #MIGRATE_CMA). All pageblocks in range must have the same migratetype and it must be either of the two.h]hmigratetype of the underlying pageblocks (either #MIGRATE_MOVABLE or #MIGRATE_CMA). All pageblocks in range must have the same migratetype and it must be either of the two.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubah}(h]h ]h"]h$]h&]uh1jhjݼubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(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]j?)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hGFP 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]hGFP mask. Node/zone/placement hints are ignored; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjhubeh}(h]h ]h"]h$]h&]uh1jhjLubj9)}(h**Description**h]jz)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjLubj9)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjLubj9)}(hThe 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]hThe 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~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjLubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjLubj9)}(hzero on success or negative error code. On success all pages which PFN is in [start, end) are allocated for the caller and need to be freed with free_contig_range().h]hzero on success or negative error code. On success all pages which PFN is in [start, end) are allocated for the caller and need to be freed with free_contig_range().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_contig_pages (C function)c.alloc_contig_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hhstruct page * alloc_contig_pages (unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)h]h)}(hfstruct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)h](j!)}(hj$h]hstruct}(hjԽhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjнhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjнhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXalloc_contig_pagessbc.alloc_contig_pagesasbuh1hhjнhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjнhhhjhMubj2 )}(hj5 h]h*}(hj"hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjнhhhjhMubh)}(halloc_contig_pagesh]h)}(hjh]halloc_contig_pages}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjнhhhjhMubj)}(hG(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)h](j)}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hlongh]hlong}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hnr_pagesh]hnr_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.alloc_contig_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hjξhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubj)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubj)}(hnodemask_t *nodemaskh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj!modnameN classnameNj\j_)}jb]jc.alloc_contig_pagesasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjKhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hnodemaskh]hnodemask}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubeh}(h]h ]h"]h$]h&]jj uh1jhjнhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj̽hhhjhMubah}(h]jǽah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjɽhhubj )}(hhh]j)}(hhh]j+)}(h4tries to find and allocate contiguous range of pagesh]j9)}(hjh]h4tries to find and allocate contiguous range of pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubah}(h]h ]h"]h$]h&]uh1j+hjhhhjhNubah}(h]h ]h"]h$]h&]j%j&uh1jhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjɽhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXQ**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_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_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 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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh](j)}(hB``unsigned long nr_pages`` Number of contiguous pages to allocate h](j)}(h``unsigned long nr_pages``h]j?)}(hjտh]hunsigned long nr_pages}(hj׿hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjӿubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjϿubj)}(hhh]j9)}(h&Number of contiguous pages to allocateh]h&Number of contiguous pages to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjϿubeh}(h]h ]h"]h$]h&]uh1jhjhMhj̿ubj)}(h``gfp_t gfp_mask`` GFP mask. Node/zone/placement hints limit the search; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim. h](j)}(h``gfp_t gfp_mask``h]j?)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hGFP 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]hGFP 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'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj̿ubj)}(h``int nid`` Target node h](j)}(h ``int nid``h]j?)}(hjHh]hint nid}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjBubj)}(hhh]j9)}(h Target nodeh]h Target node}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj̿ubj)}(h7``nodemask_t *nodemask`` Mask for other possible nodes h](j)}(h``nodemask_t *nodemask``h]j?)}(hjh]hnodemask_t *nodemask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj{ubj)}(hhh]j9)}(hMask for other possible nodesh]hMask for other possible nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj̿ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(hX+This routine is a wrapper around alloc_contig_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_range(). This routine is intended for allocation requests which can not be fulfilled with the buddy allocator.h]hX+This routine is a wrapper around alloc_contig_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_range(). This routine is intended for allocation requests which can not be fulfilled with the buddy allocator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(hThe 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]hThe 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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(hrAllocated pages can be freed with free_contig_range() or by manually calling __free_page() on each allocated page.h]hrAllocated pages can be freed with free_contig_range() or by manually calling __free_page() on each allocated page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj9)}(hBpointer to contiguous pages on success, or NULL if not successful.h]hBpointer to contiguous pages on success, or NULL if not successful.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages_nolock (C function)c.alloc_pages_nolockhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h>struct page * alloc_pages_nolock (int nid, unsigned int order)h]h)}(h ah"]h$]h&]uh1j1 hjBhhhjShMubh)}(halloc_pages_nolockh]h)}(hjh]halloc_pages_nolock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjShMubj)}(h(int nid, unsigned int order)h](j)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjBhhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhjShMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1hhjShMhj;hhubj )}(hhh]j9)}(h3opportunistic reentrant allocation from any contexth]h3opportunistic reentrant allocation from any context}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjThhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3joj4joj5j6j7uh1hhhhj qhNhNubjp)}(hXy**Parameters** ``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 (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](j9)}(h**Parameters**h]jz)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjsubj)}(hhh](j)}(h"``int nid`` node to allocate from h](j)}(h ``int nid``h]j?)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hnode to allocate fromh]hnode to allocate from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``unsigned int order`` allocation order size h](j)}(h``unsigned int order``h]j?)}(hjh]hunsigned int order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j9)}(hallocation order sizeh]hallocation order size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjsubj9)}(hXhAllocates pages of a given order from the given node. This is safe to call from any context (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]hXhAllocates pages of a given order from the given node. This is safe to call from any context (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"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjsubj9)}(h **Return**h]jz)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjsubj9)}(hallocated 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]hallocated 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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnuma_nearest_node (C function)c.numa_nearest_nodehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4int numa_nearest_node (int node, unsigned int state)h]h)}(h3int numa_nearest_node(int node, unsigned int state)h](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhMubh)}(hnuma_nearest_nodeh]h)}(hnuma_nearest_nodeh]hnuma_nearest_node}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhMubj)}(h(int node, unsigned int state)h](j)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int stateh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstateh]hstate}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjthhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjmhhubj )}(hhh]j9)}(hFind nearest node by stateh]hFind nearest node by state}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jdj4jdj5j6j7uh1hhhhj qhNhNubjp)}(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 distanceh](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhubj)}(hhh](j)}(h)``int node`` Node id to start the search h](j)}(h ``int node``h]j?)}(hjh]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjubj)}(hhh]j9)}(hNode id to start the searchh]hNode id to start the search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``unsigned int state`` State to filter the search h](j)}(h``unsigned int state``h]j?)}(hjh]hunsigned int state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjubj)}(hhh]j9)}(hState to filter the searchh]hState to filter the search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhubj9)}(h?Lookup the closest node by distance if **nid** is not in state.h](h'Lookup the closest node by distance if }(hjhhhNhNubjz)}(h**nid**h]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not in state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhubj9)}(h **Return**h]jz)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhubj9)}(hGthis **node** if it is in state, otherwise the closest node by distanceh](hthis }(hjPhhhNhNubjz)}(h**node**h]hnode}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh: if it is in state, otherwise the closest node by distance}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"nearest_node_nodemask (C function)c.nearest_node_nodemaskhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h6int nearest_node_nodemask (int node, nodemask_t *mask)h]h)}(h5int nearest_node_nodemask(int node, nodemask_t *mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubh)}(hnearest_node_nodemaskh]h)}(hnearest_node_nodemaskh]hnearest_node_nodemask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM5ubj)}(h(int node, nodemask_t *mask)h](j)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hnodemask_t *maskh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.nearest_node_nodemaskasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj4hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmaskh]hmask}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM5hjhhubj )}(hhh]j9)}(h@Find the node in **mask** at the nearest distance from **node**.h](hFind the node in }(hjkhhhNhNubjz)}(h**mask**h]hmask}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh at the nearest distance from }(hjkhhhNhNubjz)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM5hjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM9hjubj)}(hhh](j)}(h7``int node`` a valid node ID to start the search from. h](j)}(h ``int node``h]j?)}(hjh]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM8hjubj)}(hhh]j9)}(h)a valid node ID to start the search from.h]h)a valid node ID to start the search from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(hM``nodemask_t *mask`` a pointer to a nodemask representing the allowed nodes. h](j)}(h``nodemask_t *mask``h]j?)}(hj h]hnodemask_t *mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM9hjubj)}(hhh]j9)}(h7a pointer to a nodemask representing the allowed nodes.h]h7a pointer to a nodemask representing the allowed nodes.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM;hjubj9)}(hThis 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 }(hjZhhhNhNubjz)}(h**mask**h]hmask}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh/ and calculates the distance from the starting }(hjZhhhNhNubjz)}(h**node**h]hnode}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh5, then it returns the node ID that is the closest to }(hjZhhhNhNubjz)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh&, or MAX_NUMNODES if no node is found.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM;hjubj9)}(hNote 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 }(hjhhhNhNubjz)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages_mpol (C function)c.alloc_pages_mpolhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hkstruct page * alloc_pages_mpol (gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)h]h)}(histruct page *alloc_pages_mpol(gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM= ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM= ubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXalloc_pages_mpolsbc.alloc_pages_mpolasbuh1hhjhhhjhM= ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM= ubj2 )}(hj5 h]h*}(hj.hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhM= ubh)}(halloc_pages_mpolh]h)}(hjh]halloc_pages_mpol}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM= ubj)}(hL(gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)h](j)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj_modnameN classnameNj\j_)}jb]jc.alloc_pages_mpolasbuh1hhjVubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRubj)}(hstruct mempolicy *polh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.alloc_pages_mpolasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj=hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpolh]hpol}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRubj)}(h pgoff_t ilxh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjhmodnameN classnameNj\j_)}jb]jc.alloc_pages_mpolasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hilxh]hilx}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRubj)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjRubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM= ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM= ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM= hjhhubj )}(hhh]j9)}(h+Allocate pages according to NUMA mempolicy.h]h+Allocate pages according to NUMA mempolicy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM= hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM= ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMA hj ubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j?)}(hj2h]h gfp_t gfp}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM> hj,ubj)}(hhh]j9)}(h GFP flags.h]h GFP flags.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhM> hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM> hj)ubj)}(h5``unsigned int order`` Order of the page allocation. h](j)}(h``unsigned int order``h]j?)}(hjkh]hunsigned int order}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM? hjeubj)}(hhh]j9)}(hOrder of the page allocation.h]hOrder of the page allocation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM? hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM? hj)ubj)}(h9``struct mempolicy *pol`` Pointer to the NUMA mempolicy. h](j)}(h``struct mempolicy *pol``h]j?)}(hjh]hstruct mempolicy *pol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM@ hjubj)}(hhh]j9)}(hPointer to the NUMA mempolicy.h]hPointer to the NUMA mempolicy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM@ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@ hj)ubj)}(hS``pgoff_t ilx`` Index for interleave mempolicy (also distinguishes alloc_pages()). h](j)}(h``pgoff_t ilx``h]j?)}(hjh]h pgoff_t ilx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMA hjubj)}(hhh]j9)}(hBIndex for interleave mempolicy (also distinguishes alloc_pages()).h]hBIndex for interleave mempolicy (also distinguishes alloc_pages()).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMA hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMA hj)ubj)}(hR``int nid`` Preferred node (usually numa_node_id() but **mpol** may override it). h](j)}(h ``int nid``h]j?)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMB hjubj)}(hhh]j9)}(hEPreferred node (usually numa_node_id() but **mpol** may override it).h](h+Preferred node (usually numa_node_id() but }(hj/hhhNhNubjz)}(h**mpol**h]hmpol}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh may override it).}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj+hMB hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMB hj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h **Return**h]jz)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMD hj ubj9)}(h0The page on success or NULL if allocation fails.h]h0The page on success or NULL if allocation fails.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMD hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvma_alloc_folio (C function)c.vma_alloc_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hestruct folio * vma_alloc_folio (gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)h]h)}(hcstruct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXvma_alloc_foliosbc.vma_alloc_folioasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhM ubh)}(hvma_alloc_folioh]h)}(hjh]hvma_alloc_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(hF(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)h](j)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'modnameN classnameNj\j_)}jb]jc.vma_alloc_folioasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int orderh](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(horderh]horder}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.vma_alloc_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(haddrh]haddr}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(hAllocate a folio for a VMA.h]hAllocate a folio for a VMA.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(h GFP flags.h]h GFP flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h"``int order`` Order of the folio. h](j)}(h ``int order``h]j?)}(hjh]h int order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(hOrder of the folio.h]hOrder of the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h/``struct vm_area_struct *vma`` Pointer to VMA. h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj$h]hstruct vm_area_struct *vma}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(hPointer to VMA.h]hPointer to VMA.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjubj)}(hS``unsigned long addr`` Virtual address of the allocation. Must be inside **vma**. h](j)}(h``unsigned long addr``h]j?)}(hj]h]hunsigned long addr}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjWubj)}(hhh]j9)}(h;Virtual address of the allocation. Must be inside **vma**.h](h3Virtual address of the allocation. Must be inside }(hjvhhhNhNubjz)}(h**vma**h]hvma}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjrhM hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj9)}(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 }(hjhhhNhNubjz)}(h**vma**h]hvma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX6, 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj9)}(h1The folio on success or NULL if allocation fails.h]h1The folio on success or NULL if allocation fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages (C function) c.alloc_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9struct page * alloc_pages (gfp_t gfp, unsigned int order)h]h)}(h7struct page *alloc_pages(gfp_t gfp, unsigned int order)h](j!)}(hj$h]hstruct}(hj(hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj$hhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj5hM ubh)}(hhh]h)}(hpageh]hpage}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjImodnameN classnameNj\j_)}jb]je)}jX alloc_pagessb c.alloc_pagesasbuh1hhj$hhhj5hM ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj5hM ubj2 )}(hj5 h]h*}(hjvhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj$hhhj5hM ubh)}(h alloc_pagesh]h)}(hjeh]h alloc_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj5hM ubj)}(h(gfp_t gfp, unsigned int order)h](j)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc c.alloc_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj$hhhj5hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj5hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj5hM hjhhubj )}(hhh]j9)}(hAllocate pages.h]hAllocate pages.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jdj4jdj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(h GFP flags.h]h GFP flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hD``unsigned int order`` Power of two of number of pages to allocate. h](j)}(h``unsigned int order``h]j?)}(hjh]hunsigned int order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(h,Power of two of number of pages to allocate.h]h,Power of two of number of pages to allocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj9)}(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](hAllocate 1 << }(hjhhhNhNubjz)}(h **order**h]horder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj9)}(h **Context**h]jz)}(hj:h]hContext}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj9)}(hMCan be called from any context, providing the appropriate GFP flags are used.h]hMCan be called from any context, providing the appropriate GFP flags are used.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj9)}(h **Return**h]jz)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubj9)}(h0The page on success or NULL if allocation fails.h]h0The page on success or NULL if allocation fails.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_misplaced (C function)c.mpol_misplacedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRint mpol_misplaced (struct folio *folio, struct vm_fault *vmf, unsigned long addr)h]h)}(hQint mpol_misplaced(struct folio *folio, struct vm_fault *vmf, unsigned long addr)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMS ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMS ubh)}(hmpol_misplacedh]h)}(hmpol_misplacedh]hmpol_misplaced}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMS ubj)}(h?(struct folio *folio, struct vm_fault *vmf, unsigned long addr)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mpol_misplacedasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj/hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct vm_fault *vmfh](j!)}(hj$h]hstruct}(hjUhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjumodnameN classnameNj\j_)}jb]jc.mpol_misplacedasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQubh)}(hvmfh]hvmf}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMS ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMS ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMS hjhhubj )}(hhh]j9)}(h3check whether current folio node is valid in policyh]h3check whether current folio node is valid in policy}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMS hj$hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMS ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMW hjCubj)}(hhh](j)}(h,``struct folio *folio`` folio to be checked h](j)}(h``struct folio *folio``h]j?)}(hjhh]hstruct folio *folio}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMU hjbubj)}(hhh]j9)}(hfolio to be checkedh]hfolio to be checked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMU hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMU hj_ubj)}(h8``struct vm_fault *vmf`` structure describing the fault h](j)}(h``struct vm_fault *vmf``h]j?)}(hjh]hstruct vm_fault *vmf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMV hjubj)}(hhh]j9)}(hstructure describing the faulth]hstructure describing the fault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMV hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMV hj_ubj)}(ha``unsigned long addr`` virtual address in **vma** for shared policy lookup and interleave policy h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMW hjubj)}(hhh]j9)}(hIvirtual address in **vma** for shared policy lookup and interleave policyh](hvirtual address in }(hjhhhNhNubjz)}(h**vma**h]hvma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh/ for shared policy lookup and interleave policy}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMW hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMW hj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMY hjCubj9)}(hLookup 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]hLookup 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=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMY hjCubj9)}(h **Return**h]jz)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM] hjCubj9)}(hNUMA_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]hNUMA_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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM] hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mpol_shared_policy_init (C function)c.mpol_shared_policy_inithNtauh1hhj qhhhNhNubh)}(hhh](h)}(hOvoid mpol_shared_policy_init (struct shared_policy *sp, struct mempolicy *mpol)h]h)}(hNvoid mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM9 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM9 ubh)}(hmpol_shared_policy_inith]h)}(hmpol_shared_policy_inith]hmpol_shared_policy_init}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM9 ubj)}(h2(struct shared_policy *sp, struct mempolicy *mpol)h](j)}(hstruct shared_policy *sph](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h shared_policyh]h shared_policy}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mpol_shared_policy_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hsph]hsp}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mempolicy *mpolh](j!)}(hj$h]hstruct}(hjBhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]j c.mpol_shared_policy_initasbuh1hhj>ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>ubh)}(hmpolh]hmpol}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM9 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM9 ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM9 hjhhubj )}(hhh]j9)}(h"initialize shared policy for inodeh]h"initialize shared policy for inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM9 hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM9 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM= hjubj)}(hhh](j)}(h<``struct shared_policy *sp`` pointer to inode shared policy h](j)}(h``struct shared_policy *sp``h]j?)}(hjh]hstruct shared_policy *sp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM: hjubj)}(hhh]j9)}(hpointer to inode shared policyh]hpointer to inode shared policy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjubj)}(h7``struct mempolicy *mpol`` struct mempolicy to install h](j)}(h``struct mempolicy *mpol``h]j?)}(hj=h]hstruct mempolicy *mpol}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM; hj7ubj)}(hhh]j9)}(hstruct mempolicy to installh]hstruct mempolicy to install}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhM; hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM; hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM= hjubj9)}(hInstall 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](hInstall non-NULL }(hjhhhNhNubjz)}(h**mpol**h]hmpol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh^ in inode’s shared policy rb-tree. On entry, the current task has a reference on a non-NULL }(hjhhhNhNubjz)}(h**mpol**h]hmpol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh_. This must be released on exit. This is called at get_inode() calls and we can use GFP_KERNEL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM= hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_parse_str (C function)c.mpol_parse_strhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h7int mpol_parse_str (char *str, struct mempolicy **mpol)h]h)}(h6int mpol_parse_str(char *str, struct mempolicy **mpol)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hmpol_parse_strh]h)}(hmpol_parse_strh]hmpol_parse_str}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h$(char *str, struct mempolicy **mpol)h](j)}(h char *strh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj:hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hstrh]hstr}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mempolicy **mpolh](j!)}(hj$h]hstruct}(hj`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mpol_parse_strasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hmpolh]hmpol}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h7parse string to mempolicy, for tmpfs mpol mount option.h]h7parse string to mempolicy, for tmpfs mpol mount option.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX **Parameters** ``char *str`` string containing mempolicy to parse ``struct mempolicy **mpol`` pointer to struct mempolicy pointer, returned on success. **Description** Format of input: [=][:] **Return** ``0`` on success, else ``1``h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj ubj)}(hhh](j)}(h3``char *str`` string containing mempolicy to parse h](j)}(h ``char *str``h]j?)}(hj1h]h char *str}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj+ubj)}(hhh]j9)}(h$string containing mempolicy to parseh]h$string containing mempolicy to parse}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhM hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM hj(ubj)}(hV``struct mempolicy **mpol`` pointer to struct mempolicy pointer, returned on success. h](j)}(h``struct mempolicy **mpol``h]j?)}(hjjh]hstruct mempolicy **mpol}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjdubj)}(hhh]j9)}(h9pointer to struct mempolicy pointer, returned on success.h]h9pointer to struct mempolicy pointer, returned on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhM hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj ubj)}(hhh]j)}(h/Format of input: [=][:] h](j)}(hFormat of input:h]hFormat of input:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(h[=][:]h]h[=][:]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj ubj9)}(h``0`` on success, else ``1``h](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh on success, else }(hj hhhNhNubj?)}(h``1``h]h1}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_to_str (C function) c.mpol_to_strhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hBvoid mpol_to_str (char *buffer, int maxlen, struct mempolicy *pol)h]h)}(hAvoid mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjehM ubh)}(h mpol_to_strh]h)}(h mpol_to_strh]h mpol_to_str}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjehM ubj)}(h1(char *buffer, int maxlen, struct mempolicy *pol)h](j)}(h char *bufferh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int maxlenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmaxlenh]hmaxlen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mempolicy *polh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]je)}jXjzsb c.mpol_to_strasbuh1hhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjWhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpolh]hpol}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjShhhjehM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjehM ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjehM hjLhhubj )}(hhh]j9)}(h)format a mempolicy structure for printingh]h)format a mempolicy structure for printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjehM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh](j)}(h7``char *buffer`` to contain formatted mempolicy string h](j)}(h``char *buffer``h]j?)}(hjh]h char *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(h%to contain formatted mempolicy stringh]h%to contain formatted mempolicy string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``int maxlen`` length of **buffer** h](j)}(h``int maxlen``h]j?)}(hjh]h int maxlen}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh]j9)}(hlength of **buffer**h](h length of }(hj!hhhNhNubjz)}(h **buffer**h]hbuffer}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubeh}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h?``struct mempolicy *pol`` pointer to mempolicy to be formatted h](j)}(h``struct mempolicy *pol``h]j?)}(hjOh]hstruct mempolicy *pol}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjIubj)}(hhh]j9)}(h$pointer to mempolicy to be formattedh]h$pointer to mempolicy to be formatted}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj9)}(hConvert **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](hConvert }(hjhhhNhNubjz)}(h**pol**h]hpol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh into a string. If }(hjhhhNhNubjz)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh0 is too short, truncate the string. Recommend a }(hjhhhNhNubjz)}(h **maxlen**h]hmaxlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio (C struct)c.foliohNtauh1hhj qhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhNubh)}(hhh](h)}(hfolioh]h)}(h struct folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hfolioh]h)}(hjh]hfolio}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h%Represents a contiguous set of bytes.h]h%Represents a contiguous set of bytes.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMRhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j`j4j`j5j6j7uh1hhhhj qhjhNubjp)}(hXw**Definition**:: struct folio { unsigned long 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; }; 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(). ``_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](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMVhjdubj)}(hXstruct folio { unsigned long 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; }; 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]hXstruct folio { unsigned long 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; }; 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; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMXhjdubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjdubj)}(hhh](j)}(h'``flags`` Identical to the page flags. h](j)}(h ``flags``h]j?)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMThjubj)}(hhh]j9)}(hIdentical to the page flags.h]hIdentical to the page flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hK``lru`` Least Recently Used list; tracks how recently this folio was used. h](j)}(h``lru``h]j?)}(hj'h]hlru}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMUhj!ubj)}(hhh]j9)}(hBLeast Recently Used list; tracks how recently this folio was used.h]hBLeast Recently Used list; tracks how recently this folio was used.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMUhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMUhjubj)}(hG``mlock_count`` Number of times this folio has been pinned by mlock(). h](j)}(h``mlock_count``h]j?)}(hj`h]h mlock_count}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMVhjZubj)}(hhh]j9)}(h6Number of times this folio has been pinned by mlock().h]h6Number of times this folio has been pinned by mlock().}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMVhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMVhjubj)}(h,``pgmap`` Metadata for ZONE_DEVICE mappings h](j)}(h ``pgmap``h]j?)}(hjh]hpgmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMdhjubj)}(hhh]j9)}(h!Metadata for ZONE_DEVICE mappingsh]h!Metadata for ZONE_DEVICE mappings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h[``mapping`` The file this page belongs to, or refers to the anon_vma for anonymous memory. h](j)}(h ``mapping``h]j?)}(hjh]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMXhjubj)}(hhh]j9)}(hNThe file this page belongs to, or refers to the anon_vma for anonymous memory.h]hNThe file this page belongs to, or refers to the anon_vma for anonymous memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hj h]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(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]j?)}(hjEh]hindex}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMZhj?ubj)}(hhh]j9)}(hsOffset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap.h]hsOffset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMYhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMZhjubj)}(hU``share`` number of DAX mappings that reference this folio. See dax_associate_entry. h](j)}(h ``share``h]j?)}(hjh]hshare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM\hjyubj)}(hhh]j9)}(hJnumber of DAX mappings that reference this folio. See dax_associate_entry.h]hJnumber of DAX mappings that reference this folio. See dax_associate_entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM[hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hD``private`` Filesystem per-folio data (see folio_attach_private()). h](j)}(h ``private``h]j?)}(hjh]hprivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM]hjubj)}(hhh]j9)}(h7Filesystem per-folio data (see folio_attach_private()).h]h7Filesystem per-folio data (see folio_attach_private()).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubj)}(h9``swap`` Used for swp_entry_t if folio_test_swapcache(). h](j)}(h``swap``h]j?)}(hj+h]hswap}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM^hj%ubj)}(hhh]j9)}(h/Used for swp_entry_t if folio_test_swapcache().h]h/Used for swp_entry_t if folio_test_swapcache().}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hM^hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM^hjubj)}(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]j?)}(hjdh]h _mapcount}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM`hj^ubj)}(hhh]j9)}(hwDo not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace.h]hwDo not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM_hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM`hjubj)}(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]j?)}(hjh]h _refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMbhjubj)}(hhh]j9)}(hoDo not access this member directly. Use folio_ref_count() to find how many references there are to this folio.h]hoDo not access this member directly. Use folio_ref_count() to find how many references there are to this folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(h*``memcg_data`` Memory Control Group data. h](j)}(h``memcg_data``h]j?)}(hjh]h memcg_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMchjubj)}(hhh]j9)}(hMemory Control Group data.h]hMemory Control Group data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(hH``_unused_slab_obj_exts`` Placeholder to match obj_exts in struct slab. h](j)}(h``_unused_slab_obj_exts``h]j?)}(hjh]h_unused_slab_obj_exts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMthj ubj)}(hhh]j9)}(h-Placeholder to match obj_exts in struct slab.h]h-Placeholder to match obj_exts in struct slab.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMthj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMthjubj)}(h6``virtual`` Virtual address in the kernel direct map. h](j)}(h ``virtual``h]j?)}(hjJh]hvirtual}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMehjDubj)}(hhh]j9)}(h)Virtual address in the kernel direct map.h]h)Virtual address in the kernel direct map.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMehj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMehjubj)}(hK``_last_cpupid`` IDs of last CPU and last process that accessed the folio. h](j)}(h``_last_cpupid``h]j?)}(hjh]h _last_cpupid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMfhj}ubj)}(hhh]j9)}(h9IDs of last CPU and last process that accessed the folio.h]h9IDs of last CPU and last process that accessed the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h@``_large_mapcount`` Do not use directly, call folio_mapcount(). h](j)}(h``_large_mapcount``h]j?)}(hjh]h_large_mapcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhhjubj)}(hhh]j9)}(h+Do not use directly, call folio_mapcount().h]h+Do not use directly, call folio_mapcount().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h@``_nr_pages_mapped`` Do not use outside of rmap and debug code. h](j)}(h``_nr_pages_mapped``h]j?)}(hjh]h_nr_pages_mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMihjubj)}(hhh]j9)}(h*Do not use outside of rmap and debug code.h]h*Do not use outside of rmap and debug code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMihj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMihjubj)}(hH``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). h](j)}(h``_entire_mapcount``h]j?)}(hj.h]h_entire_mapcount}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMghj(ubj)}(hhh]j9)}(h2Do not use directly, call folio_entire_mapcount().h]h2Do not use directly, call folio_entire_mapcount().}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMghjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMghjubj)}(hB``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). h](j)}(h ``_pincount``h]j?)}(hjgh]h _pincount}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMjhjaubj)}(hhh]j9)}(h3Do not use directly, call folio_maybe_dma_pinned().h]h3Do not use directly, call folio_maybe_dma_pinned().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMjhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMjhjubj)}(h5``_mm_id_mapcount`` Do not use outside of rmap code. h](j)}(h``_mm_id_mapcount``h]j?)}(hjh]h_mm_id_mapcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMnhjubj)}(hhh]j9)}(h Do not use outside of rmap code.h]h Do not use outside of rmap code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h,``_mm_id`` Do not use outside of rmap code. h](j)}(h ``_mm_id``h]j?)}(hjh]h_mm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMlhj ubj)}(hhh]j9)}(h Do not use outside of rmap code.h]h Do not use outside of rmap code.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMlhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMlhjubj)}(h-``_mm_ids`` Do not use outside of rmap code. h](j)}(h ``_mm_ids``h]j?)}(hjKh]h_mm_ids}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMmhjEubj)}(hhh]j9)}(h Do not use outside of rmap code.h]h Do not use outside of rmap code.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMmhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMmhjubj)}(h:``_nr_pages`` Do not use directly, call folio_nr_pages(). h](j)}(h ``_nr_pages``h]j?)}(hjh]h _nr_pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMkhj~ubj)}(hhh]j9)}(h+Do not use directly, call folio_nr_pages().h]h+Do not use directly, call folio_nr_pages().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMkhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubj)}(h=``_deferred_list`` Folios to be split under memory pressure. h](j)}(h``_deferred_list``h]j?)}(hjh]h_deferred_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMshjubj)}(hhh]j9)}(h)Folios to be split under memory pressure.h]h)Folios to be split under memory pressure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(hH``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). h](j)}(h``_entire_mapcount``h]j?)}(hjh]h_entire_mapcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMghjubj)}(hhh]j9)}(h2Do not use directly, call folio_entire_mapcount().h]h2Do not use directly, call folio_entire_mapcount().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMghj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMghjubj)}(hB``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). h](j)}(h ``_pincount``h]j?)}(hj/h]h _pincount}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMjhj)ubj)}(hhh]j9)}(h3Do not use directly, call folio_maybe_dma_pinned().h]h3Do not use directly, call folio_maybe_dma_pinned().}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMjhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMjhjubj)}(hE``_hugetlb_subpool`` Do not use directly, use accessor in hugetlb.h. h](j)}(h``_hugetlb_subpool``h]j?)}(hjhh]h_hugetlb_subpool}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMohjbubj)}(hhh]j9)}(h/Do not use directly, use accessor in hugetlb.h.h]h/Do not use directly, use accessor in hugetlb.h.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMohj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMohjubj)}(hK``_hugetlb_cgroup`` Do not use directly, use accessor in hugetlb_cgroup.h. h](j)}(h``_hugetlb_cgroup``h]j?)}(hjh]h_hugetlb_cgroup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMphjubj)}(hhh]j9)}(h6Do not use directly, use accessor in hugetlb_cgroup.h.h]h6Do not use directly, use accessor in hugetlb_cgroup.h.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(hP``_hugetlb_cgroup_rsvd`` Do not use directly, use accessor in hugetlb_cgroup.h. h](j)}(h``_hugetlb_cgroup_rsvd``h]j?)}(hjh]h_hugetlb_cgroup_rsvd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMqhjubj)}(hhh]j9)}(h6Do not use directly, use accessor in hugetlb_cgroup.h.h]h6Do not use directly, use accessor in hugetlb_cgroup.h.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(hD``_hugetlb_hwpoison`` Do not use directly, call raw_hwp_list_head().h](j)}(h``_hugetlb_hwpoison``h]j?)}(hjh]h_hugetlb_hwpoison}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMqhj ubj)}(hhh]j9)}(h.Do not use directly, call raw_hwp_list_head().h]h.Do not use directly, call raw_hwp_list_head().}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMrhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMqhjubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhjhNubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMuhj qhhubj9)}(hXA 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](hA 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 }(hjlhhhNhNubj?)}(h ``PAGE_SIZE``h]h PAGE_SIZE}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh. 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.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMuhj qhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌptdesc (C struct)c.ptdeschNtauh1hhj qhhhjhNubh)}(hhh](h)}(hptdesch]h)}(h struct ptdesch](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hptdesch]h)}(hjh]hptdesc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h"Memory descriptor for page tables.h]h"Memory descriptor for page tables.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhjhNubjp)}(hX**Definition**:: struct ptdesc { unsigned long __page_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** ``__page_flags`` Same as page flags. Powerpc only. ``{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](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hXstruct ptdesc { unsigned long __page_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]hXstruct ptdesc { unsigned long __page_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&]jj uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj9)}(h **Members**h]jz)}(hj6h]hMembers}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM8hjubj)}(hhh](j)}(h3``__page_flags`` Same as page flags. Powerpc only. h](j)}(h``__page_flags``h]j?)}(hjUh]h __page_flags}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjOubj)}(hhh]j9)}(h!Same as page flags. Powerpc only.h]h!Same as page flags. Powerpc only.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjLubj)}(h.``pt_rcu_head`` For freeing page table pages. h](j)}(h``pt_rcu_head``h]j?)}(hjh]h pt_rcu_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hFor freeing page table pages.h]hFor freeing page table pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(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]j?)}(hjh]hpt_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hxList of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds.h]hxList of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j?)}(hj:h]h{unnamed_struct}}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhj4ubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjLubj)}(h>``_pt_pad_1`` Padding that aliases with page's compound head. h](j)}(h ``_pt_pad_1``h]j?)}(hjsh]h _pt_pad_1}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjmubj)}(hhh]j9)}(h/Padding that aliases with page's compound head.h]h1Padding that aliases with page’s compound head.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h:``pmd_huge_pte`` Protected by ptdesc->ptl, used for THPs. h](j)}(h``pmd_huge_pte``h]j?)}(hjh]h pmd_huge_pte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h(Protected by ptdesc->ptl, used for THPs.h]h(Protected by ptdesc->ptl, used for THPs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(hG``__page_mapping`` Aliases with page->mapping. Unused for page tables. h](j)}(h``__page_mapping``h]j?)}(hjh]h__page_mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h3Aliases with page->mapping. Unused for page tables.h]h3Aliases with page->mapping. Unused for page tables.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hjh]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjubj)}(hhh]j9)}(h anonymoush]h anonymous}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjLubj)}(h!``pt_index`` Used for s390 gmap. h](j)}(h ``pt_index``h]j?)}(hjWh]hpt_index}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjQubj)}(hhh]j9)}(hUsed for s390 gmap.h]hUsed for s390 gmap.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjLubj)}(h``pt_mm`` Used for x86 pgds. h](j)}(h ``pt_mm``h]j?)}(hjh]hpt_mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hUsed for x86 pgds.h]hUsed for x86 pgds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(hG``pt_frag_refcount`` For fragmented page table tracking. Powerpc only. h](j)}(h``pt_frag_refcount``h]j?)}(hjh]hpt_frag_refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h1For fragmented page table tracking. Powerpc only.h]h1For fragmented page table tracking. Powerpc only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h@``pt_share_count`` Used for HugeTLB PMD page table share count. h](j)}(h``pt_share_count``h]j?)}(hjh]hpt_share_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h,Used for HugeTLB PMD page table share count.h]h,Used for HugeTLB PMD page table share count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j?)}(hj;h]h{unnamed_union}}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhj5ubj)}(hhh]j9)}(h anonymoush]h anonymous}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjLubj)}(h2``_pt_pad_2`` Padding to ensure proper alignment. h](j)}(h ``_pt_pad_2``h]j?)}(hjth]h _pt_pad_2}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjnubj)}(hhh]j9)}(h#Padding to ensure proper alignment.h]h#Padding to ensure proper alignment.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h!``ptl`` Lock for the page table. h](j)}(h``ptl``h]j?)}(hjh]hptl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hLock for the page table.h]hLock for the page table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(h!``ptl`` Lock for the page table. h](j)}(h``ptl``h]j?)}(hjh]hptl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hLock for the page table.h]hLock for the page table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubj)}(hA``__page_type`` Same as page->page_type. Unused for page tables. h](j)}(h``__page_type``h]j?)}(hjh]h __page_type}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM hjubj)}(hhh]j9)}(h0Same as page->page_type. Unused for page tables.h]h0Same as page->page_type. Unused for page tables.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hM hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM hjLubj)}(h+``__page_refcount`` Same as page refcount. h](j)}(h``__page_refcount``h]j?)}(hjXh]h__page_refcount}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM!hjRubj)}(hhh]j9)}(hSame as page refcount.h]hSame as page refcount.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhM!hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM!hjLubj)}(h;``pt_memcg_data`` Memcg data. Tracked for page tables here.h](j)}(h``pt_memcg_data``h]j?)}(hjh]h pt_memcg_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM!hjubj)}(hhh]j9)}(h)Memcg data. Tracked for page tables here.h]h)Memcg data. Tracked for page tables here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjLubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhjhNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM%hj qhhubj9)}(hcThis struct overlays struct page for now. Do not modify without a good understanding of the issues.h]hcThis struct overlays struct page for now. Do not modify without a good understanding of the issues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM#hj qhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_fault_t (C type) c.vm_fault_thNtauh1hhj qhhhjhNubh)}(hhh](h)}(h vm_fault_th]h)}(htype vm_fault_th](j!)}(hjh]htype}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM)ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM)ubh)}(h vm_fault_th]h)}(hj h]h vm_fault_t}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjhM)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM)hjhhubj )}(hhh]j9)}(h$Return type for page fault handlers.h]h$Return type for page fault handlers.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM)ubeh}(h]h ](j-typeeh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhj qhjhNubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj qhhubj9)}(hhjubh values.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj qhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_fault_reason (C enum)c.vm_fault_reasonhNtauh1hhj qhhhjhNubh)}(hhh](h)}(hvm_fault_reasonh]h)}(henum vm_fault_reasonh](j!)}(henumh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hvm_fault_reasonh]h)}(hjh]hvm_fault_reason}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hPage fault handlers return a bitmask of these values to tell the core VM what happened when handling the fault. Used to decide whether a process gets delivered SIGBUS or just gets major/minor fault counters bumped up.h]hPage fault handlers return a bitmask of these values to tell the core VM what happened when handling the fault. Used to decide whether a process gets delivered SIGBUS or just gets major/minor fault counters bumped up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-enumeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhjhNubjp)}(hXS**Constants** ``VM_FAULT_OOM`` Out Of Memory ``VM_FAULT_SIGBUS`` Bad access ``VM_FAULT_MAJOR`` Page read from storage ``VM_FAULT_HWPOISON`` Hit poisoned small page ``VM_FAULT_HWPOISON_LARGE`` Hit poisoned large page. Index encoded in upper bits ``VM_FAULT_SIGSEGV`` segmentation fault ``VM_FAULT_NOPAGE`` ->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 valueh](j9)}(h **Constants**h]jz)}(hj'h]h Constants}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj!ubj)}(hhh](j)}(h``VM_FAULT_OOM`` Out Of Memory h](j)}(h``VM_FAULT_OOM``h]j?)}(hjFh]h VM_FAULT_OOM}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj@ubj)}(hhh]j9)}(h Out Of Memoryh]h Out Of Memory}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(h``VM_FAULT_SIGBUS`` Bad access h](j)}(h``VM_FAULT_SIGBUS``h]j?)}(hjh]hVM_FAULT_SIGBUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjyubj)}(hhh]j9)}(h Bad accessh]h Bad access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h*``VM_FAULT_MAJOR`` Page read from storage h](j)}(h``VM_FAULT_MAJOR``h]j?)}(hjh]hVM_FAULT_MAJOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hPage read from storageh]hPage read from storage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h.``VM_FAULT_HWPOISON`` Hit poisoned small page h](j)}(h``VM_FAULT_HWPOISON``h]j?)}(hjh]hVM_FAULT_HWPOISON}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hHit poisoned small pageh]hHit poisoned small page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(hQ``VM_FAULT_HWPOISON_LARGE`` Hit poisoned large page. Index encoded in upper bits h](j)}(h``VM_FAULT_HWPOISON_LARGE``h]j?)}(hj*h]hVM_FAULT_HWPOISON_LARGE}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj$ubj)}(hhh]j9)}(h4Hit poisoned large page. Index encoded in upper bitsh]h4Hit poisoned large page. Index encoded in upper bits}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj=ubj)}(h(``VM_FAULT_SIGSEGV`` segmentation fault h](j)}(h``VM_FAULT_SIGSEGV``h]j?)}(hjdh]hVM_FAULT_SIGSEGV}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj^ubj)}(hhh]j9)}(hsegmentation faulth]hsegmentation fault}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj=ubj)}(h?``VM_FAULT_NOPAGE`` ->fault installed the pte, not return page h](j)}(h``VM_FAULT_NOPAGE``h]j?)}(hjh]hVM_FAULT_NOPAGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h*->fault installed the pte, not return pageh]h*->fault installed the pte, not return page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h5``VM_FAULT_LOCKED`` ->fault locked the returned page h](j)}(h``VM_FAULT_LOCKED``h]j?)}(hjh]hVM_FAULT_LOCKED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h ->fault locked the returned pageh]h ->fault locked the returned page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h/``VM_FAULT_RETRY`` ->fault blocked, must retry h](j)}(h``VM_FAULT_RETRY``h]j?)}(hjh]hVM_FAULT_RETRY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj ubj)}(hhh]j9)}(h->fault blocked, must retryh]h->fault blocked, must retry}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj=ubj)}(hA``VM_FAULT_FALLBACK`` huge page fault failed, fall back to small h](j)}(h``VM_FAULT_FALLBACK``h]j?)}(hjHh]hVM_FAULT_FALLBACK}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjBubj)}(hhh]j9)}(h*huge page fault failed, fall back to smallh]h*huge page fault failed, fall back to small}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj=ubj)}(h4``VM_FAULT_DONE_COW`` ->fault has fully handled COW h](j)}(h``VM_FAULT_DONE_COW``h]j?)}(hjh]hVM_FAULT_DONE_COW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj{ubj)}(hhh]j9)}(h->fault has fully handled COWh]h->fault has fully handled COW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=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]j?)}(hjh]hVM_FAULT_NEEDDSYNC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(he->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX)h]he->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(hG``VM_FAULT_COMPLETED`` ->fault completed, meanwhile mmap lock released h](j)}(h``VM_FAULT_COMPLETED``h]j?)}(hjh]hVM_FAULT_COMPLETED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h/->fault completed, meanwhile mmap lock releasedh]h/->fault completed, meanwhile mmap lock released}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj=ubj)}(h*``VM_FAULT_HINDEX_MASK`` mask HINDEX valueh](j)}(h``VM_FAULT_HINDEX_MASK``h]j?)}(hj-h]hVM_FAULT_HINDEX_MASK}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj'ubj)}(hhh]j9)}(hmask HINDEX valueh]hmask HINDEX value}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhjhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfault_flag (C enum) c.fault_flaghNtauh1hhj qhhhjhNubh)}(hhh](h)}(h fault_flagh]h)}(henum fault_flagh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h fault_flagh]h)}(hjh]h fault_flag}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj|hhubj )}(hhh]j9)}(hFault flag definitions.h]hFault flag definitions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhMubeh}(h]h ](j-enumeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhjhNubjp)}(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](j9)}(h **Constants**h]jz)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh](j)}(h.``FAULT_FLAG_WRITE`` Fault was a write fault. h](j)}(h``FAULT_FLAG_WRITE``h]j?)}(hj h]hFAULT_FLAG_WRITE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(hFault was a write fault.h]hFault was a write fault.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``FAULT_FLAG_MKWRITE`` Fault was mkwrite of existing PTE. h](j)}(h``FAULT_FLAG_MKWRITE``h]j?)}(hjCh]hFAULT_FLAG_MKWRITE}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj=ubj)}(hhh]j9)}(h"Fault was mkwrite of existing PTE.h]h"Fault was mkwrite of existing PTE.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubj)}(h@``FAULT_FLAG_ALLOW_RETRY`` Allow to retry the fault if blocked. h](j)}(h``FAULT_FLAG_ALLOW_RETRY``h]j?)}(hj|h]hFAULT_FLAG_ALLOW_RETRY}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjvubj)}(hhh]j9)}(h$Allow to retry the fault if blocked.h]h$Allow to retry the fault if blocked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``FAULT_FLAG_RETRY_NOWAIT`` Don't drop mmap_lock and wait when retrying. h](j)}(h``FAULT_FLAG_RETRY_NOWAIT``h]j?)}(hjh]hFAULT_FLAG_RETRY_NOWAIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj)}(hhh]j9)}(h,Don't drop mmap_lock and wait when retrying.h]h.Don’t drop mmap_lock and wait when retrying.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``FAULT_FLAG_KILLABLE`` The fault task is in SIGKILL killable region. h](j)}(h``FAULT_FLAG_KILLABLE``h]j?)}(hjh]hFAULT_FLAG_KILLABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM"hjubj)}(hhh]j9)}(h-The fault task is in SIGKILL killable region.h]h-The fault task is in SIGKILL killable region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h4``FAULT_FLAG_TRIED`` The fault has been tried once. h](j)}(h``FAULT_FLAG_TRIED``h]j?)}(hj'h]hFAULT_FLAG_TRIED}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM%hj!ubj)}(hhh]j9)}(hThe fault has been tried once.h]hThe fault has been tried once.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM%hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM%hjubj)}(h7``FAULT_FLAG_USER`` The fault originated in userspace. h](j)}(h``FAULT_FLAG_USER``h]j?)}(hj`h]hFAULT_FLAG_USER}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM(hjZubj)}(hhh]j9)}(h"The fault originated in userspace.h]h"The fault originated in userspace.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhM(hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM(hjubj)}(h<``FAULT_FLAG_REMOTE`` The fault is not for current task/mm. h](j)}(h``FAULT_FLAG_REMOTE``h]j?)}(hjh]hFAULT_FLAG_REMOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM+hjubj)}(hhh]j9)}(h%The fault is not for current task/mm.h]h%The fault is not for current task/mm.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(hF``FAULT_FLAG_INSTRUCTION`` The fault was during an instruction fetch. h](j)}(h``FAULT_FLAG_INSTRUCTION``h]j?)}(hjh]hFAULT_FLAG_INSTRUCTION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM.hjubj)}(hhh]j9)}(h*The fault was during an instruction fetch.h]h*The fault was during an instruction fetch.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubj)}(hP``FAULT_FLAG_INTERRUPTIBLE`` The fault can be interrupted by non-fatal signals. h](j)}(h``FAULT_FLAG_INTERRUPTIBLE``h]j?)}(hj h]hFAULT_FLAG_INTERRUPTIBLE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM1hjubj)}(hhh]j9)}(h2The fault can be interrupted by non-fatal signals.h]h2The fault can be interrupted by non-fatal signals.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM1hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM1hjubj)}(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]j?)}(hjDh]hFAULT_FLAG_UNSHARE}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM6hj>ubj)}(hhh]j9)}(hThe 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]hThe 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]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM4hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM6hjubj)}(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]j?)}(hj~h]hFAULT_FLAG_ORIG_PTE_VALID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM:hjxubj)}(hhh]j9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM9hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubj)}(h<``FAULT_FLAG_VMA_LOCK`` The fault is handled under VMA lock.h](j)}(h``FAULT_FLAG_VMA_LOCK``h]j?)}(hjh]hFAULT_FLAG_VMA_LOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM<hjubj)}(hhh]j9)}(h$The fault is handled under VMA lock.h]h$The fault is handled under VMA lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhjhNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM?hj qhhubj9)}(hAbout **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](hAbout }(hjhhhNhNubjz)}(h**FAULT_FLAG_ALLOW_RETRY**h]hFAULT_FLAG_ALLOW_RETRY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and }(hjhhhNhNubjz)}(h**FAULT_FLAG_TRIED**h]hFAULT_FLAG_TRIED}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh: 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:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM!hj qhhubj+)}(hhh](j+)}(htALLOW_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)}(hDALLOW_RETRY and !TRIED: this means the page fault allows retry, andh]hDALLOW_RETRY and !TRIED: this means the page fault allows retry, and}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM&hjNubj)}(hhh]j9)}(hthis is the first tryh]hthis is the first try}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hM&hjaubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhj`hM&hjKubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1j+hjDubj+)}(hALLOW_RETRY and TRIED: this means the page fault allows retry, and we've already tried at least once h]j)}(hhh]j)}(hgALLOW_RETRY and TRIED: this means the page fault allows retry, and we've already tried at least once h](j)}(hDALLOW_RETRY and TRIED: this means the page fault allows retry, andh]hDALLOW_RETRY and TRIED: this means the page fault allows retry, and}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM)hjubj)}(hhh]j9)}(h!we've already tried at least onceh]h#we’ve already tried at least once}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j+hjDubj+)}(hH!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry h]j9)}(hG!ALLOW_RETRY and !TRIED: this means the page fault does not allow retryh]hG!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM+hjubah}(h]h ]h"]h$]h&]uh1j+hjDubeh}(h]h ]h"]h$]h&]j0, loweralphaj2,jk j3,j uh1j+hj qhhhjhNubj9)}(hXThe 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]hXThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM-hj qhhubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM4hj qhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_is_file_lru (C function)c.folio_is_file_lruhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h+int folio_is_file_lru (struct folio *folio)h]h)}(h*int folio_is_file_lru(struct folio *folio)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hKubh)}(hfolio_is_file_lruh]h)}(hfolio_is_file_lruh]hfolio_is_file_lru}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj2hKubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjGsbc.folio_is_file_lruasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj]ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj2hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj2hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj2hKhjhhubj )}(hhh]j9)}(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?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXR**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubj)}(hhh]j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j?)}(hj%h]hstruct folio *folio}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubj)}(hhh]j9)}(hThe folio to test.h]hThe folio to test.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubj9)}(hWe 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]hWe 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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubj9)}(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](hoAn integer (not a boolean!) used to sort a folio onto the right LRU list and to account folios correctly. 1 if }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhn is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhR is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__folio_clear_lru_flags (C function)c.__folio_clear_lru_flagshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2void __folio_clear_lru_flags (struct folio *folio)h]h)}(h1void __folio_clear_lru_flags(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhK?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK?ubh)}(h__folio_clear_lru_flagsh]h)}(h__folio_clear_lru_flagsh]h__folio_clear_lru_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK?ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj-hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hfolioh]hfolio}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjMmodnameN classnameNj\j_)}jb]je)}jXjsbc.__folio_clear_lru_flagsasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj2 )}(hj5 h]h*}(hjyhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj)ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj%ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK?ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK?hjhhubj )}(hhh]j9)}(h-Clear page lru flags before releasing a page.h]h-Clear page lru flags before releasing a page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhK?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK?ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(ha**Parameters** ``struct folio *folio`` The folio that was on lru and now has a zero reference.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKChjubj)}(hhh]j)}(hO``struct folio *folio`` The folio that was on lru and now has a zero reference.h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKEhjubj)}(hhh]j9)}(h7The folio that was on lru and now has a zero reference.h]h7The folio that was on lru and now has a zero reference.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhK@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_lru_list (C function)c.folio_lru_listhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2enum lru_list folio_lru_list (struct folio *folio)h]h)}(h1enum lru_list folio_lru_list(struct folio *folio)h](j!)}(hjh]henum}(hjKhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjGhhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKQubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjXhKQubh)}(hhh]h)}(hlru_listh]hlru_list}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlmodnameN classnameNj\j_)}jb]je)}jXfolio_lru_listsbc.folio_lru_listasbuh1hhjGhhhjXhKQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjXhKQubh)}(hfolio_lru_listh]h)}(hjh]hfolio_lru_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjXhKQubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.folio_lru_listasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjGhhhjXhKQubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjXhKQubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhjXhKQhj@hhubj )}(hhh]j9)}(h$Which LRU list should a folio be on?h]h$Which LRU list should a folio be on?}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKQhj6hhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjXhKQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKUhjUubj)}(hhh]j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j?)}(hjzh]hstruct folio *folio}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKRhjtubj)}(hhh]j9)}(hThe folio to test.h]hThe folio to test.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjqubah}(h]h ]h"]h$]h&]uh1jhjUubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKThjUubj9)}(hKThe LRU list a folio should be on, as an index into the array of LRU lists.h]hKThe LRU list a folio should be on, as an index into the array of LRU lists.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKThjUubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_folio (C macro) c.page_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(h page_folioh]h)}(h page_folioh]h)}(h page_folioh]h)}(hjh]h page_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM"ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM"ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM"hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM"ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj qhNhNubj9)}(h``page_folio (p)``h]j?)}(hj0h]hpage_folio (p)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM$hj qhhubjU)}(hConverts from page to folio. h]j9)}(hConverts from page to folio.h]hConverts from page to folio.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM"hjFubah}(h]h ]h"]h$]h&]uh1jThjXhM"hj qhhubjp)}(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](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM&hj_ubj)}(hhh]j)}(h``p`` The page. h](j)}(h``p``h]j?)}(hjh]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM#hj~ubj)}(hhh]j9)}(h The page.h]h The page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM#hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM#hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM%hj_ubj9)}(hQEvery page is part of a folio. This function cannot be called on a NULL pointer.h]hQEvery page is part of a folio. This function cannot be called on a NULL pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM%hj_ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM(hj_ubj9)}(hNo 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 }(hjhhhNhNubjz)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM(hj_ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM-hj_ubj9)}(h#The folio which contains this page.h]h#The folio which contains this page.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM,hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_page (C macro) c.folio_pagehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h folio_pageh]h)}(h folio_pageh]h)}(h folio_pageh]h)}(hj^h]h folio_page}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM3ubah}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhj{hM3ubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1hhj{hM3hjYhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjYhhhj{hM3ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubj9)}(h``folio_page (folio, n)``h]j?)}(hjh]hfolio_page (folio, n)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM5hj qhhubjU)}(hReturn a page from a folio. h]j9)}(hReturn a page from a folio.h]hReturn a page from a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM3hjubah}(h]h ]h"]h$]h&]uh1jThjhM3hj qhhubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM7hjubj)}(hhh](j)}(h``folio`` The folio. h](j)}(h ``folio``h]j?)}(hjh]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM4hjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(h!``n`` The page number to return. h](j)}(h``n``h]j?)}(hj'h]hn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM5hj!ubj)}(hhh]j9)}(hThe page number to return.h]hThe page number to return.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM5hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM5hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM7hjubj9)}(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](jz)}(h**n**h]hn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubhg is relative to the start of the folio. This function does not check that the page number lies within }(hjxhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubh9; the caller is presumed to have a reference to the page.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(folio_xor_flags_has_waiters (C function)c.folio_xor_flags_has_waitershNtauh1hhj qhhhNhNubh)}(hhh](h)}(hJbool folio_xor_flags_has_waiters (struct folio *folio, unsigned long mask)h]h)}(hIbool folio_xor_flags_has_waiters(struct folio *folio, unsigned long mask)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hfolio_xor_flags_has_waitersh]h)}(hfolio_xor_flags_has_waitersh]hfolio_xor_flags_has_waiters}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h)(struct folio *folio, unsigned long mask)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_xor_flags_has_waitersasbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjOhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(hChange some folio flags.h]hChange some folio flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hM hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM hjubj)}(h>``unsigned long mask`` Bits set in this word will be changed. h](j)}(h``unsigned long mask``h]j?)}(hjQh]hunsigned long mask}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjKubj)}(hhh]j9)}(h&Bits set in this word will be changed.h]h&Bits set in this word will be changed.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj9)}(h-Whether there are tasks waiting on the folio.h]h-Whether there are tasks waiting on the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_test_uptodate (C function)c.folio_test_uptodatehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4bool folio_test_uptodate (const struct folio *folio)h]h)}(h3bool folio_test_uptodate(const struct folio *folio)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_test_uptodateh]h)}(hfolio_test_uptodateh]hfolio_test_uptodate}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj4hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj!)}(hj$h]hstruct}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj0ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]h)}(hfolioh]hfolio}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjomodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_test_uptodateasbuh1hhj0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj0ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj,ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hIs this folio up to date?h]hIs this folio up to date?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM!hjubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hjh]hconst struct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhj ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjubj9)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_test_large (C function)c.folio_test_largehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h1bool folio_test_large (const struct folio *folio)h]h)}(h0bool folio_test_large(const struct folio *folio)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMqubh)}(hfolio_test_largeh]h)}(hfolio_test_largeh]hfolio_test_large}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMqubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_test_largeasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj6hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMqhjhhubj )}(hhh]j9)}(h+Does this folio contain more than one page?h]h+Does this folio contain more than one page?}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMqhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMqubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hz**Parameters** ``const struct folio *folio`` The folio to test. **Return** True if the folio is larger than one page.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMuhjubj)}(hhh]j)}(h1``const struct folio *folio`` The folio to test. h](j)}(h``const struct folio *folio``h]j?)}(hjh]hconst struct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMrhjubj)}(hhh]j9)}(hThe folio to test.h]hThe folio to test.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMthjubj9)}(h*True if the folio is larger than one page.h]h*True if the folio is larger than one page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMthjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌPageSlab (C function) c.PageSlabhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h'bool PageSlab (const struct page *page)h]h)}(h&bool PageSlab(const struct page *page)h](j)}(hj)h]hbool}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM5ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj;hM5ubh)}(hPageSlabh]h)}(hPageSlabh]hPageSlab}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj;hM5ubj)}(h(const struct page *page)h]j)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hjjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjPsb c.PageSlabasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjfubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubah}(h]h ]h"]h$]h&]jj uh1jhj*hhhj;hM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj;hM5ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1hhj;hM5hj#hhubj )}(hhh]j9)}(h3Determine if the page belongs to the slab allocatorh]h3Determine if the page belongs to the slab allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj;hM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const struct page *page`` The page to test. **Context** Any context. **Return** True for slab pages, false for any other kind of page.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM9hj$ubj)}(hhh]j)}(h.``const struct page *page`` The page to test. h](j)}(h``const struct page *page``h]j?)}(hjIh]hconst struct page *page}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM6hjCubj)}(hhh]j9)}(hThe page to test.h]hThe page to test.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hM6hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM6hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM8hj$ubj9)}(h Any context.h]h Any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM8hj$ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM:hj$ubj9)}(h6True for slab pages, false for any other kind of page.h]h6True for slab pages, false for any other kind of page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM9hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌPageHuge (C function) c.PageHugehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h'bool PageHuge (const struct page *page)h]h)}(h&bool PageHuge(const struct page *page)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQubh)}(hPageHugeh]h)}(hPageHugeh]hPageHuge}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMQubj)}(h(const struct page *page)h]j)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hj,hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj!)}(hj$h]hstruct}(hjGhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj(ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]h)}(hpageh]hpage}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjgmodnameN classnameNj\j_)}jb]je)}jXjsb c.PageHugeasbuh1hhj(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj(ubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMQhjhhubj )}(hhh]j9)}(h*Determine if the page belongs to hugetlbfsh]h*Determine if the page belongs to hugetlbfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMUhjubj)}(hhh]j)}(h.``const struct page *page`` The page to test. h](j)}(h``const struct page *page``h]j?)}(hj h]hconst struct page *page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMRhjubj)}(hhh]j9)}(hThe page to test.h]hThe page to test.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMRhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMRhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Context**h]jz)}(hjFh]hContext}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMThjubj9)}(h Any context.h]h Any context.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMThjubj9)}(h **Return**h]jz)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMVhjubj9)}(hWTrue for hugetlbfs pages, false for anon pages or pages belonging to other filesystems.h]hWTrue for hugetlbfs pages, false for anon pages or pages belonging to other filesystems.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_has_private (C function)c.folio_has_privatehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h1int folio_has_private (const struct folio *folio)h]h)}(h0int folio_has_private(const struct folio *folio)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_has_privateh]h)}(hfolio_has_privateh]hfolio_has_private}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj*modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_has_privateasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjVhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h$Determine if folio has private stuffh]h$Determine if folio has private stuff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh]j)}(h6``const struct folio *folio`` The folio to be checked h](j)}(h``const struct folio *folio``h]j?)}(hjh]hconst struct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh]j9)}(hThe folio to be checkedh]hThe folio to be checked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj9)}(hcDetermine if a folio has private stuff, indicating that release routines should be invoked upon it.h]hcDetermine if a folio has private stuff, indicating that release routines should be invoked upon it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)fault_flag_allow_retry_first (C function)c.fault_flag_allow_retry_firsthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9bool fault_flag_allow_retry_first (enum fault_flag flags)h]h)}(h8bool fault_flag_allow_retry_first(enum fault_flag flags)h](j)}(hj)h]hbool}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj[hMubh)}(hfault_flag_allow_retry_firsth]h)}(hfault_flag_allow_retry_firsth]hfault_flag_allow_retry_first}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhj[hMubj)}(h(enum fault_flag flags)h]j)}(henum fault_flag flagsh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h fault_flagh]h fault_flag}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjpsbc.fault_flag_allow_retry_firstasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhj[hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhj[hMubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1hhj[hMhjChhubj )}(hhh]j9)}(h check ALLOW_RETRY the first timeh]h check ALLOW_RETRY the first time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj[hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h'``enum fault_flag flags`` Fault flags. h](j)}(h``enum fault_flag flags``h]j?)}(hjAh]henum fault_flag flags}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj;ubj)}(hhh]j9)}(h Fault flags.h]h Fault flags.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hitrue if the page fault allows retry and this is the first attempt of the fault handling; false otherwise.h]hitrue if the page fault allows retry and this is the first attempt of the fault handling; false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_order (C function) c.folio_orderhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4unsigned int folio_order (const struct folio *folio)h]h)}(h3unsigned int folio_order(const struct folio *folio)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_orderh]h)}(h folio_orderh]h folio_order}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj!)}(hj$h]hstruct}(hj\hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(hfolioh]hfolio}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj|modnameN classnameNj\j_)}jb]je)}jXj'sb c.folio_orderasbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h The allocation order of a folio.h]h The allocation order of a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hj h]hconst struct folio *folio}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hSA folio is composed of 2^order pages. See get_order() for the definition of order.h]hSA folio is composed of 2^order pages. See get_order() for the definition of order.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hThe order of the folio.h]hThe order of the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_reset_order (C function)c.folio_reset_orderhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h,void folio_reset_order (struct folio *folio)h]h)}(h+void folio_reset_order(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_reset_orderh]h)}(hfolio_reset_orderh]hfolio_reset_order}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hj" hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj$ modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_reset_orderasbuh1hhj ubj)}(h h]h }(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hjP hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hj] hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h+Reset the folio order and derived _nr_pagesh]h+Reset the folio order and derived _nr_pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj h]hstruct folio *folio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj9)}(hgReset the order and derived _nr_pages to 0. Must only be used in the process of splitting large folios.h]hgReset the order and derived _nr_pages to 0. Must only be used in the process of splitting large folios.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapcount (C function)c.folio_mapcounthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h.int folio_mapcount (const struct folio *folio)h]h)}(h-int folio_mapcount(const struct folio *folio)h](j)}(hinth]hint}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM\ubj)}(h h]h }(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD hhhjV hM\ubh)}(hfolio_mapcounth]h)}(hfolio_mapcounth]hfolio_mapcount}(hji hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjD hhhjV hM\ubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjk sbc.folio_mapcountasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj} ubah}(h]h ]h"]h$]h&]jj uh1jhjD hhhjV hM\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@ hhhjV hM\ubah}(h]j; ah ](jjeh"]h$]h&]jj)jhuh1hhjV hM\hj= hhubj )}(hhh]j9)}(h!Number of mappings of this folio.h]h!Number of mappings of this folio.}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM\hj hhubah}(h]h ]h"]h$]h&]uh1jhj= hhhjV hM\ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j; j4j; j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjE h]h Parameters}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM`hj? ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hjd h]hconst struct folio *folio}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjb ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM]hj^ ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjy hM]hjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hM]hj[ ubah}(h]h ]h"]h$]h&]uh1jhj? ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM_hj? ubj9)}(hThe 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]hThe 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM_hj? ubj9)}(hWFor ordindary folios, each user page table entry (PTE/PMD/PUD/...) counts exactly once.h]hWFor ordindary folios, each user page table entry (PTE/PMD/PUD/...) counts exactly once.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMchj? ubj9)}(hFor 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]hFor 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMfhj? ubj9)}(heWill report 0 for pages which cannot be mapped into userspace, such as slab, page tables and similar.h]heWill report 0 for pages which cannot be mapped into userspace, such as slab, page tables and similar.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMjhj? ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMmhj? ubj9)}(h)The number of times this folio is mapped.h]h)The number of times this folio is mapped.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMmhj? ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapped (C function)c.folio_mappedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h-bool folio_mapped (const struct folio *folio)h]h)}(h,bool folio_mapped(const struct folio *folio)h](j)}(hj)h]hbool}(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4 hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM}ubj)}(h h]h }(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4 hhhjE hM}ubh)}(h folio_mappedh]h)}(h folio_mappedh]h folio_mapped}(hjX hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4 hhhjE hM}ubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjt hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubh)}(hhh]h)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjZ sbc.folio_mappedasbuh1hhjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjp ubh)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjl ubah}(h]h ]h"]h$]h&]jj uh1jhj4 hhhjE hM}ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0 hhhjE hM}ubah}(h]j+ ah ](jjeh"]h$]h&]jj)jhuh1hhjE hM}hj- hhubj )}(hhh]j9)}(h$Is this folio mapped into userspace?h]h$Is this folio mapped into userspace?}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM}hj hhubah}(h]h ]h"]h$]h&]uh1jhj- hhhjE hM}ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j* j4j* j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const struct folio *folio`` The folio. **Return** True if any page in this folio is referenced by user page tables.h](j9)}(h**Parameters**h]jz)}(hj4 h]h Parameters}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2 ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj. ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hjS h]hconst struct folio *folio}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM~hjM ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh hM~hji ubah}(h]h ]h"]h$]h&]uh1jhjM ubeh}(h]h ]h"]h$]h&]uh1jhjh hM~hjJ ubah}(h]h ]h"]h$]h&]uh1jhj. ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj. ubj9)}(hATrue if any page in this folio is referenced by user page tables.h]hATrue if any page in this folio is referenced by user page tables.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj. ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌthp_order (C function) c.thp_orderhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h*unsigned int thp_order (struct page *page)h]h)}(h)unsigned int thp_order(struct page *page)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(h thp_orderh]h)}(h thp_orderh]h thp_order}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj)}(h(struct page *page)h]j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj,hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]h)}(hpageh]hpage}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjLmodnameN classnameNj\j_)}jb]je)}jXjsb c.thp_orderasbuh1hhj(ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj(ubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhj hhubj )}(hhh]j9)}(h!Order of a transparent huge page.h]h!Order of a transparent huge page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hM**Parameters** ``struct page *page`` Head page of a transparent huge page.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h;``struct page *page`` Head page of a transparent huge page.h](j)}(h``struct page *page``h]j?)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j9)}(h%Head page of a transparent huge page.h]h%Head page of a transparent huge page.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌthp_size (C function) c.thp_sizehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h*unsigned long thp_size (struct page *page)h]h)}(h)unsigned long thp_size(struct page *page)h](j)}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubh)}(hthp_sizeh]h)}(hthp_sizeh]hthp_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhMubj)}(h(struct page *page)h]j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsb c.thp_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhjXhMhj?hhubj )}(hhh]j9)}(h Size of a transparent huge page.h]h Size of a transparent huge page.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhj qhNhNubjp)}(hx**Parameters** ``struct page *page`` Head page of a transparent huge page. **Return** Number of bytes in this page.h](j9)}(h**Parameters**h]jz)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjBubj)}(hhh]j)}(h<``struct page *page`` Head page of a transparent huge page. h](j)}(h``struct page *page``h]j?)}(hjgh]hstruct page *page}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjaubj)}(hhh]j9)}(h%Head page of a transparent huge page.h]h%Head page of a transparent huge page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjBubj9)}(hNumber of bytes in this page.h]hNumber of bytes in this page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_get (C function) c.folio_gethNtauh1hhj qhhhNhNubh)}(hhh](h)}(h$void folio_get (struct folio *folio)h]h)}(h#void folio_get(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_geth]h)}(h folio_geth]h folio_get}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj$hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjDmodnameN classnameNj\j_)}jb]je)}jXj sb c.folio_getasbuh1hhj ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hjphhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h)Increment the reference count on a folio.h]h)Increment the reference count on a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM"hjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Context**h]jz)}(hj#h]hContext}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM!hjubj9)}(hMay 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]hMay 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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_put (C function) c.folio_puthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h$void folio_put (struct folio *folio)h]h)}(h#void folio_put(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM=ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhM=ubh)}(h folio_puth]h)}(h folio_puth]h folio_put}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjvhM=ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsb c.folio_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjdhhhjvhM=ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjvhM=ubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1hhjvhM=hj]hhubj )}(hhh]j9)}(h)Decrement the reference count on a folio.h]h)Decrement the reference count on a folio.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM=hj%hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhM=ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@j4j@j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMAhjDubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjih]hstruct folio *folio}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM>hjcubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM>hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM>hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM@hjDubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM@hjDubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMFhjDubj9)}(hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.h]hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMFhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_put_refs (C function)c.folio_put_refshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h3void folio_put_refs (struct folio *folio, int refs)h]h)}(h2void folio_put_refs(struct folio *folio, int refs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMPubh)}(hfolio_put_refsh]h)}(hfolio_put_refsh]hfolio_put_refs}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMPubj)}(h(struct folio *folio, int refs)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjMhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]h)}(hfolioh]hfolio}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmmodnameN classnameNj\j_)}jb]je)}jXj3sbc.folio_put_refsasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjIubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubj)}(hint refsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hrefsh]hrefs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMPubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMPubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMPhjhhubj )}(hhh]j9)}(h&Reduce the reference count on a folio.h]h&Reduce the reference count on a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMPhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMPubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMThj!ubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjFh]hstruct folio *folio}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMQhj@ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMQhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMQhj=ubj)}(hF``int refs`` The amount to subtract from the folio's reference count. h](j)}(h ``int refs``h]j?)}(hjh]hint refs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMRhjyubj)}(hhh]j9)}(h8The amount to subtract from the folio's reference count.h]h:The amount to subtract from the folio’s reference count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMRhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMThj!ubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMThj!ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMZhj!ubj9)}(hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.h]hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMZhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolios_put (C function) c.folios_puthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h,void folios_put (struct folio_batch *folios)h]h)}(h+void folios_put(struct folio_batch *folios)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMyubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hMyubh)}(h folios_puth]h)}(h folios_puth]h folios_put}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMyubj)}(h(struct folio_batch *folios)h]j)}(hstruct folio_batch *foliosh](j!)}(hj$h]hstruct}(hjchhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjIsb c.folios_putasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_ubh)}(hfoliosh]hfolios}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubah}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hMyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj4hMyhjhhubj )}(hhh]j9)}(h4Decrement the reference count on an array of folios.h]h4Decrement the reference count on an array of folios.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMyhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMyubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM}hjubj)}(hhh]j)}(h+``struct folio_batch *folios`` The folios. h](j)}(h``struct folio_batch *folios``h]j?)}(hj'h]hstruct folio_batch *folios}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMzhj!ubj)}(hhh]j9)}(h The folios.h]h The folios.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMzhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMzhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM|hjubj9)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM|hjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.h]hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_pfn (C function) c.folio_pfnhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h3unsigned long folio_pfn (const struct folio *folio)h]h)}(h2unsigned long folio_pfn(const struct folio *folio)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_pfnh]h)}(h folio_pfnh]h folio_pfn}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj!)}(hj$h]hstruct}(hjBhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]h)}(hfolioh]hfolio}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]je)}jXj sb c.folio_pfnasbuh1hhj#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj#ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h(Return the Page Frame Number of a folio.h]h(Return the Page Frame Number of a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hjh]hconst struct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hSA folio may contain multiple pages. The pages have consecutive Page Frame Numbers.h]hSA folio may contain multiple pages. The pages have consecutive Page Frame Numbers.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h **Return**h]jz)}(hjhh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h5The Page Frame Number of the first page in the folio.h]h5The Page Frame Number of the first page in the folio.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mk_pte (C function)c.folio_mk_ptehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9pte_t folio_mk_pte (struct folio *folio, pgprot_t pgprot)h]h)}(h8pte_t folio_mk_pte(struct folio *folio, pgprot_t pgprot)h](h)}(hhh]h)}(hpte_th]hpte_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jX folio_mk_ptesbc.folio_mk_pteasbuh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_mk_pteh]h)}(hjh]h folio_mk_pte}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h&(struct folio *folio, pgprot_t pgprot)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.folio_mk_pteasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjIhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgprot_t pgproth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]jc.folio_mk_pteasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hpgproth]hpgprot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hCreate a PTE for this folioh]hCreate a PTE for this folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX9**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh](j)}(h6``struct folio *folio`` The folio to create a PTE for h](j)}(h``struct folio *folio``h]j?)}(hj h]hstruct folio *folio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j9)}(hThe folio to create a PTE forh]hThe folio to create a PTE for}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``pgprot_t pgprot`` The page protection bits to use h](j)}(h``pgprot_t pgprot``h]j?)}(hjBh]hpgprot_t pgprot}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj<ubj)}(hhh]j9)}(hThe page protection bits to useh]hThe page protection bits to use}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(hgCreate a page table entry for the first page of this folio. This is suitable for passing to set_ptes().h]hgCreate a page table entry for the first page of this folio. This is suitable for passing to set_ptes().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj9)}(h3A page table entry suitable for mapping this folio.h]h3A page table entry suitable for mapping this folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mk_pmd (C function)c.folio_mk_pmdhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9pmd_t folio_mk_pmd (struct folio *folio, pgprot_t pgprot)h]h)}(h8pmd_t folio_mk_pmd(struct folio *folio, pgprot_t pgprot)h](h)}(hhh]h)}(hpmd_th]hpmd_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jX folio_mk_pmdsbc.folio_mk_pmdasbuh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(h folio_mk_pmdh]h)}(hj h]h folio_mk_pmd}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h&(struct folio *folio, pgprot_t pgprot)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(hfolioh]hfolio}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj[modnameN classnameNj\j_)}jb]jc.folio_mk_pmdasbuh1hhj7ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubj)}(hpgprot_t pgproth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.folio_mk_pmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpgproth]hpgprot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(hCreate a PMD for this folioh]hCreate a PMD for this folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX;**Parameters** ``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](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj)}(hhh](j)}(h6``struct folio *folio`` The folio to create a PMD for h](j)}(h``struct folio *folio``h]j?)}(hjEh]hstruct folio *folio}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj?ubj)}(hhh]j9)}(hThe folio to create a PMD forh]hThe folio to create a PMD for}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubj)}(h4``pgprot_t pgprot`` The page protection bits to use h](j)}(h``pgprot_t pgprot``h]j?)}(hj~h]hpgprot_t pgprot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjxubj)}(hhh]j9)}(hThe page protection bits to useh]hThe page protection bits to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj9)}(hiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pmd_at().h]hiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pmd_at().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj9)}(h3A page table entry suitable for mapping this folio.h]h3A page table entry suitable for mapping this folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#folio_maybe_dma_pinned (C function)c.folio_maybe_dma_pinnedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h1bool folio_maybe_dma_pinned (struct folio *folio)h]h)}(h0bool folio_maybe_dma_pinned(struct folio *folio)h](j)}(hj)h]hbool}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM&ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj2hM&ubh)}(hfolio_maybe_dma_pinnedh]h)}(hfolio_maybe_dma_pinnedh]hfolio_maybe_dma_pinned}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj2hM&ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjGsbc.folio_maybe_dma_pinnedasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj]ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubah}(h]h ]h"]h$]h&]jj uh1jhj!hhhj2hM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj2hM&ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj2hM&hjhhubj )}(hhh]j9)}(h(Report if a folio may be pinned for DMA.h]h(Report if a folio may be pinned for DMA.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM&hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hM&ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM*hjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj%h]hstruct folio *folio}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM'hjubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hM'hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM'hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM)hjubj9)}(hhThis function checks if a folio has been pinned via a call to a function in the pin_user_pages() family.h]hhThis function checks if a folio has been pinned via a call to a function in the pin_user_pages() family.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM)hjubj9)}(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”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM,hjubj9)}(hFalse 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]hFalse 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM1hjubj9)}(hFor 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]hFor 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM5hjubj9)}(hKFor more information, please see Documentation/core-api/pin_user_pages.rst.h]hKFor more information, please see Documentation/core-api/pin_user_pages.rst.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM9hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM;hjubj9)}(hmTrue, if it is likely that the folio has been "dma-pinned". False, if the folio is definitely not dma-pinned.h]hqTrue, if it is likely that the folio has been “dma-pinned”. False, if the folio is definitely not dma-pinned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_zero_page (C function)c.is_zero_pagehNtauh1hhj qhhhNhNubh)}(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]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMaubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMaubh)}(h is_zero_pageh]h)}(h is_zero_pageh]h is_zero_page}(hj( hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMaubj)}(h(const struct page *page)h]j)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hjD hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@ ubj)}(h h]h }(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubj!)}(hj$h]hstruct}(hj_ hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@ ubj)}(h h]h }(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubh)}(hhh]h)}(hpageh]hpage}(hj} hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXj* sbc.is_zero_pageasbuh1hhj@ ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj@ ubh)}(hpageh]hpage}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj< ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMaubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMahjhhubj )}(hhh]j9)}(hQuery if a page is a zero pageh]hQuery if a page is a zero page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMahj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMaubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const struct page *page`` The page to query **Description** This returns true if **page** is one of the permanent zero pages.h](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMehj ubj)}(hhh]j)}(h.``const struct page *page`` The page to query h](j)}(h``const struct page *page``h]j?)}(hj#!h]hconst struct page *page}(hj%!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!!ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMbhj!ubj)}(hhh]j9)}(hThe page to queryh]hThe page to query}(hj ah"]h$]h&]uh1j1 hj!ubh)}(hfolioh]hfolio}(hje"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj!ubah}(h]h ]h"]h$]h&]jj uh1jhj!hhhj!hMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj!hMlubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1hhj!hMlhj!hhubj )}(hhh]j9)}(hQuery if a folio is a zero pageh]hQuery if a folio is a zero page}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMlhj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j"j4j"j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const struct folio *folio`` The folio to query **Description** This returns true if **folio** is one of the permanent zero pages.h](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMphj"ubj)}(hhh]j)}(h1``const struct folio *folio`` The folio to query h](j)}(h``const struct folio *folio``h]j?)}(hj"h]hconst struct folio *folio}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMmhj"ubj)}(hhh]j9)}(hThe folio to queryh]hThe folio to query}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hMmhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMmhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubj9)}(h**Description**h]jz)}(hj #h]h Description}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj #ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMohj"ubj9)}(hBThis returns true if **folio** is one of the permanent zero pages.h](hThis returns true if }(hj!#hhhNhNubjz)}(h **folio**h]hfolio}(hj)#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!#ubh$ is one of the permanent zero pages.}(hj!#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMohj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_nr_pages (C function)c.folio_nr_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h/long folio_nr_pages (const struct folio *folio)h]h)}(h.long folio_nr_pages(const struct folio *folio)h](j)}(hlongh]hlong}(hjb#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^#hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjq#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^#hhhjp#hMubh)}(hfolio_nr_pagesh]h)}(hfolio_nr_pagesh]hfolio_nr_pages}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^#hhhjp#hMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj#hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj!)}(hj$h]hstruct}(hj#hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]h)}(hfolioh]hfolio}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]je)}jXj#sbc.folio_nr_pagesasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj2 )}(hj5 h]h*}(hj$hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj#ubh)}(hfolioh]hfolio}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj#ubah}(h]h ]h"]h$]h&]jj uh1jhj^#hhhjp#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZ#hhhjp#hMubah}(h]jU#ah ](jjeh"]h$]h&]jj)jhuh1hhjp#hMhjW#hhubj )}(hhh]j9)}(h!The number of pages in the folio.h]h!The number of pages in the folio.}(hj=$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj:$hhubah}(h]h ]h"]h$]h&]uh1jhjW#hhhjp#hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jU$j4jU$j5j6j7uh1hhhhj qhNhNubjp)}(h`**Parameters** ``const struct folio *folio`` The folio. **Return** A positive power of two.h](j9)}(h**Parameters**h]jz)}(hj_$h]h Parameters}(hja$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]$ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjY$ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hj~$h]hconst struct folio *folio}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|$ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjx$ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjx$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhju$ubah}(h]h ]h"]h$]h&]uh1jhjY$ubj9)}(h **Return**h]jz)}(hj$h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjY$ubj9)}(hA positive power of two.h]hA positive power of two.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjY$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_next (C function) c.folio_nexthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h/struct folio * folio_next (struct folio *folio)h]h)}(h-struct folio *folio_next(struct folio *folio)h](j!)}(hj$h]hstruct}(hj$hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj$hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj %hMubh)}(hhh]h)}(hfolioh]hfolio}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj%modnameN classnameNj\j_)}jb]je)}jX folio_nextsb c.folio_nextasbuh1hhj$hhhj %hMubj)}(h h]h }(hj>%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj %hMubj2 )}(hj5 h]h*}(hjL%hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj$hhhj %hMubh)}(h folio_nexth]h)}(hj;%h]h folio_next}(hj]%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj %hMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjx%hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjt%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt%ubh)}(hhh]h)}(hfolioh]hfolio}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj%modnameN classnameNj\j_)}jb]j9% c.folio_nextasbuh1hhjt%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt%ubj2 )}(hj5 h]h*}(hj%hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjt%ubh)}(hfolioh]hfolio}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt%ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjp%ubah}(h]h ]h"]h$]h&]jj uh1jhj$hhhj %hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj %hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhj %hMhj$hhubj )}(hhh]j9)}(h Move to the next physical folio.h]h Move to the next physical folio.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj %hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubj)}(hhh]j)}(h@``struct folio *folio`` The folio we're currently operating on. h](j)}(h``struct folio *folio``h]j?)}(hj:&h]hstruct folio *folio}(hj<&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8&ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj4&ubj)}(hhh]j9)}(h'The folio we're currently operating on.h]h)The folio we’re currently operating on.}(hjS&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjO&hMhjP&ubah}(h]h ]h"]h$]h&]uh1jhj4&ubeh}(h]h ]h"]h$]h&]uh1jhjO&hMhj1&ubah}(h]h ]h"]h$]h&]uh1jhj&ubj9)}(h**Description**h]jz)}(hju&h]h Description}(hjw&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs&ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubj9)}(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](hRIf you have physically contiguous memory which may span more than one folio (eg a }(hj&hhhNhNubh)}(h":c:type:`struct bio_vec `h]j?)}(hj&h]hstruct bio_vec}(hj&hhhNhNubah}(h]h ](j%j-c-typeeh"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]refdocj1 refdomainj-reftypetype refexplicitrefwarnj\j7j:bio_vecuh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubh), use this function to move from one folio to the next. Do not use it if the memory is only virtually contiguous as the folios are almost certainly not adjacent to each other. This is the folio equivalent to writing }(hj&hhhNhNubj?)}(h ``page++``h]hpage++}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj&hMhj&ubj9)}(h **Context**h]jz)}(hj&h]hContext}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubj9)}(hpWe assume that the folios are refcounted and/or locked at a higher level and do not adjust the reference counts.h]hpWe assume that the folios are refcounted and/or locked at a higher level and do not adjust the reference counts.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubj9)}(h **Return**h]jz)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubj9)}(hThe next struct folio.h]hThe next struct folio.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_shift (C function) c.folio_shifthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4unsigned int folio_shift (const struct folio *folio)h]h)}(h3unsigned int folio_shift(const struct folio *folio)h](j)}(hunsignedh]hunsigned}(hj='hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjL'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhjK'hMubj)}(hinth]hint}(hjZ'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhjK'hMubj)}(h h]h }(hjh'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhjK'hMubh)}(h folio_shifth]h)}(h folio_shifth]h folio_shift}(hjz'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9'hhhjK'hMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj!)}(hj$h]hstruct}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]h)}(hfolioh]hfolio}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'modnameN classnameNj\j_)}jb]je)}jXj|'sb c.folio_shiftasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj2 )}(hj5 h]h*}(hj'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj'ubh)}(hfolioh]hfolio}(hj (hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj'ubah}(h]h ]h"]h$]h&]jj uh1jhj9'hhhjK'hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5'hhhjK'hMubah}(h]j0'ah ](jjeh"]h$]h&]jj)jhuh1hhjK'hMhj2'hhubj )}(hhh]j9)}(h/The size of the memory described by this folio.h]h/The size of the memory described by this folio.}(hj4(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1(hhubah}(h]h ]h"]h$]h&]uh1jhj2'hhhjK'hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jL(j4jL(j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjV(h]h Parameters}(hjX(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT(ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hju(h]hconst struct folio *folio}(hjw(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjs(ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjo(ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhjo(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjl(ubah}(h]h ]h"]h$]h&]uh1jhjP(ubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj9)}(hA 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]hA 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(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj9)}(h **Context**h]jz)}(hj(h]hContext}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj9)}(hThe 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]hThe 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(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj9)}(h **Return**h]jz)}(hj(h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubj9)}(h/The base-2 logarithm of the size of this folio.h]h/The base-2 logarithm of the size of this folio.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjP(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_size (C function) c.folio_sizehNtauh1hhj qhhhNhNubh)}(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]h)}(hsize_th]hsize_t}(hjF)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjH)modnameN classnameNj\j_)}jb]je)}jX folio_sizesb c.folio_sizeasbuh1hhj?)hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hjh)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?)hhhjg)hMubh)}(h folio_sizeh]h)}(hjd)h]h folio_size}(hjz)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?)hhhjg)hMubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj)hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj!)}(hj$h]hstruct}(hj)hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hfolioh]hfolio}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj)modnameN classnameNj\j_)}jb]jb) c.folio_sizeasbuh1hhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj2 )}(hj5 h]h*}(hj)hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj)ubh)}(hfolioh]hfolio}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj)ubah}(h]h ]h"]h$]h&]jj uh1jhj?)hhhjg)hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;)hhhjg)hMubah}(h]j6)ah ](jjeh"]h$]h&]jj)jhuh1hhjg)hMhj8)hhubj )}(hhh]j9)}(hThe number of bytes in a folio.h]hThe number of bytes in a folio.}(hj1*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj.*hhubah}(h]h ]h"]h$]h&]uh1jhj8)hhhjg)hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jI*j4jI*j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjS*h]h Parameters}(hjU*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ*ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjM*ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hjr*h]hconst struct folio *folio}(hjt*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjp*ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjl*ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjl*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhji*ubah}(h]h ]h"]h$]h&]uh1jhjM*ubj9)}(h **Context**h]jz)}(hj*h]hContext}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjM*ubj9)}(hThe 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]hThe 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*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjM*ubj9)}(h **Return**h]jz)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjM*ubj9)}(h"The number of bytes in this folio.h]h"The number of bytes in this folio.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjM*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&folio_maybe_mapped_shared (C function)c.folio_maybe_mapped_sharedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4bool folio_maybe_mapped_shared (struct folio *folio)h]h)}(h3bool folio_maybe_mapped_shared(struct folio *folio)h](j)}(hj)h]hbool}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hj'+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj&+hMubh)}(hfolio_maybe_mapped_sharedh]h)}(hfolio_maybe_mapped_sharedh]hfolio_maybe_mapped_shared}(hj9+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj&+hMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjU+hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQ+ubj)}(h h]h }(hjb+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ+ubh)}(hhh]h)}(hfolioh]hfolio}(hjs+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetju+modnameN classnameNj\j_)}jb]je)}jXj;+sbc.folio_maybe_mapped_sharedasbuh1hhjQ+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ+ubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQ+ubh)}(hfolioh]hfolio}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ+ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjM+ubah}(h]h ]h"]h$]h&]jj uh1jhj+hhhj&+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj&+hMubah}(h]j +ah ](jjeh"]h$]h&]jj)jhuh1hhj&+hMhj+hhubj )}(hhh]j9)}(hDWhether the folio is mapped into the page tables of more than one MMh]hDWhether the folio is mapped into the page tables of more than one MM}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj&+hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j+j4j+j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj,h]hstruct folio *folio}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj,ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj2,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.,hMhj/,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj.,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(h**Description**h]jz)}(hjT,h]h Description}(hjV,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjR,ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+ubj9)}(hThis 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]hThis 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”).}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+ubj9)}(hFor 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]hFor 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.}(hjy,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hj+ubj9)}(hXFor small anonymous folios and anonymous hugetlb folios, the return value will be exactly correct: non-KSM folios can only be mapped at most once into an MM, and they cannot be partially mapped. KSM folios are considered shared even if mapped multiple times into the same MM.h]hXFor small anonymous folios and anonymous hugetlb folios, the return value will be exactly correct: non-KSM folios can only be mapped at most once into an MM, and they cannot be partially mapped. KSM folios are considered shared even if mapped multiple times into the same MM.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+ubj)}(hhh]j)}(hXFor other folios, the result can be fuzzy: #. For partially-mappable large folios (THP), the return value can wrongly indicate "mapped shared" (false positive) if a folio was mapped by more than two MMs at one point in time. #. For pagecache folios (including hugetlb), the return value can wrongly indicate "mapped shared" (false positive) when two VMAs in the same MM cover the same file range. h](j)}(h*For other folios, the result can be fuzzy:h]h*For other folios, the result can be fuzzy:}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj,ubj)}(hhh]j+)}(hhh](j+)}(hFor 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]j9)}(hFor 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]hFor 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,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj,ubah}(h]h ]h"]h$]h&]uh1j+hj,ubj+)}(hFor 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]j9)}(hFor 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]hFor 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,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj,ubah}(h]h ]h"]h$]h&]uh1j+hj,ubeh}(h]h ]h"]h$]h&]j0,j1,j2,hj3,j4,uh1j+hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(hoFurther, this function only considers current page table mappings that are tracked using the folio mapcount(s).h]hoFurther, this function only considers current page table mappings that are tracked using the folio mapcount(s).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj+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-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM%hj-ubj)}(hhh]j+)}(hhh](j+)}(hsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).h]j9)}(hsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).h]hsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).}(hj,-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM!hj(-ubah}(h]h ]h"]h$]h&]uh1j+hj%-ubj+)}(h/If the folio is mapped differently (VM_PFNMAP).h]j9)}(hjC-h]h/If the folio is mapped differently (VM_PFNMAP).}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM#hjA-ubah}(h]h ]h"]h$]h&]uh1j+hj%-ubj+)}(hYIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared(). h]j9)}(hXIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared().h]hXIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared().}(hj]-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM$hjY-ubah}(h]h ]h"]h$]h&]uh1j+hj%-ubeh}(h]h ]h"]h$]h&]j0,j1,j2,hj3,j4,uh1j+hj"-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj!-hM%hj -ubah}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM'hj+ubj9)}(hBWhether the folio is estimated to be mapped into more than one MM.h]hBWhether the folio is estimated to be mapped into more than one MM.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM'hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%folio_expected_ref_count (C function)c.folio_expected_ref_counthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h8int folio_expected_ref_count (const struct folio *folio)h]h)}(h7int folio_expected_ref_count(const struct folio *folio)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMDubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMDubh)}(hfolio_expected_ref_counth]h)}(hfolio_expected_ref_counth]hfolio_expected_ref_count}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj-hMDubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj.hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj .ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubj!)}(hj$h]hstruct}(hj).hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj .ubj)}(h h]h }(hj6.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubh)}(hhh]h)}(hfolioh]hfolio}(hjG.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD.ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjI.modnameN classnameNj\j_)}jb]je)}jXj-sbc.folio_expected_ref_countasbuh1hhj .ubj)}(h h]h }(hjg.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubj2 )}(hj5 h]h*}(hju.hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj .ubh)}(hfolioh]hfolio}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj .ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj.ubah}(h]h ]h"]h$]h&]jj uh1jhj-hhhj-hMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhj-hMDubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1hhj-hMDhj-hhubj )}(hhh]j9)}(h%calculate the expected folio refcounth]h%calculate the expected folio refcount}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMDhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.j4j.j5j6j7uh1hhhhj qhNhNubjp)}(hX!**Parameters** ``const struct folio *folio`` the folio **Description** Calculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references). Does currently not consider references from the LRU cache. If the folio was isolated from the LRU (which is the case during migration or split), the LRU cache does not apply. Calling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result. Calling this function on a mapped folio will not result in a stable result, because nothing stops additional page table mappings from coming (e.g., fork()) or going (e.g., munmap()). Calling this function without the folio lock will also not result in a stable result: for example, the folio might get dropped from the swapcache concurrently. However, even when called without the folio lock or on a mapped folio, this function can be used to detect unexpected references early (for example, if it makes sense to even lock the folio and unmap it). The caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result. Returns the expected folio refcount.h](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMHhj.ubj)}(hhh]j)}(h(``const struct folio *folio`` the folio h](j)}(h``const struct folio *folio``h]j?)}(hj.h]hconst struct folio *folio}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMEhj.ubj)}(hhh]j9)}(h the folioh]h the folio}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMEhj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hMEhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hj(/h]h Description}(hj*/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&/ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMGhj.ubj9)}(hXCalculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references).h]hXCalculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references).}(hj>/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMGhj.ubj9)}(hDoes 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]hDoes 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.}(hjM/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMLhj.ubj9)}(hlCalling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result.h]hlCalling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result.}(hj\/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMPhj.ubj9)}(hCalling 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]hCalling 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()).}(hjk/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMShj.ubj9)}(hCalling 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]hCalling 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.}(hjz/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMWhj.ubj9)}(hHowever, 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]hHowever, even when called without the folio lock or on a mapped folio, this function can be used to detect unexpected references early (for example, if it makes sense to even lock the folio and unmap it).}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM[hj.ubj9)}(hhThe caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result.h]hhThe caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM_hj.ubj9)}(h$Returns the expected folio refcount.h]h$Returns the expected folio refcount.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMbhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpagetable_alloc (C function)c.pagetable_allochNtauh1hhj qhhhNhNubh)}(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!)}(hj$h]hstruct}(hj/hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj/hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM( ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hM( ubh)}(hhh]h)}(hptdesch]hptdesc}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/modnameN classnameNj\j_)}jb]je)}jXpagetable_allocsbc.pagetable_allocasbuh1hhj/hhhj/hM( ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hM( ubj2 )}(hj5 h]h*}(hj$0hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj/hhhj/hM( ubh)}(hpagetable_alloch]h)}(hj0h]hpagetable_alloc}(hj50hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj10ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj/hM( ubj)}(h(gfp_t gfp, unsigned int order)h](j)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjS0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP0ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjU0modnameN classnameNj\j_)}jb]j0c.pagetable_allocasbuh1hhjL0ubj)}(h h]h }(hjq0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL0ubh)}(hgfph]hgfp}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjH0ubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(horderh]horder}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjH0ubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhj/hM( ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhj/hM( ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhj/hM( hj/hhubj )}(hhh]j9)}(hAllocate pagetablesh]hAllocate pagetables}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM( hj0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hM( ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM, hj1ubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags h](j)}(h ``gfp_t gfp``h]j?)}(hj;1h]h gfp_t gfp}(hj=1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj91ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM) hj51ubj)}(hhh]j9)}(h GFP flagsh]h GFP flags}(hjT1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjP1hM) hjQ1ubah}(h]h ]h"]h$]h&]uh1jhj51ubeh}(h]h ]h"]h$]h&]uh1jhjP1hM) hj21ubj)}(h/``unsigned int order`` desired pagetable order h](j)}(h``unsigned int order``h]j?)}(hjt1h]hunsigned int order}(hjv1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjr1ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM* hjn1ubj)}(hhh]j9)}(hdesired pagetable orderh]hdesired pagetable order}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hM* hj1ubah}(h]h ]h"]h$]h&]uh1jhjn1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM* hj21ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM, hj1ubj9)}(hlpagetable_alloc allocates memory for page tables as well as a page table descriptor to describe that memory.h]hlpagetable_alloc allocates memory for page tables as well as a page table descriptor to describe that memory.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM, hj1ubj9)}(h **Return**h]jz)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM/ hj1ubj9)}(h0The ptdesc describing the allocated page tables.h]h0The ptdesc describing the allocated page tables.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM/ hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpagetable_free (C function)c.pagetable_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h'void pagetable_free (struct ptdesc *pt)h]h)}(h&void pagetable_free(struct ptdesc *pt)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM: ubj)}(h h]h }(hj*2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj)2hM: ubh)}(hpagetable_freeh]h)}(hpagetable_freeh]hpagetable_free}(hj<2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj82ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhj)2hM: ubj)}(h(struct ptdesc *pt)h]j)}(hstruct ptdesc *pth](j!)}(hj$h]hstruct}(hjX2hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjT2ubj)}(h h]h }(hje2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT2ubh)}(hhh]h)}(hptdesch]hptdesc}(hjv2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjx2modnameN classnameNj\j_)}jb]je)}jXj>2sbc.pagetable_freeasbuh1hhjT2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT2ubj2 )}(hj5 h]h*}(hj2hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjT2ubh)}(hpth]hpt}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT2ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjP2ubah}(h]h ]h"]h$]h&]jj uh1jhj2hhhj)2hM: ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhj)2hM: ubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1hhj)2hM: hj2hhubj )}(hhh]j9)}(hFree pagetablesh]hFree pagetables}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM: hj2hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj)2hM: ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM> hj2ubj)}(hhh]j)}(h0``struct ptdesc *pt`` The page table descriptor h](j)}(h``struct ptdesc *pt``h]j?)}(hj3h]hstruct ptdesc *pt}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM; hj3ubj)}(hhh]j9)}(hThe page table descriptorh]hThe page table descriptor}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj13hM; hj23ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj13hM; hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubj9)}(h**Description**h]jz)}(hjW3h]h Description}(hjY3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU3ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM= hj2ubj9)}(hpagetable_free frees the memory of all page tables described by a page table descriptor and the memory for the descriptor itself.h]hpagetable_free frees the memory of all page tables described by a page table descriptor and the memory for the descriptor itself.}(hjm3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM= hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvma_lookup (C function) c.vma_lookuphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hMstruct vm_area_struct * vma_lookup (struct mm_struct *mm, unsigned long addr)h]h)}(hKstruct vm_area_struct *vma_lookup(struct mm_struct *mm, unsigned long addr)h](j!)}(hj$h]hstruct}(hj3hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj3hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMQ ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMQ ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj3modnameN classnameNj\j_)}jb]je)}jX vma_lookupsb c.vma_lookupasbuh1hhj3hhhj3hMQ ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMQ ubj2 )}(hj5 h]h*}(hj3hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj3hhhj3hMQ ubh)}(h vma_lookuph]h)}(hj3h]h vma_lookup}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hMQ ubj)}(h*(struct mm_struct *mm, unsigned long addr)h](j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hj4hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj4ubj)}(h h]h }(hj#4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hj44hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj14ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj64modnameN classnameNj\j_)}jb]j3 c.vma_lookupasbuh1hhj4ubj)}(h h]h }(hjR4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj2 )}(hj5 h]h*}(hj`4hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj4ubh)}(hmmh]hmm}(hjm4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj4ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hlongh]hlong}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(haddrh]haddr}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj4ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhj3hMQ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hMQ ubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhj3hMQ hj3hhubj )}(hhh]j9)}(h Find a VMA at a specific addressh]h Find a VMA at a specific address}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMQ hj4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMQ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj 5h]h Parameters}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMU hj5ubj)}(hhh](j)}(h4``struct mm_struct *mm`` The process address space. h](j)}(h``struct mm_struct *mm``h]j?)}(hj)5h]hstruct mm_struct *mm}(hj+5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMR hj#5ubj)}(hhh]j9)}(hThe process address space.h]hThe process address space.}(hjB5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>5hMR hj?5ubah}(h]h ]h"]h$]h&]uh1jhj#5ubeh}(h]h ]h"]h$]h&]uh1jhj>5hMR hj 5ubj)}(h)``unsigned long addr`` The user address. h](j)}(h``unsigned long addr``h]j?)}(hjb5h]hunsigned long addr}(hjd5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMS hj\5ubj)}(hhh]j9)}(hThe user address.h]hThe user address.}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjw5hMS hjx5ubah}(h]h ]h"]h$]h&]uh1jhj\5ubeh}(h]h ]h"]h$]h&]uh1jhjw5hMS hj 5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj9)}(h **Return**h]jz)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMU hj5ubj9)}(hhj5ubh otherwise.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMU hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ vma_is_special_huge (C function)c.vma_is_special_hugehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h;bool vma_is_special_huge (const struct vm_area_struct *vma)h]h)}(h:bool vma_is_special_huge(const struct vm_area_struct *vma)h](j)}(hj)h]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj6hMubh)}(hvma_is_special_hugeh]h)}(hvma_is_special_hugeh]hvma_is_special_huge}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj6hMubj)}(h"(const struct vm_area_struct *vma)h]j)}(h const struct vm_area_struct *vmah](j!)}(hjeh]hconst}(hj06hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj,6ubj)}(h h]h }(hj=6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,6ubj!)}(hj$h]hstruct}(hjK6hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj,6ubj)}(h h]h }(hjX6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,6ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hji6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf6ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjk6modnameN classnameNj\j_)}jb]je)}jXj6sbc.vma_is_special_hugeasbuh1hhj,6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,6ubj2 )}(hj5 h]h*}(hj6hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj,6ubh)}(hvmah]hvma}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,6ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj(6ubah}(h]h ]h"]h$]h&]jj uh1jhj5hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj6hMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhj6hMhj5hhubj )}(hhh]j9)}(h4Are transhuge page-table entries considered special?h]h4Are transhuge page-table entries considered special?}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj6hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhj qhNhNubjp)}(hXF**Parameters** ``const struct vm_area_struct *vma`` Pointer to the struct vm_area_struct to consider **Description** Whether transhuge page-table entries are considered "special" following the definition in vm_normal_page(). **Return** true if transhuge page-table entries should be considered special, false otherwise.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6ubj)}(hhh]j)}(hV``const struct vm_area_struct *vma`` Pointer to the struct vm_area_struct to consider h](j)}(h$``const struct vm_area_struct *vma``h]j?)}(hj7h]h const struct vm_area_struct *vma}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 7ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj 7ubj)}(hhh]j9)}(h0Pointer to the struct vm_area_struct to considerh]h0Pointer to the struct vm_area_struct to consider}(hj(7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$7hMhj%7ubah}(h]h ]h"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]uh1jhj$7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubj9)}(h**Description**h]jz)}(hjJ7h]h Description}(hjL7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH7ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6ubj9)}(hkWhether transhuge page-table entries are considered "special" following the definition in vm_normal_page().h]hoWhether transhuge page-table entries are considered “special” following the definition in vm_normal_page().}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6ubj9)}(h **Return**h]jz)}(hjq7h]hReturn}(hjs7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo7ubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6ubj9)}(hStrue if transhuge page-table entries should be considered special, false otherwise.h]hStrue if transhuge page-table entries should be considered special, false otherwise.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_ref_count (C function)c.folio_ref_counthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h/int folio_ref_count (const struct folio *folio)h]h)}(h.int folio_ref_count(const struct folio *folio)h](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKGubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hKGubh)}(hfolio_ref_counth]h)}(hfolio_ref_counth]hfolio_ref_count}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj7hKGubj)}(h(const struct folio *folio)h]j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hj7hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj!)}(hj$h]hstruct}(hj8hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(hfolioh]hfolio}(hj,8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)8ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj.8modnameN classnameNj\j_)}jb]je)}jXj7sbc.folio_ref_countasbuh1hhj7ubj)}(h h]h }(hjL8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2 )}(hj5 h]h*}(hjZ8hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7ubh)}(hfolioh]hfolio}(hjg8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj7ubah}(h]h ]h"]h$]h&]jj uh1jhj7hhhj7hKGubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hKGubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhj7hKGhj7hhubj )}(hhh]j9)}(h"The reference count on this folio.h]h"The reference count on this folio.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKGhj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hKGubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``const struct folio *folio`` The folio. **Description** 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 **Return** The number of references to this folio.h](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKKhj8ubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j?)}(hj8h]hconst struct folio *folio}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKHhj8ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hKHhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKHhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hj 9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 9ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKJhj8ubj9)}(hThe refcount is usually incremented by calls to folio_get() and decremented by calls to folio_put(). Some typical users of the folio refcount:h]hThe refcount is usually incremented by calls to folio_get() and decremented by calls to folio_put(). Some typical users of the folio refcount:}(hj#9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKJhj8ubj)}(hhh](j+)}(h Each reference from a page tableh]j9)}(hj79h]h Each reference from a page table}(hj99hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKNhj59ubah}(h]h ]h"]h$]h&]uh1j+hj29ubj+)}(hThe page cacheh]j9)}(hjO9h]hThe page cache}(hjQ9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKOhjM9ubah}(h]h ]h"]h$]h&]uh1j+hj29ubj+)}(hFilesystem private datah]j9)}(hjg9h]hFilesystem private data}(hji9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKPhje9ubah}(h]h ]h"]h$]h&]uh1j+hj29ubj+)}(h The LRU listh]j9)}(hj9h]h The LRU list}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKQhj}9ubah}(h]h ]h"]h$]h&]uh1j+hj29ubj+)}(hPipesh]j9)}(hj9h]hPipes}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKRhj9ubah}(h]h ]h"]h$]h&]uh1j+hj29ubj+)}(hBDirect IO which references this page in the process address space h]j9)}(hADirect IO which references this page in the process address spaceh]hADirect IO which references this page in the process address space}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKShj9ubah}(h]h ]h"]h$]h&]uh1j+hj29ubeh}(h]h ]h"]h$]h&]j%j&uh1jhjF9hKNhj8ubj9)}(h **Return**h]jz)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKUhj8ubj9)}(h'The number of references to this folio.h]h'The number of references to this folio.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKUhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_try_get (C function)c.folio_try_gethNtauh1hhj qhhhNhNubh)}(hhh](h)}(h(bool folio_try_get (struct folio *folio)h]h)}(h'bool folio_try_get(struct folio *folio)h](j)}(hj)h]hbool}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKubj)}(h h]h }(hj!:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj :hKubh)}(h folio_try_geth]h)}(h folio_try_geth]h folio_try_get}(hj3:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj :hKubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjO:hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjK:ubj)}(h h]h }(hj\:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK:ubh)}(hhh]h)}(hfolioh]hfolio}(hjm:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjo:modnameN classnameNj\j_)}jb]je)}jXj5:sbc.folio_try_getasbuh1hhjK:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK:ubj2 )}(hj5 h]h*}(hj:hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjK:ubh)}(hfolioh]hfolio}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK:ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjG:ubah}(h]h ]h"]h$]h&]jj uh1jhj:hhhj :hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj :hhhj :hKubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhj :hKhj:hhubj )}(hhh]j9)}(h,Attempt to increase the refcount on a folio.h]h,Attempt to increase the refcount on a folio.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKhj:hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj :hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhMhj:ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hj;h]hstruct folio *folio}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKhj ;ubj)}(hhh]j9)}(h The folio.h]h The folio.}(hj,;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(;hKhj);ubah}(h]h ]h"]h$]h&]uh1jhj ;ubeh}(h]h ]h"]h$]h&]uh1jhj(;hKhj ;ubah}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h**Description**h]jz)}(hjN;h]h Description}(hjP;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL;ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKhj:ubj9)}(hIf 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]hIf 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.}(hjd;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhKhj:ubj9)}(h **Return**h]jz)}(hju;h]hReturn}(hjw;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs;ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhMhj:ubj9)}(h9True if the reference count was successfully incremented.h]h9True if the reference count was successfully incremented.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./include/linux/page_ref.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_highmem (C function) c.is_highmemhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h"int is_highmem (struct zone *zone)h]h)}(h!int is_highmem(struct zone *zone)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMOubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj;hMOubh)}(h is_highmemh]h)}(h is_highmemh]h is_highmem}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhj;hMOubj)}(h(struct zone *zone)h]j)}(hstruct zone *zoneh](j!)}(hj$h]hstruct}(hj;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(hzoneh]hzone}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]je)}jXj;sb c.is_highmemasbuh1hhj;ubj)}(h h]h }(hj5<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hjC<hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hzoneh]hzone}(hjP<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj;ubah}(h]h ]h"]h$]h&]jj uh1jhj;hhhj;hMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;hhhj;hMOubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMOhj;hhubj )}(hhh]j9)}(hhelper 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]hhelper 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.}(hjz<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMOhjw<hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hMOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj qhNhNubjp)}(hv**Parameters** ``struct zone *zone`` pointer to struct zone variable **Return** 1 for a highmem zone, 0 otherwiseh](j9)}(h**Parameters**h]jz)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMShj<ubj)}(hhh]j)}(h6``struct zone *zone`` pointer to struct zone variable h](j)}(h``struct zone *zone``h]j?)}(hj<h]hstruct zone *zone}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMRhj<ubj)}(hhh]j9)}(hpointer to struct zone variableh]hpointer to struct zone variable}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMRhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMRhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMThj<ubj9)}(h!1 for a highmem zone, 0 otherwiseh]h!1 for a highmem zone, 0 otherwise}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMShj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfor_each_online_pgdat (C macro)c.for_each_online_pgdathNtauh1hhj qhhhNhNubh)}(hhh](h)}(hfor_each_online_pgdath]h)}(hfor_each_online_pgdath]h)}(hfor_each_online_pgdath]h)}(hj5=h]hfor_each_online_pgdat}(hj?=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7=hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMwubah}(h]h ]h"]h$]h&]jj juh1hjjhj3=hhhjR=hMwubah}(h]j.=ah ](jjeh"]h$]h&]jj)jhuh1hhjR=hMwhj0=hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0=hhhjR=hMwubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jk=j4jk=j5j6j7uh1hhhhj qhNhNubj9)}(h!``for_each_online_pgdat (pgdat)``h]j?)}(hjq=h]hfor_each_online_pgdat (pgdat)}(hjs=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo=ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMyhj qhhubjU)}(h.helper macro to iterate over all online nodes h]j9)}(h-helper macro to iterate over all online nodesh]h-helper macro to iterate over all online nodes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMwhj=ubah}(h]h ]h"]h$]h&]uh1jThj=hMwhj qhhubjp)}(h;**Parameters** ``pgdat`` pointer to a pg_data_t variableh](j9)}(h**Parameters**h]jz)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhM{hj=ubj)}(hhh]j)}(h)``pgdat`` pointer to a pg_data_t variableh](j)}(h ``pgdat``h]j?)}(hj=h]hpgdat}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhM}hj=ubj)}(hhh]j9)}(hpointer to a pg_data_t variableh]hpointer to a pg_data_t variable}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMxhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM}hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfor_each_zone (C macro)c.for_each_zonehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h for_each_zoneh]h)}(h for_each_zoneh]h)}(h for_each_zoneh]h)}(hj>h]h for_each_zone}(hj#>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj6>hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj6>hMhj>hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>hhhj6>hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jO>j4jO>j5j6j7uh1hhhhj qhNhNubj9)}(h``for_each_zone (zone)``h]j?)}(hjU>h]hfor_each_zone (zone)}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjS>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj qhhubjU)}(h.helper macro to iterate over all memory zones h]j9)}(h-helper macro to iterate over all memory zonesh]h-helper macro to iterate over all memory zones}(hjo>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjk>ubah}(h]h ]h"]h$]h&]uh1jThj}>hMhj qhhubjp)}(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](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj>ubj)}(hhh]j)}(h)``zone`` pointer to struct zone variable h](j)}(h``zone``h]j?)}(hj>h]hzone}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj>ubj)}(hhh]j9)}(hpointer to struct zone variableh]hpointer to struct zone variable}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj>ubj9)}(hLThe user only needs to declare the zone variable, for_each_zone fills it in.h]hLThe user only needs to declare the zone variable, for_each_zone fills it in.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ next_zones_zonelist (C function)c.next_zones_zonelisthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hkstruct zoneref * next_zones_zonelist (struct zoneref *z, enum zone_type highest_zoneidx, nodemask_t *nodes)h]h)}(histruct zoneref *next_zones_zonelist(struct zoneref *z, enum zone_type highest_zoneidx, nodemask_t *nodes)h](j!)}(hj$h]hstruct}(hj)?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj%?hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMubj)}(h h]h }(hj7?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%?hhhj6?hMubh)}(hhh]h)}(hzonerefh]hzoneref}(hjH?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE?ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjJ?modnameN classnameNj\j_)}jb]je)}jXnext_zones_zonelistsbc.next_zones_zonelistasbuh1hhj%?hhhj6?hMubj)}(h h]h }(hji?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%?hhhj6?hMubj2 )}(hj5 h]h*}(hjw?hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj%?hhhj6?hMubh)}(hnext_zones_zonelisth]h)}(hjf?h]hnext_zones_zonelist}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%?hhhj6?hMubj)}(hF(struct zoneref *z, enum zone_type highest_zoneidx, nodemask_t *nodes)h](j)}(hstruct zoneref *zh](j!)}(hj$h]hstruct}(hj?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]h)}(hzonerefh]hzoneref}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj?modnameN classnameNj\j_)}jb]jd?c.next_zones_zonelistasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj2 )}(hj5 h]h*}(hj?hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubh)}(hzh]hz}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj?ubj)}(henum zone_type highest_zoneidxh](j!)}(hjh]henum}(hj@hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@ubj)}(h h]h }(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]h)}(h zone_typeh]h zone_type}(hj1@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj3@modnameN classnameNj\j_)}jb]jd?c.next_zones_zonelistasbuh1hhj@ubj)}(h h]h }(hjO@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhighest_zoneidxh]hhighest_zoneidx}(hj]@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj?ubj)}(hnodemask_t *nodesh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hjy@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj{@modnameN classnameNj\j_)}jb]jd?c.next_zones_zonelistasbuh1hhjr@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr@ubj2 )}(hj5 h]h*}(hj@hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjr@ubh)}(hnodesh]hnodes}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj?ubeh}(h]h ]h"]h$]h&]jj uh1jhj%?hhhj6?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!?hhhj6?hMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1hhj6?hMhj?hhubj )}(hhh]j9)}(hReturns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting pointh]hReturns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj6?hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@j4j@j5j6j7uh1hhhhj qhNhNubjp)}(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 ``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 pointh](j9)}(h**Parameters**h]jz)}(hj@h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@ubj)}(hhh](j)}(hI``struct zoneref *z`` The cursor used as a starting point for the search h](j)}(h``struct zoneref *z``h]j?)}(hjAh]hstruct zoneref *z}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjAubj)}(hhh]j9)}(h2The cursor used as a starting point for the searchh]h2The cursor used as a starting point for the search}(hj6AhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2AhMhj3Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj2AhMhjAubj)}(hP``enum zone_type highest_zoneidx`` The zone index of the highest zone to return h](j)}(h"``enum zone_type highest_zoneidx``h]j?)}(hjVAh]henum zone_type highest_zoneidx}(hjXAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjPAubj)}(hhh]j9)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hjoAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkAhMhjlAubah}(h]h ]h"]h$]h&]uh1jhjPAubeh}(h]h ]h"]h$]h&]uh1jhjkAhMhjAubj)}(hG``nodemask_t *nodes`` An optional nodemask to filter the zonelist with h](j)}(h``nodemask_t *nodes``h]j?)}(hjAh]hnodemask_t *nodes}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjAubj)}(hhh]j9)}(h0An optional nodemask to filter the zonelist withh]h0An optional nodemask to filter the zonelist with}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj@ubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@ubj9)}(hX4This function returns the next zone at or below a given zone index that is within the allowed nodemask using a cursor as the starting point for the search. The zoneref returned is a cursor that represents the current zone being examined. It should be advanced by one before calling next_zones_zonelist again.h]hX4This function returns the next zone at or below a given zone index that is within the allowed nodemask using a cursor as the starting point for the search. The zoneref returned is a cursor that represents the current zone being examined. It should be advanced by one before calling next_zones_zonelist again.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@ubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@ubj9)}(hzthe next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting pointh]hzthe next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!first_zones_zonelist (C function)c.first_zones_zonelisthNtauh1hhj qhhhNhNubh)}(hhh](h)}(htstruct zoneref * first_zones_zonelist (struct zonelist *zonelist, enum zone_type highest_zoneidx, nodemask_t *nodes)h]h)}(hrstruct zoneref *first_zones_zonelist(struct zonelist *zonelist, enum zone_type highest_zoneidx, nodemask_t *nodes)h](j!)}(hj$h]hstruct}(hj6BhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj2BhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMubj)}(h h]h }(hjDBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2BhhhjCBhMubh)}(hhh]h)}(hzonerefh]hzoneref}(hjUBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjWBmodnameN classnameNj\j_)}jb]je)}jXfirst_zones_zonelistsbc.first_zones_zonelistasbuh1hhj2BhhhjCBhMubj)}(h h]h }(hjvBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2BhhhjCBhMubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj2BhhhjCBhMubh)}(hfirst_zones_zonelisth]h)}(hjsBh]hfirst_zones_zonelist}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2BhhhjCBhMubj)}(hN(struct zonelist *zonelist, enum zone_type highest_zoneidx, nodemask_t *nodes)h](j)}(hstruct zonelist *zonelisth](j!)}(hj$h]hstruct}(hjBhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]h)}(hzonelisth]hzonelist}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjBmodnameN classnameNj\j_)}jb]jqBc.first_zones_zonelistasbuh1hhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj2 )}(hj5 h]h*}(hjBhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjBubh)}(hzonelisth]hzonelist}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubj)}(henum zone_type highest_zoneidxh](j!)}(hjh]henum}(hj ChhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjCubj)}(h h]h }(hj-ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]h)}(h zone_typeh]h zone_type}(hj>ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;Cubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj@CmodnameN classnameNj\j_)}jb]jqBc.first_zones_zonelistasbuh1hhjCubj)}(h h]h }(hj\ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhighest_zoneidxh]hhighest_zoneidx}(hjjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubj)}(hnodemask_t *nodesh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjCmodnameN classnameNj\j_)}jb]jqBc.first_zones_zonelistasbuh1hhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj2 )}(hj5 h]h*}(hjChhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjCubh)}(hnodesh]hnodes}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjBubeh}(h]h ]h"]h$]h&]jj uh1jhj2BhhhjCBhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.BhhhjCBhMubah}(h]j)Bah ](jjeh"]h$]h&]jj)jhuh1hhjCBhMhj+Bhhubj )}(hhh]j9)}(h\Returns the first zone at or below highest_zoneidx within the allowed nodemask in a zonelisth]h\Returns the first zone at or below highest_zoneidx within the allowed nodemask in a zonelist}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjChhubah}(h]h ]h"]h$]h&]uh1jhj+BhhhjCBhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhj qhNhNubjp)}(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 ``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 foundh](j9)}(h**Parameters**h]jz)}(hj Dh]h Parameters}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Dubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj)}(hhh](j)}(hI``struct zonelist *zonelist`` The zonelist to search for a suitable zone h](j)}(h``struct zonelist *zonelist``h]j?)}(hj*Dh]hstruct zonelist *zonelist}(hj,DhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(Dubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj$Dubj)}(hhh]j9)}(h*The zonelist to search for a suitable zoneh]h*The zonelist to search for a suitable zone}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?DhMhj@Dubah}(h]h ]h"]h$]h&]uh1jhj$Dubeh}(h]h ]h"]h$]h&]uh1jhj?DhMhj!Dubj)}(hP``enum zone_type highest_zoneidx`` The zone index of the highest zone to return h](j)}(h"``enum zone_type highest_zoneidx``h]j?)}(hjcDh]henum zone_type highest_zoneidx}(hjeDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj]Dubj)}(hhh]j9)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxDhMhjyDubah}(h]h ]h"]h$]h&]uh1jhj]Dubeh}(h]h ]h"]h$]h&]uh1jhjxDhMhj!Dubj)}(hG``nodemask_t *nodes`` An optional nodemask to filter the zonelist with h](j)}(h``nodemask_t *nodes``h]j?)}(hjDh]hnodemask_t *nodes}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj)}(hhh]j9)}(h0An optional nodemask to filter the zonelist withh]h0An optional nodemask to filter the zonelist with}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj!Dubeh}(h]h ]h"]h$]h&]uh1jhjDubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj9)}(hThis 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]hThis 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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj9)}(hWhen 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]hWhen 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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj9)}(h **Return**h]jz)}(hj Eh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Eubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubj9)}(h1Zoneref pointer for the first suitable zone foundh]h1Zoneref pointer for the first suitable zone found}(hj#EhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)for_each_zone_zonelist_nodemask (C macro)!c.for_each_zone_zonelist_nodemaskhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hjLEh]hfor_each_zone_zonelist_nodemask}(hjVEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjREubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNEhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjJEhhhjiEhMubah}(h]jEEah ](jjeh"]h$]h&]jj)jhuh1hhjiEhMhjGEhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjGEhhhjiEhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj qhNhNubj9)}(hG``for_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)``h]j?)}(hjEh]hCfor_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj qhhubjU)}(hlhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask h]j9)}(hkhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemaskh]hkhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjEubah}(h]h ]h"]h$]h&]uh1jThjEhMhj qhhubjp)}(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 nodemaskh](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjEubj)}(hhh](j)}(h*``zone`` The current zone in the iterator h](j)}(h``zone``h]j?)}(hjEh]hzone}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjEubj)}(hhh]j9)}(h The current zone in the iteratorh]h The current zone in the iterator}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(hD``z`` The current pointer within zonelist->_zonerefs being iterated h](j)}(h``z``h]j?)}(hjFh]hz}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjFubj)}(hhh]j9)}(h=The current pointer within zonelist->_zonerefs being iteratedh]h=The current pointer within zonelist->_zonerefs being iterated}(hj.FhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*FhMhj+Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj*FhMhjEubj)}(h&``zlist`` The zonelist being iterated h](j)}(h ``zlist``h]j?)}(hjNFh]hzlist}(hjPFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjHFubj)}(hhh]j9)}(hThe zonelist being iteratedh]hThe zonelist being iterated}(hjgFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjcFhMhjdFubah}(h]h ]h"]h$]h&]uh1jhjHFubeh}(h]h ]h"]h$]h&]uh1jhjcFhMhjEubj)}(h9``highidx`` The zone index of the highest zone to return h](j)}(h ``highidx``h]j?)}(hjFh]hhighidx}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjFubj)}(hhh]j9)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(h/``nodemask`` Nodemask allowed by the allocator h](j)}(h ``nodemask``h]j?)}(hjFh]hnodemask}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjFubj)}(hhh]j9)}(h!Nodemask allowed by the allocatorh]h!Nodemask allowed by the allocator}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjEubj9)}(hbThis iterator iterates though all zones at or below a given zone index and within a given nodemaskh]hbThis iterator iterates though all zones at or below a given zone index and within a given nodemask}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ for_each_zone_zonelist (C macro)c.for_each_zone_zonelisthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hfor_each_zone_zonelisth]h)}(hfor_each_zone_zonelisth]h)}(hfor_each_zone_zonelisth]h)}(hj:Gh]hfor_each_zone_zonelist}(hjDGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Gubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhjtGubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj qhhubjU)}(hVhelper macro to iterate over valid zones in a zonelist at or below a given zone index h]j9)}(hUhelper macro to iterate over valid zones in a zonelist at or below a given zone indexh]hUhelper macro to iterate over valid zones in a zonelist at or below a given zone index}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubah}(h]h ]h"]h$]h&]uh1jThjGhMhj qhhubjp)}(hX=**Parameters** ``zone`` The current zone in the iterator ``z`` The current pointer within zonelist->zones being iterated ``zlist`` The zonelist being iterated ``highidx`` The zone index of the highest zone to return **Description** This iterator iterates though all zones at or below a given zone index.h](j9)}(h**Parameters**h]jz)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubj)}(hhh](j)}(h*``zone`` The current zone in the iterator h](j)}(h``zone``h]j?)}(hjGh]hzone}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubj)}(hhh]j9)}(h The current zone in the iteratorh]h The current zone in the iterator}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjGubj)}(h@``z`` The current pointer within zonelist->zones being iterated h](j)}(h``z``h]j?)}(hjHh]hz}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubj)}(hhh]j9)}(h9The current pointer within zonelist->zones being iteratedh]h9The current pointer within zonelist->zones being iterated}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubj)}(h&``zlist`` The zonelist being iterated h](j)}(h ``zlist``h]j?)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:Hubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj6Hubj)}(hhh]j9)}(hThe zonelist being iteratedh]hThe zonelist being iterated}(hjUHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQHhMhjRHubah}(h]h ]h"]h$]h&]uh1jhj6Hubeh}(h]h ]h"]h$]h&]uh1jhjQHhMhjGubj)}(h9``highidx`` The zone index of the highest zone to return h](j)}(h ``highidx``h]j?)}(hjuHh]hhighidx}(hjwHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjoHubj)}(hhh]j9)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjoHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubeh}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubj9)}(hGThis iterator iterates though all zones at or below a given zone index.h]hGThis iterator iterates though all zones at or below a given zone index.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpfn_valid (C function) c.pfn_validhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h!int pfn_valid (unsigned long pfn)h]h)}(h int pfn_valid(unsigned long pfn)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMSubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjIhMSubh)}(h pfn_validh]h)}(h pfn_validh]h pfn_valid}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjIhMSubj)}(h(unsigned long pfn)h]j)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hj2IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Iubj)}(h h]h }(hj@IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Iubj)}(hlongh]hlong}(hjNIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Iubj)}(h h]h }(hj\IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Iubh)}(hpfnh]hpfn}(hjjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.Iubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj*Iubah}(h]h ]h"]h$]h&]jj uh1jhjHhhhjIhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjIhMSubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjIhMShjHhhubj )}(hhh]j9)}(h4check if there is a valid memory map entry for a PFNh]h4check if there is a valid memory map entry for a PFN}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMShjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjIhMSubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj qhNhNubjp)}(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 otherwiseh](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMWhjIubj)}(hhh]j)}(h5``unsigned long pfn`` the page frame number to check h](j)}(h``unsigned long pfn``h]j?)}(hjIh]hunsigned long pfn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMThjIubj)}(hhh]j9)}(hthe page frame number to checkh]hthe page frame number to check}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMThjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMThjIubah}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMVhjIubj9)}(hCheck 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](hCCheck if there is a valid memory map entry aka struct page for the }(hj&JhhhNhNubjz)}(h**pfn**h]hpfn}(hj.JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Jubhl. Note, that availability of the memory map entry does not imply that there is actual usable memory at that }(hj&JhhhNhNubjz)}(h**pfn**h]hpfn}(hj@JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&JubhA. The struct page may represent a hole or an unusable page frame.}(hj&JhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMVhjIubj9)}(h **Return**h]jz)}(hj[Jh]hReturn}(hj]JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYJubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhM[hjIubj9)}(h71 for PFNs that have memory map entries and 0 otherwiseh]h71 for PFNs that have memory map entries and 0 otherwise}(hjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhM[hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapping (C function)c.folio_mappinghNtauh1hhj qhhhNhNubh)}(hhh](h)}(h:struct address_space * folio_mapping (struct folio *folio)h]h)}(h8struct address_space *folio_mapping(struct folio *folio)h](j!)}(hj$h]hstruct}(hjJhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjJhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjJhMubh)}(hhh]h)}(h address_spaceh]h address_space}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjJmodnameN classnameNj\j_)}jb]je)}jX folio_mappingsbc.folio_mappingasbuh1hhjJhhhjJhMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjJhMubj2 )}(hj5 h]h*}(hjJhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJhhhjJhMubh)}(h folio_mappingh]h)}(hjJh]h folio_mapping}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjJhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjKhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjKubj)}(h h]h }(hj'KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]h)}(hfolioh]hfolio}(hj8KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Kubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:KmodnameN classnameNj\j_)}jb]jJc.folio_mappingasbuh1hhjKubj)}(h h]h }(hjVKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj2 )}(hj5 h]h*}(hjdKhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjKubh)}(hfolioh]hfolio}(hjqKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjKubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjJhMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhjJhhubj )}(hhh]j9)}(h,Find the mapping where this folio is stored.h]h,Find the mapping where this folio is stored.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct folio *folio`` The folio. **Description** For folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored). You can call this for folios which aren't in the swap cache or page cache and it will return NULL.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjKubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j?)}(hjKh]hstruct folio *folio}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjKubj)}(hhh]j9)}(h The folio.h]h The folio.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjKubj9)}(hFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored).h]hFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored).}(hj-LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjKubj9)}(hbYou can call this for folios which aren't in the swap cache or page cache and it will return NULL.h]hdYou can call this for folios which aren’t in the swap cache or page cache and it will return NULL.}(hj ah"]h$]h&]uh1j1 hjLubh)}(hvmah]hvma}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubah}(h]h ]h"]h$]h&]jj uh1jhjgLhhhjyLhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjcLhhhjyLhKubah}(h]j^Lah ](jjeh"]h$]h&]jj)jhuh1hhjyLhKhj`Lhhubj )}(hhh]j9)}(h%attach an anon_vma to a memory regionh]h%attach an anon_vma to a memory region}(hj+MhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj(Mhhubah}(h]h ]h"]h$]h&]uh1jhj`LhhhjyLhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCMj4jCMj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjMMh]h Parameters}(hjOMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKMubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubj)}(hhh]j)}(h=``struct vm_area_struct *vma`` the memory region in question h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjlMh]hstruct vm_area_struct *vma}(hjnMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjfMubj)}(hhh]j9)}(hthe memory region in questionh]hthe memory region in question}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhKhjMubah}(h]h ]h"]h$]h&]uh1jhjfMubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjcMubah}(h]h ]h"]h$]h&]uh1jhjGMubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubj9)}(hThis 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]hThis 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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubj9)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubj9)}(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).}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubj9)}(hAs 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]hAs 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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhjGMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ page_address_in_vma (C function)c.page_address_in_vmahNtauh1hhj qhhhNhNubh)}(hhh](h)}(hxunsigned long page_address_in_vma (const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)h]h)}(hwunsigned long page_address_in_vma(const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)h](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hj(NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj'NhMubj)}(hlongh]hlong}(hj6NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj'NhMubj)}(h h]h }(hjDNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj'NhMubh)}(hpage_address_in_vmah]h)}(hpage_address_in_vmah]hpage_address_in_vma}(hjVNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj'NhMubj)}(hV(const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)h](j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjrNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjnNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnNubj!)}(hj$h]hstruct}(hjNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjnNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnNubh)}(hhh]h)}(hfolioh]hfolio}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjNmodnameN classnameNj\j_)}jb]je)}jXjXNsbc.page_address_in_vmaasbuh1hhjnNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnNubj2 )}(hj5 h]h*}(hjNhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjnNubh)}(hfolioh]hfolio}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjNubj)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hjNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjNubj)}(h h]h }(hj OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj!)}(hj$h]hstruct}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjNubj)}(h h]h }(hj'OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]h)}(hpageh]hpage}(hj8OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Oubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:OmodnameN classnameNj\j_)}jb]jNc.page_address_in_vmaasbuh1hhjNubj)}(h h]h }(hjVOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj2 )}(hj5 h]h*}(hjdOhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjNubh)}(hpageh]hpage}(hjqOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjNubj)}(h const struct vm_area_struct *vmah](j!)}(hjeh]hconst}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj!)}(hj$h]hstruct}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjOmodnameN classnameNj\j_)}jb]jNc.page_address_in_vmaasbuh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj2 )}(hj5 h]h*}(hjOhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjOubh)}(hvmah]hvma}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjNubeh}(h]h ]h"]h$]h&]jj uh1jhjNhhhj'NhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhj'NhMubah}(h]j Nah ](jjeh"]h$]h&]jj)jhuh1hhj'NhMhjNhhubj )}(hhh]j9)}(h*The virtual address of a page in this VMA.h]h*The virtual address of a page in this VMA.}(hj&PhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj#Phhubah}(h]h ]h"]h$]h&]uh1jhjNhhhj'NhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>Pj4j>Pj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjHPh]h Parameters}(hjJPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFPubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj)}(hhh](j)}(h=``const struct folio *folio`` The folio containing the page. h](j)}(h``const struct folio *folio``h]j?)}(hjgPh]hconst struct folio *folio}(hjiPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjePubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjaPubj)}(hhh]j9)}(hThe folio containing the page.h]hThe folio containing the page.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|PhMhj}Pubah}(h]h ]h"]h$]h&]uh1jhjaPubeh}(h]h ]h"]h$]h&]uh1jhj|PhMhj^Pubj)}(h7``const struct page *page`` The page within the folio. h](j)}(h``const struct page *page``h]j?)}(hjPh]hconst struct page *page}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPubj)}(hhh]j9)}(hThe page within the folio.h]hThe page within the folio.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj^Pubj)}(hM``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]j?)}(hjPh]h const struct vm_area_struct *vma}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPubj)}(hhh]j9)}(h'The VMA we need to know the address in.h]h'The VMA we need to know the address in.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj^Pubeh}(h]h ]h"]h$]h&]uh1jhjBPubj9)}(h**Description**h]jz)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj9)}(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*QhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj9)}(h **Context**h]jz)}(hj;Qh]hContext}(hj=QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9Qubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj9)}(hCaller 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]hCaller 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.}(hjQQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj9)}(h **Return**h]jz)}(hjbQh]hReturn}(hjdQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`Qubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubj9)}(h:The virtual address corresponding to this page in the VMA.h]h:The virtual address corresponding to this page in the VMA.}(hjxQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_referenced (C function)c.folio_referencedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hlint folio_referenced (struct folio *folio, int is_locked, struct mem_cgroup *memcg, unsigned long *vm_flags)h]h)}(hkint folio_referenced(struct folio *folio, int is_locked, struct mem_cgroup *memcg, unsigned long *vm_flags)h](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjQhMubh)}(hfolio_referencedh]h)}(hfolio_referencedh]hfolio_referenced}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjQhMubj)}(hW(struct folio *folio, int is_locked, struct mem_cgroup *memcg, unsigned long *vm_flags)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hfolioh]hfolio}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRmodnameN classnameNj\j_)}jb]je)}jXjQsbc.folio_referencedasbuh1hhjQubj)}(h h]h }(hj"RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj2 )}(hj5 h]h*}(hj0RhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQubh)}(hfolioh]hfolio}(hj=RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubj)}(h int is_lockedh](j)}(hinth]hint}(hjVRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRRubj)}(h h]h }(hjdRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRRubh)}(h is_lockedh]h is_locked}(hjrRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubj)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjRhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRmodnameN classnameNj\j_)}jb]jRc.folio_referencedasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj2 )}(hj5 h]h*}(hjRhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRubh)}(hmemcgh]hmemcg}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubj)}(hunsigned long *vm_flagsh](j)}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hlongh]hlong}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hj%ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj2 )}(hj5 h]h*}(hj3ShhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRubh)}(hvm_flagsh]hvm_flags}(hj@ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhjQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjQhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjQhMhjQhhubj )}(hhh]j9)}(h!Test if the folio was referenced.h]h!Test if the folio was referenced.}(hjjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgShhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj qhNhNubjp)}(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 ``unsigned long *vm_flags`` A combination of all the vma->vm_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](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjSubj)}(hhh](j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j?)}(hjSh]hstruct folio *folio}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjSubj)}(hhh]j9)}(hThe folio to test.h]hThe folio to test.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h2``int is_locked`` Caller holds lock on the folio. h](j)}(h``int is_locked``h]j?)}(hjSh]h int is_locked}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjSubj)}(hhh]j9)}(hCaller holds lock on the folio.h]hCaller holds lock on the folio.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h2``struct mem_cgroup *memcg`` target memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjTh]hstruct mem_cgroup *memcg}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjTubj)}(hhh]j9)}(htarget memory cgrouph]htarget memory cgroup}(hj6ThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2ThMhj3Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj2ThMhjSubj)}(h_``unsigned long *vm_flags`` A combination of all the vma->vm_flags which referenced the folio. h](j)}(h``unsigned long *vm_flags``h]j?)}(hjVTh]hunsigned long *vm_flags}(hjXThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTTubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPTubj)}(hhh]j9)}(hBA combination of all the vma->vm_flags which referenced the folio.h]hBA combination of all the vma->vm_flags which referenced the folio.}(hjoThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkThMhjlTubah}(h]h ]h"]h$]h&]uh1jhjPTubeh}(h]h ]h"]h$]h&]uh1jhjkThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjSubj9)}(h ah"]h$]h&]uh1j1 hj6Uubh)}(hmappingh]hmapping}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Uubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj2Uubj)}(h pgoff_t pgoffh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUmodnameN classnameNj\j_)}jb]jtUc.mapping_wrprotect_rangeasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hpgoffh]hpgoff}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj2Uubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hlongh]hlong}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hpfnh]hpfn}(hj,VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj2Uubj)}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hjEVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAVubj)}(h h]h }(hjSVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAVubj)}(hlongh]hlong}(hjaVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAVubj)}(h h]h }(hjoVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAVubh)}(hnr_pagesh]hnr_pages}(hj}VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAVubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj2Uubeh}(h]h ]h"]h$]h&]jj uh1jhjThhhj UhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhj UhMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1hhj UhMhjThhubj )}(hhh]j9)}(h0Write-protect all mappings in a specified range.h]h0Write-protect all mappings in a specified range.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjThhhj UhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj)}(hhh](j)}(hY``struct address_space *mapping`` The mapping whose reverse mapping should be traversed. h](j)}(h!``struct address_space *mapping``h]j?)}(hjVh]hstruct address_space *mapping}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj)}(hhh]j9)}(h6The mapping whose reverse mapping should be traversed.h]h6The mapping whose reverse mapping should be traversed.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubj)}(hQ``pgoff_t pgoff`` The page offset at which **pfn** is mapped within **mapping**. h](j)}(h``pgoff_t pgoff``h]j?)}(hj!Wh]h pgoff_t pgoff}(hj#WhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjWubj)}(hhh]j9)}(h>The page offset at which **pfn** is mapped within **mapping**.h](hThe page offset at which }(hj:WhhhNhNubjz)}(h**pfn**h]hpfn}(hjBWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Wubh is mapped within }(hj:WhhhNhNubjz)}(h **mapping**h]hmapping}(hjTWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Wubh.}(hj:WhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj6WhMhj7Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhj6WhMhjVubj)}(hN``unsigned long pfn`` The PFN of the page mapped in **mapping** at **pgoff**. h](j)}(h``unsigned long pfn``h]j?)}(hj~Wh]hunsigned long pfn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|Wubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxWubj)}(hhh]j9)}(h7The PFN of the page mapped in **mapping** at **pgoff**.h](hThe PFN of the page mapped in }(hjWhhhNhNubjz)}(h **mapping**h]hmapping}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh at }(hjWhhhNhNubjz)}(h **pgoff**h]hpgoff}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjxWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjVubj)}(hS``unsigned long nr_pages`` The number of physically contiguous base pages spanned. h](j)}(h``unsigned long nr_pages``h]j?)}(hjWh]hunsigned long nr_pages}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjWubj)}(hhh]j9)}(h7The number of physically contiguous base pages spanned.h]h7The number of physically contiguous base pages spanned.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjVubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj9)}(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](hvTraverses the reverse mapping, finding all VMAs which contain a shared mapping of the pages in the specified range in }(hj,XhhhNhNubjz)}(h **mapping**h]hmapping}(hj4XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Xubh, 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,XhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj9)}(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](hThe }(hjMXhhhNhNubjz)}(h**pfn**h]hpfn}(hjUXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMXubh 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 }(hjMXhhhNhNubjz)}(h **mapping**h]hmapping}(hjgXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMXubh and }(hjMXhhhNhNubjz)}(h **pgoff**h]hpgoff}(hjyXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMXubh.}(hjMXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj9)}(h **Return**h]jz)}(hjXh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubj9)}(h0the number of write-protected PTEs, or an error.h]h0the number of write-protected PTEs, or an error.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpfn_mkclean_range (C function)c.pfn_mkclean_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hlint pfn_mkclean_range (unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)h]h)}(hkint pfn_mkclean_range(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhMubh)}(hpfn_mkclean_rangeh]h)}(hpfn_mkclean_rangeh]hpfn_mkclean_range}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjXhMubj)}(hV(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)h](j)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hj$YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hlongh]hlong}(hj2YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hj@YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hpfnh]hpfn}(hjNYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hjgYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcYubj)}(h h]h }(hjuYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcYubj)}(hlongh]hlong}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcYubh)}(hnr_pagesh]hnr_pages}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(h pgoff_t pgoffh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjYmodnameN classnameNj\j_)}jb]je)}jXjXsbc.pfn_mkclean_rangeasbuh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hpgoffh]hpgoff}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjZhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjYubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj"ZmodnameN classnameNj\j_)}jb]jYc.pfn_mkclean_rangeasbuh1hhjYubj)}(h h]h }(hj>ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjLZhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(hvmah]hvma}(hjYZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubeh}(h]h ]h"]h$]h&]jj uh1jhjXhhhjXhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjXhMubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjXhMhjXhhubj )}(hhh]j9)}(hCleans 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](h7Cleans the PTEs (including PMDs) mapped with range of [}(hjZhhhNhNubjz)}(h**pfn**h]hpfn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh, }(hjZhhhNhNubjz)}(h**pfn**h]hpfn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh + }(hjZhhhNhNubjz)}(h **nr_pages**h]hnr_pages}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh) at the specific offset (}(hjZhhhNhNubjz)}(h **pgoff**h]hpgoff}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh ) within the }(hjZhhhNhNubjz)}(h**vma**h]hvma}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh[ of shared mappings. And since clean PTEs should also be readonly, write protects them too.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjXhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjZubj)}(hhh](j)}(h!``unsigned long pfn`` start pfn. h](j)}(h``unsigned long pfn``h]j?)}(hj[h]hunsigned long pfn}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj[ubj)}(hhh]j9)}(h start pfn.h]h start pfn.}(hj7[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3[hMhj4[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj3[hMhj[ubj)}(hX``unsigned long nr_pages`` number of physically contiguous pages srarting with **pfn**. h](j)}(h``unsigned long nr_pages``h]j?)}(hjW[h]hunsigned long nr_pages}(hjY[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjU[ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjQ[ubj)}(hhh]j9)}(hhj[ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj[ubj)}(hhh]j9)}(h)page offset that the **pfn** mapped with.h](hpage offset that the }(hj[hhhNhNubjz)}(h**pfn**h]hpfn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh mapped with.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj[ubj)}(h?``struct vm_area_struct *vma`` vma that **pfn** mapped within. h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj[h]hstruct vm_area_struct *vma}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj[ubj)}(hhh]j9)}(hvma that **pfn** mapped within.h](h vma that }(hj\hhhNhNubjz)}(h**pfn**h]hpfn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh mapped within.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hj:\h]h Description}(hj<\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8\ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjZubj9)}(h4Returns the number of cleaned PTEs (including PMDs).h]h4Returns the number of cleaned PTEs (including PMDs).}(hjP\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_move_anon_rmap (C function)c.folio_move_anon_rmaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hKvoid folio_move_anon_rmap (struct folio *folio, struct vm_area_struct *vma)h]h)}(hJvoid folio_move_anon_rmap(struct folio *folio, struct vm_area_struct *vma)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{\hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM*ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{\hhhj\hM*ubh)}(hfolio_move_anon_rmaph]h)}(hfolio_move_anon_rmaph]hfolio_move_anon_rmap}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{\hhhj\hM*ubj)}(h1(struct folio *folio, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj\hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hfolioh]hfolio}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj\modnameN classnameNj\j_)}jb]je)}jXj\sbc.folio_move_anon_rmapasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj2 )}(hj5 h]h*}(hj]hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\ubh)}(hfolioh]hfolio}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj.]hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj*]ubj)}(h h]h }(hj;]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*]ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjL]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI]ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjN]modnameN classnameNj\j_)}jb]j\c.folio_move_anon_rmapasbuh1hhj*]ubj)}(h h]h }(hjj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*]ubj2 )}(hj5 h]h*}(hjx]hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj*]ubh)}(hvmah]hvma}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubeh}(h]h ]h"]h$]h&]jj uh1jhj{\hhhj\hM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjw\hhhj\hM*ubah}(h]jr\ah ](jjeh"]h$]h&]jj)jhuh1hhj\hM*hjt\hhubj )}(hhh]j9)}(hmove a folio to our anon_vmah]hmove a folio to our anon_vma}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM*hj]hhubah}(h]h ]h"]h$]h&]uh1jhjt\hhhj\hM*ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM.hj]ubj)}(hhh](j)}(h:``struct folio *folio`` The folio to move to our anon_vma h](j)}(h``struct folio *folio``h]j?)}(hj]h]hstruct folio *folio}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM+hj]ubj)}(hhh]j9)}(h!The folio to move to our anon_vmah]h!The folio to move to our anon_vma}(hj ^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hM+hj^ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj^hM+hj]ubj)}(h<``struct vm_area_struct *vma`` The vma the folio belongs to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj)^h]hstruct vm_area_struct *vma}(hj+^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'^ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM,hj#^ubj)}(hhh]j9)}(hThe vma the folio belongs toh]hThe vma the folio belongs to}(hjB^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>^hM,hj?^ubah}(h]h ]h"]h$]h&]uh1jhj#^ubeh}(h]h ]h"]h$]h&]uh1jhj>^hM,hj]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hjd^h]h Description}(hjf^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb^ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM.hj]ubj9)}(hWhen 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]hWhen 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.}(hjz^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM.hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__folio_set_anon (C function)c.__folio_set_anonhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hnvoid __folio_set_anon (struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)h]h)}(hmvoid __folio_set_anon(struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMCubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMCubh)}(h__folio_set_anonh]h)}(h__folio_set_anonh]h__folio_set_anon}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj^hMCubj)}(hX(struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj^hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]h)}(hfolioh]hfolio}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj_modnameN classnameNj\j_)}jb]je)}jXj^sbc.__folio_set_anonasbuh1hhj^ubj)}(h h]h }(hj$_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj2 )}(hj5 h]h*}(hj2_hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^ubh)}(hfolioh]hfolio}(hj?_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjX_hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjT_ubj)}(h h]h }(hje_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT_ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjv_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs_ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjx_modnameN classnameNj\j_)}jb]j _c.__folio_set_anonasbuh1hhjT_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT_ubj2 )}(hj5 h]h*}(hj_hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjT_ubh)}(hvmah]hvma}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hlongh]hlong}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(haddressh]haddress}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubj)}(hbool exclusiveh](j)}(hj)h]hbool}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj&`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(h exclusiveh]h exclusive}(hj4`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhj^hMCubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj^hMCubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhj^hMChj^hhubj )}(hhh]j9)}(h'set up a new anonymous rmap for a folioh]h'set up a new anonymous rmap for a folio}(hj^`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMChj[`hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMCubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jv`j4jv`j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~`ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMGhjz`ubj)}(hhh](j)}(hH``struct folio *folio`` The folio to set up the new anonymous rmap for. h](j)}(h``struct folio *folio``h]j?)}(hj`h]hstruct folio *folio}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMDhj`ubj)}(hhh]j9)}(h/The folio to set up the new anonymous rmap for.h]h/The folio to set up the new anonymous rmap for.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMDhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMDhj`ubj)}(h<``struct vm_area_struct *vma`` VM area to add the folio to. h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj`h]hstruct vm_area_struct *vma}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMEhj`ubj)}(hhh]j9)}(hVM area to add the folio to.h]hVM area to add the folio to.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMEhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMEhj`ubj)}(h>``unsigned long address`` User virtual address of the mapping h](j)}(h``unsigned long address``h]j?)}(hjah]hunsigned long address}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMFhj aubj)}(hhh]j9)}(h#User virtual address of the mappingh]h#User virtual address of the mapping}(hj*ahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&ahMFhj'aubah}(h]h ]h"]h$]h&]uh1jhj aubeh}(h]h ]h"]h$]h&]uh1jhj&ahMFhj`ubj)}(hA``bool exclusive`` Whether the folio is exclusive to the process.h](j)}(h``bool exclusive``h]j?)}(hjJah]hbool exclusive}(hjLahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHaubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMHhjDaubj)}(hhh]j9)}(h.Whether the folio is exclusive to the process.h]h.Whether the folio is exclusive to the process.}(hjcahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMGhj`aubah}(h]h ]h"]h$]h&]uh1jhjDaubeh}(h]h ]h"]h$]h&]uh1jhj_ahMHhj`ubeh}(h]h ]h"]h$]h&]uh1jhjz`ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#__page_check_anon_rmap (C function)c.__page_check_anon_rmaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid __page_check_anon_rmap (const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)h]h)}(hvoid __page_check_anon_rmap(const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMcubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahMcubh)}(h__page_check_anon_rmaph]h)}(h__page_check_anon_rmaph]h__page_check_anon_rmap}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjahMcubj)}(hg(const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)h](j)}(hconst struct folio *folioh](j!)}(hjeh]hconst}(hjahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj!)}(hj$h]hstruct}(hjahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjaubj)}(h h]h }(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]h)}(hfolioh]hfolio}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]je)}jXjasbc.__page_check_anon_rmapasbuh1hhjaubj)}(h h]h }(hj:bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj2 )}(hj5 h]h*}(hjHbhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjaubh)}(hfolioh]hfolio}(hjUbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubj)}(hconst struct page *pageh](j!)}(hjeh]hconst}(hjnbhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjbubj)}(h h]h }(hj{bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjbubj!)}(hj$h]hstruct}(hjbhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjbubh)}(hhh]h)}(hpageh]hpage}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbmodnameN classnameNj\j_)}jb]j6bc.__page_check_anon_rmapasbuh1hhjjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjbubj2 )}(hj5 h]h*}(hjbhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjjbubh)}(hpageh]hpage}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjbubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjbhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjbubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjcmodnameN classnameNj\j_)}jb]j6bc.__page_check_anon_rmapasbuh1hhjbubj)}(h h]h }(hj5chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj2 )}(hj5 h]h*}(hjCchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjbubh)}(hvmah]hvma}(hjPchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hjichhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjecubj)}(h h]h }(hjwchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjecubj)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjecubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjecubh)}(haddressh]haddress}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjecubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjahMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjahMcubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhjahMchjahhubj )}(hhh]j9)}(h$sanity check anonymous rmap additionh]h$sanity check anonymous rmap addition}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMchjchhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahMcubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jcj4jcj5j6j7uh1hhhhj qhNhNubjp)}(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 mappedh](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMghjcubj)}(hhh](j)}(h=``const struct folio *folio`` The folio containing **page**. h](j)}(h``const struct folio *folio``h]j?)}(hj dh]hconst struct folio *folio}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj dubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMdhjdubj)}(hhh]j9)}(hThe folio containing **page**.h](hThe folio containing }(hj%dhhhNhNubjz)}(h**page**h]hpage}(hj-dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%dubh.}(hj%dhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj!dhMdhj"dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj!dhMdhjdubj)}(h=``const struct page *page`` the page to check the mapping of h](j)}(h``const struct page *page``h]j?)}(hjWdh]hconst struct page *page}(hjYdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUdubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMehjQdubj)}(hhh]j9)}(h the page to check the mapping ofh]h the page to check the mapping of}(hjpdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjldhMehjmdubah}(h]h ]h"]h$]h&]uh1jhjQdubeh}(h]h ]h"]h$]h&]uh1jhjldhMehjdubj)}(hI``struct vm_area_struct *vma`` the vm area in which the mapping is added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjdh]hstruct vm_area_struct *vma}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMfhjdubj)}(hhh]j9)}(h)the vm area in which the mapping is addedh]h)the vm area in which the mapping is added}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMfhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMfhjdubj)}(h9``unsigned long address`` the user virtual address mappedh](j)}(h``unsigned long address``h]j?)}(hjdh]hunsigned long address}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhhjdubj)}(hhh]j9)}(hthe user virtual address mappedh]hthe user virtual address mapped}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMghjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhhjdubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%folio_add_anon_rmap_ptes (C function)c.folio_add_anon_rmap_pteshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid 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)}(hvoid 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)}(hvoidh]hvoid}(hj#ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hj2ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhj1ehMubh)}(hfolio_add_anon_rmap_ptesh]h)}(hfolio_add_anon_rmap_ptesh]hfolio_add_anon_rmap_ptes}(hjDehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@eubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhj1ehMubj)}(hw(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma, unsigned long address, rmap_t flags)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj`ehhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj\eubj)}(h h]h }(hjmehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\eubh)}(hhh]h)}(hfolioh]hfolio}(hj~ehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{eubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXjFesbc.folio_add_anon_rmap_ptesasbuh1hhj\eubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\eubj2 )}(hj5 h]h*}(hjehhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj\eubh)}(hfolioh]hfolio}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\eubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjehhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]h)}(hpageh]hpage}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjemodnameN classnameNj\j_)}jb]jec.folio_add_anon_rmap_ptesasbuh1hhjeubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjeubh)}(hpageh]hpage}(hj)fhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubj)}(h int nr_pagesh](j)}(hinth]hint}(hjBfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>fubj)}(h h]h }(hjPfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>fubh)}(hnr_pagesh]hnr_pages}(hj^fhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>fubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjwfhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjsfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsfubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjfmodnameN classnameNj\j_)}jb]jec.folio_add_anon_rmap_ptesasbuh1hhjsfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsfubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjsfubh)}(hvmah]hvma}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(haddressh]haddress}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubj)}(h rmap_t flagsh](h)}(hhh]h)}(hrmap_th]hrmap_t}(hj;ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8gubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj=gmodnameN classnameNj\j_)}jb]jec.folio_add_anon_rmap_ptesasbuh1hhj4gubj)}(h h]h }(hjYghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4gubh)}(hflagsh]hflags}(hjgghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4gubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjXeubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhj1ehMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhj1ehMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1hhj1ehMhjehhubj )}(hhh]j9)}(h1add PTE mappings to a page range of an anon folioh]h1add PTE mappings to a page range of an anon folio}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjehhhj1ehMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mappings to h](j)}(h``struct folio *folio``h]j?)}(hjgh]hstruct folio *folio}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgubj)}(hhh]j9)}(h The folio to add the mappings toh]h The folio to add the mappings to}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j?)}(hj hh]hstruct page *page}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj hubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjhubj)}(hhh]j9)}(hThe first page to addh]hThe first page to add}(hj$hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hhMhj!hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj hhMhjgubj)}(h:``int nr_pages`` The number of pages which will be mapped h](j)}(h``int nr_pages``h]j?)}(hjDhh]h int nr_pages}(hjFhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBhubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj>hubj)}(hhh]j9)}(h(The number of pages which will be mappedh]h(The number of pages which will be mapped}(hj]hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhhMhjZhubah}(h]h ]h"]h$]h&]uh1jhj>hubeh}(h]h ]h"]h$]h&]uh1jhjYhhMhjgubj)}(hK``struct vm_area_struct *vma`` The vm area in which the mappings are added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj}hh]hstruct vm_area_struct *vma}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{hubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjwhubj)}(hhh]j9)}(h+The vm area in which the mappings are addedh]h+The vm area in which the mappings are added}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjwhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubj)}(hL``unsigned long address`` The user virtual address of the first page to map h](j)}(h``unsigned long address``h]j?)}(hjhh]hunsigned long address}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjhubj)}(hhh]j9)}(h1The user virtual address of the first page to maph]h1The user virtual address of the first page to map}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubj)}(h ``rmap_t flags`` The rmap flags h](j)}(h``rmap_t flags``h]j?)}(hjhh]h rmap_t flags}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjhubj)}(hhh]j9)}(hThe rmap flagsh]hThe rmap flags}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihMhjgubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h**Description**h]jz)}(hj*ih]h Description}(hj,ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(iubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgubj9)}(hIThe page range of folio is defined by [first_page, first_page + nr_pages)h]hIThe page range of folio is defined by [first_page, first_page + nr_pages)}(hj@ihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgubj9)}(hXThe caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting, and to ensure that an anon folio is not being upgraded racily to a KSM folio (but KSM folios are never downgraded).h]hXThe caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting, and to ensure that an anon folio is not being upgraded racily to a KSM folio (but KSM folios are never downgraded).}(hjOihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_anon_rmap_pmd (C function)c.folio_add_anon_rmap_pmdhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid folio_add_anon_rmap_pmd (struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)h]h)}(hvoid folio_add_anon_rmap_pmd(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)h](j)}(hvoidh]hvoid}(hj~ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzihhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzihhhjihMubh)}(hfolio_add_anon_rmap_pmdh]h)}(hfolio_add_anon_rmap_pmdh]hfolio_add_anon_rmap_pmd}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzihhhjihMubj)}(hi(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjihhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]h)}(hfolioh]hfolio}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjimodnameN classnameNj\j_)}jb]je)}jXjisbc.folio_add_anon_rmap_pmdasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj2 )}(hj5 h]h*}(hjjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjiubh)}(hfolioh]hfolio}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj-jhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj)jubj)}(h h]h }(hj:jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)jubh)}(hhh]h)}(hpageh]hpage}(hjKjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjMjmodnameN classnameNj\j_)}jb]jic.folio_add_anon_rmap_pmdasbuh1hhj)jubj)}(h h]h }(hjijhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)jubj2 )}(hj5 h]h*}(hjwjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj)jubh)}(hpageh]hpage}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)jubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjjmodnameN classnameNj\j_)}jb]jic.folio_add_anon_rmap_pmdasbuh1hhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj2 )}(hj5 h]h*}(hjjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjjubh)}(hvmah]hvma}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hj khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubj)}(hlongh]hlong}(hj)khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubj)}(h h]h }(hj7khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj kubh)}(haddressh]haddress}(hjEkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj kubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubj)}(h rmap_t flagsh](h)}(hhh]h)}(hrmap_th]hrmap_t}(hjakhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^kubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjckmodnameN classnameNj\j_)}jb]jic.folio_add_anon_rmap_pmdasbuh1hhjZkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZkubh)}(hflagsh]hflags}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZkubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjiubeh}(h]h ]h"]h$]h&]jj uh1jhjzihhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvihhhjihMubah}(h]jqiah ](jjeh"]h$]h&]jj)jhuh1hhjihMhjsihhubj )}(hhh]j9)}(h2add a PMD mapping to a page range of an anon folioh]h2add a PMD mapping to a page range of an anon folio}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjsihhhjihMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjkubj)}(hhh](j)}(h8``struct folio *folio`` The folio to add the mapping to h](j)}(h``struct folio *folio``h]j?)}(hjkh]hstruct folio *folio}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjkubj)}(hhh]j9)}(hThe folio to add the mapping toh]hThe folio to add the mapping to}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj lhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj lhMhjkubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j?)}(hj1lh]hstruct page *page}(hj3lhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/lubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj+lubj)}(hhh]j9)}(hThe first page to addh]hThe first page to add}(hjJlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFlhMhjGlubah}(h]h ]h"]h$]h&]uh1jhj+lubeh}(h]h ]h"]h$]h&]uh1jhjFlhMhjkubj)}(hI``struct vm_area_struct *vma`` The vm area in which the mapping is added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjjlh]hstruct vm_area_struct *vma}(hjllhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhlubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjdlubj)}(hhh]j9)}(h)The vm area in which the mapping is addedh]h)The vm area in which the mapping is added}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjdlubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubj)}(hL``unsigned long address`` The user virtual address of the first page to map h](j)}(h``unsigned long address``h]j?)}(hjlh]hunsigned long address}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjlubj)}(hhh]j9)}(h1The user virtual address of the first page to maph]h1The user virtual address of the first page to map}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubj)}(h ``rmap_t flags`` The rmap flags h](j)}(h``rmap_t flags``h]j?)}(hjlh]h rmap_t flags}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjlubj)}(hhh]j9)}(hThe rmap flagsh]hThe rmap flags}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjkubj9)}(hMThe page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR)h]hMThe page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR)}(hj-mhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjkubj9)}(hThe 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]hThe 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 ah"]h$]h&]uh1j1 hjmubh)}(hfolioh]hfolio}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjmubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjnhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjnubj)}(h h]h }(hj'nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj8nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5nubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:nmodnameN classnameNj\j_)}jb]jmc.folio_add_new_anon_rmapasbuh1hhjnubj)}(h h]h }(hjVnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj2 )}(hj5 h]h*}(hjdnhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjnubh)}(hvmah]hvma}(hjqnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjmubj)}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(haddressh]haddress}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjmubj)}(h rmap_t flagsh](h)}(hhh]h)}(hrmap_th]hrmap_t}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjnmodnameN classnameNj\j_)}jb]jmc.folio_add_new_anon_rmapasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hflagsh]hflags}(hj ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjmubeh}(h]h ]h"]h$]h&]jj uh1jhjgmhhhjymhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjcmhhhjymhMubah}(h]j^mah ](jjeh"]h$]h&]jj)jhuh1hhjymhMhj`mhhubj )}(hhh]j9)}(h%Add mapping to a new anonymous folio.h]h%Add mapping to a new anonymous folio.}(hj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj1ohhubah}(h]h ]h"]h$]h&]uh1jhj`mhhhjymhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jLoj4jLoj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjVoh]h Parameters}(hjXohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjToubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPoubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mapping to. h](j)}(h``struct folio *folio``h]j?)}(hjuoh]hstruct folio *folio}(hjwohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsoubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjooubj)}(hhh]j9)}(h The folio to add the mapping to.h]h The folio to add the mapping to.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjooubeh}(h]h ]h"]h$]h&]uh1jhjohMhjloubj)}(hI``struct vm_area_struct *vma`` the vm area in which the mapping is added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjoh]hstruct vm_area_struct *vma}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjoubj)}(hhh]j9)}(h)the vm area in which the mapping is addedh]h)the vm area in which the mapping is added}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjloubj)}(h:``unsigned long address`` the user virtual address mapped h](j)}(h``unsigned long address``h]j?)}(hjoh]hunsigned long address}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjoubj)}(hhh]j9)}(hthe user virtual address mappedh]hthe user virtual address mapped}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjloubj)}(h ``rmap_t flags`` The rmap flags h](j)}(h``rmap_t flags``h]j?)}(hj ph]h rmap_t flags}(hj"phhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjpubj)}(hhh]j9)}(hThe rmap flagsh]hThe rmap flags}(hj9phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5phMhj6pubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhj5phMhjloubeh}(h]h ]h"]h$]h&]uh1jhjPoubj9)}(h**Description**h]jz)}(hj[ph]h Description}(hj]phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYpubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjPoubj9)}(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](h8Like folio_add_anon_rmap_*() but must only be called on }(hjqphhhNhNubjK)}(h*new*h]hnew}(hjyphhhNhNubah}(h]h ]h"]h$]h&]uh1jJhjqpubh 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.}(hjqphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjPoubj9)}(h7If the folio is pmd-mappable, it is accounted as a THP.h]h7If the folio is pmd-mappable, it is accounted as a THP.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%folio_add_file_rmap_ptes (C function)c.folio_add_file_rmap_pteshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hpvoid folio_add_file_rmap_ptes (struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h]h)}(hovoid folio_add_file_rmap_ptes(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM]ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphM]ubh)}(hfolio_add_file_rmap_ptesh]h)}(hfolio_add_file_rmap_ptesh]hfolio_add_file_rmap_ptes}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjphM]ubj)}(hR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjphhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjpubj)}(h h]h }(hj qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(hfolioh]hfolio}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjqmodnameN classnameNj\j_)}jb]je)}jXjpsbc.folio_add_file_rmap_ptesasbuh1hhjpubj)}(h h]h }(hj ah"]h$]h&]uh1j1 hjpubh)}(hfolioh]hfolio}(hjWqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjpqhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjlqubj)}(h h]h }(hj}qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlqubh)}(hhh]h)}(hpageh]hpage}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjqmodnameN classnameNj\j_)}jb]j8qc.folio_add_file_rmap_ptesasbuh1hhjlqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlqubj2 )}(hj5 h]h*}(hjqhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjlqubh)}(hpageh]hpage}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlqubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(h int nr_pagesh](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hnr_pagesh]hnr_pages}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjrhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjrubj)}(h h]h }(hj"rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj3rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0rubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj5rmodnameN classnameNj\j_)}jb]j8qc.folio_add_file_rmap_ptesasbuh1hhjrubj)}(h h]h }(hjQrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj2 )}(hj5 h]h*}(hj_rhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjrubh)}(hvmah]hvma}(hjlrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjphM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjphM]ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjphM]hjphhubj )}(hhh]j9)}(h+add PTE mappings to a page range of a folioh]h+add PTE mappings to a page range of a folio}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM]hjrhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphM]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jrj4jrj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMahjrubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mappings to h](j)}(h``struct folio *folio``h]j?)}(hjrh]hstruct folio *folio}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM^hjrubj)}(hhh]j9)}(h The folio to add the mappings toh]h The folio to add the mappings to}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhM^hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhM^hjrubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j?)}(hjsh]hstruct page *page}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM_hj subj)}(hhh]j9)}(hThe first page to addh]hThe first page to add}(hj)shhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%shM_hj&subah}(h]h ]h"]h$]h&]uh1jhj subeh}(h]h ]h"]h$]h&]uh1jhj%shM_hjrubj)}(hD``int nr_pages`` The number of pages that will be mapped using PTEs h](j)}(h``int nr_pages``h]j?)}(hjIsh]h int nr_pages}(hjKshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGsubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM`hjCsubj)}(hhh]j9)}(h2The number of pages that will be mapped using PTEsh]h2The number of pages that will be mapped using PTEs}(hjbshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^shM`hj_subah}(h]h ]h"]h$]h&]uh1jhjCsubeh}(h]h ]h"]h$]h&]uh1jhj^shM`hjrubj)}(hK``struct vm_area_struct *vma`` The vm area in which the mappings are added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjsh]hstruct vm_area_struct *vma}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMahj|subj)}(hhh]j9)}(h+The vm area in which the mappings are addedh]h+The vm area in which the mappings are added}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMahjsubah}(h]h ]h"]h$]h&]uh1jhj|subeh}(h]h ]h"]h$]h&]uh1jhjshMahjrubeh}(h]h ]h"]h$]h&]uh1jhjrubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMchjrubj9)}(hAThe page range of the folio is defined by [page, page + nr_pages)h]hAThe page range of the folio is defined by [page, page + nr_pages)}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMchjrubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMehjrubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_file_rmap_pmd (C function)c.folio_add_file_rmap_pmdhNtauh1hhj qhhhNhNubh)}(hhh](h)}(havoid 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)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj thhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMnubj)}(h h]h }(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj thhhjthMnubh)}(hfolio_add_file_rmap_pmdh]h)}(hfolio_add_file_rmap_pmdh]hfolio_add_file_rmap_pmd}(hj2thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.tubah}(h]h ](jjeh"]h$]h&]jj uh1hhj thhhjthMnubj)}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjNthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjJtubj)}(h h]h }(hj[thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJtubh)}(hhh]h)}(hfolioh]hfolio}(hjlthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjitubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjntmodnameN classnameNj\j_)}jb]je)}jXj4tsbc.folio_add_file_rmap_pmdasbuh1hhjJtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJtubj2 )}(hj5 h]h*}(hjthhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJtubh)}(hfolioh]hfolio}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFtubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(hpageh]hpage}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]jtc.folio_add_file_rmap_pmdasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hj uhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(hpageh]hpage}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFtubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj0uhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj,uubj)}(h h]h }(hj=uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,uubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjNuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKuubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjPumodnameN classnameNj\j_)}jb]jtc.folio_add_file_rmap_pmdasbuh1hhj,uubj)}(h h]h }(hjluhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,uubj2 )}(hj5 h]h*}(hjzuhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj,uubh)}(hvmah]hvma}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,uubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFtubeh}(h]h ]h"]h$]h&]jj uh1jhj thhhjthMnubeh}(h]h ]h"]h$]h&]jj juh1hjjhj thhhjthMnubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1hhjthMnhjthhubj )}(hhh]j9)}(h,add a PMD mapping to a page range of a folioh]h,add a PMD mapping to a page range of a folio}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMnhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthMnubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMrhjuubj)}(hhh](j)}(h8``struct folio *folio`` The folio to add the mapping to h](j)}(h``struct folio *folio``h]j?)}(hjuh]hstruct folio *folio}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMohjuubj)}(hhh]j9)}(hThe folio to add the mapping toh]hThe folio to add the mapping to}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMohjvubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjvhMohjuubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j?)}(hj+vh]hstruct page *page}(hj-vhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)vubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMphj%vubj)}(hhh]j9)}(hThe first page to addh]hThe first page to add}(hjDvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@vhMphjAvubah}(h]h ]h"]h$]h&]uh1jhj%vubeh}(h]h ]h"]h$]h&]uh1jhj@vhMphjuubj)}(hI``struct vm_area_struct *vma`` The vm area in which the mapping is added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjdvh]hstruct vm_area_struct *vma}(hjfvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbvubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMqhj^vubj)}(hhh]j9)}(h)The vm area in which the mapping is addedh]h)The vm area in which the mapping is added}(hj}vhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyvhMqhjzvubah}(h]h ]h"]h$]h&]uh1jhj^vubeh}(h]h ]h"]h$]h&]uh1jhjyvhMqhjuubeh}(h]h ]h"]h$]h&]uh1jhjuubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMshjuubj9)}(hEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)h]hEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMshjuubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMuhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_file_rmap_pud (C function)c.folio_add_file_rmap_pudhNtauh1hhj qhhhNhNubh)}(hhh](h)}(havoid 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)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjwhMubh)}(hfolio_add_file_rmap_pudh]h)}(hfolio_add_file_rmap_pudh]hfolio_add_file_rmap_pud}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjwhMubj)}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj0whhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj,wubj)}(h h]h }(hj=whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,wubh)}(hhh]h)}(hfolioh]hfolio}(hjNwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjPwmodnameN classnameNj\j_)}jb]je)}jXjwsbc.folio_add_file_rmap_pudasbuh1hhj,wubj)}(h h]h }(hjnwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,wubj2 )}(hj5 h]h*}(hj|whhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj,wubh)}(hfolioh]hfolio}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,wubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj(wubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjwhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]h)}(hpageh]hpage}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjwmodnameN classnameNj\j_)}jb]jjwc.folio_add_file_rmap_pudasbuh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj2 )}(hj5 h]h*}(hjwhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjwubh)}(hpageh]hpage}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj(wubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjxhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj0xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-xubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj2xmodnameN classnameNj\j_)}jb]jjwc.folio_add_file_rmap_pudasbuh1hhjxubj)}(h h]h }(hjNxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj2 )}(hj5 h]h*}(hj\xhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjxubh)}(hvmah]hvma}(hjixhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj(wubeh}(h]h ]h"]h$]h&]jj uh1jhjvhhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjwhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1hhjwhMhjvhhubj )}(hhh]j9)}(h,add a PUD mapping to a page range of a folioh]h,add a PUD mapping to a page range of a folio}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjwhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxubj)}(hhh](j)}(h8``struct folio *folio`` The folio to add the mapping to h](j)}(h``struct folio *folio``h]j?)}(hjxh]hstruct folio *folio}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxubj)}(hhh]j9)}(hThe folio to add the mapping toh]hThe folio to add the mapping to}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j?)}(hj yh]hstruct page *page}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj yubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjyubj)}(hhh]j9)}(hThe first page to addh]hThe first page to add}(hj&yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"yhMhj#yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj"yhMhjxubj)}(hI``struct vm_area_struct *vma`` The vm area in which the mapping is added h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjFyh]hstruct vm_area_struct *vma}(hjHyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDyubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj@yubj)}(hhh]j9)}(h)The vm area in which the mapping is addedh]h)The vm area in which the mapping is added}(hj_yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[yhMhj\yubah}(h]h ]h"]h$]h&]uh1jhj@yubeh}(h]h ]h"]h$]h&]uh1jhj[yhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxubj9)}(hEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)h]hEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#folio_remove_rmap_ptes (C function)c.folio_remove_rmap_pteshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hnvoid folio_remove_rmap_ptes (struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h]h)}(hmvoid folio_remove_rmap_ptes(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjyhMubh)}(hfolio_remove_rmap_ptesh]h)}(hfolio_remove_rmap_ptesh]hfolio_remove_rmap_ptes}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhjyhMubj)}(hR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjzhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]h)}(hfolioh]hfolio}(hj0zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-zubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj2zmodnameN classnameNj\j_)}jb]je)}jXjysbc.folio_remove_rmap_ptesasbuh1hhjzubj)}(h h]h }(hjPzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj2 )}(hj5 h]h*}(hj^zhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjzubh)}(hfolioh]hfolio}(hjkzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj zubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjzhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]h)}(hpageh]hpage}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjzmodnameN classnameNj\j_)}jb]jLzc.folio_remove_rmap_ptesasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj2 )}(hj5 h]h*}(hjzhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjzubh)}(hpageh]hpage}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj zubj)}(h int nr_pagesh](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hnr_pagesh]hnr_pages}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj zubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj){hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj%{ubj)}(h h]h }(hj6{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%{ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjG{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD{ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjI{modnameN classnameNj\j_)}jb]jLzc.folio_remove_rmap_ptesasbuh1hhj%{ubj)}(h h]h }(hje{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%{ubj2 )}(hj5 h]h*}(hjs{hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj%{ubh)}(hvmah]hvma}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj zubeh}(h]h ]h"]h$]h&]jj uh1jhjyhhhjyhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjyhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjyhMhjyhhubj )}(hhh]j9)}(h0remove PTE mappings from a page range of a folioh]h0remove PTE mappings from a page range of a folio}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjyhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct folio *folio`` The folio to remove the mappings from ``struct page *page`` The first page to remove ``int nr_pages`` The number of pages that will be removed from the mapping ``struct vm_area_struct *vma`` The vm area from which the mappings are removed **Description** The page range of the folio is defined by [page, page + nr_pages) The caller needs to hold the page table lock.h](j9)}(h**Parameters**h]jz)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{ubj)}(hhh](j)}(h>``struct folio *folio`` The folio to remove the mappings from h](j)}(h``struct folio *folio``h]j?)}(hj{h]hstruct folio *folio}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{ubj)}(hhh]j9)}(h%The folio to remove the mappings fromh]h%The folio to remove the mappings from}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj{ubj)}(h/``struct page *page`` The first page to remove h](j)}(h``struct page *page``h]j?)}(hj$|h]hstruct page *page}(hj&|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"|ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj|ubj)}(hhh]j9)}(hThe first page to removeh]hThe first page to remove}(hj=|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9|hMhj:|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj9|hMhj{ubj)}(hK``int nr_pages`` The number of pages that will be removed from the mapping h](j)}(h``int nr_pages``h]j?)}(hj]|h]h int nr_pages}(hj_|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[|ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjW|ubj)}(hhh]j9)}(h9The number of pages that will be removed from the mappingh]h9The number of pages that will be removed from the mapping}(hjv|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjr|hMhjs|ubah}(h]h ]h"]h$]h&]uh1jhjW|ubeh}(h]h ]h"]h$]h&]uh1jhjr|hMhj{ubj)}(hO``struct vm_area_struct *vma`` The vm area from which the mappings are removed h](j)}(h``struct vm_area_struct *vma``h]j?)}(hj|h]hstruct vm_area_struct *vma}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj|ubj)}(hhh]j9)}(h/The vm area from which the mappings are removedh]h/The vm area from which the mappings are removed}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{ubj9)}(hAThe page range of the folio is defined by [page, page + nr_pages)h]hAThe page range of the folio is defined by [page, page + nr_pages)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{ubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"folio_remove_rmap_pmd (C function)c.folio_remove_rmap_pmdhNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hj%}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!}hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hj4}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!}hhhj3}hMubh)}(hfolio_remove_rmap_pmdh]h)}(hfolio_remove_rmap_pmdh]hfolio_remove_rmap_pmd}(hjF}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!}hhhj3}hMubj)}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjb}hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^}ubj)}(h h]h }(hjo}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^}ubh)}(hhh]h)}(hfolioh]hfolio}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}}ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}modnameN classnameNj\j_)}jb]je)}jXjH}sbc.folio_remove_rmap_pmdasbuh1hhj^}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^}ubj2 )}(hj5 h]h*}(hj}hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^}ubh)}(hfolioh]hfolio}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjZ}ubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj}hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hpageh]hpage}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}modnameN classnameNj\j_)}jb]j}c.folio_remove_rmap_pmdasbuh1hhj}ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hj~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hpageh]hpage}(hj+~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjZ}ubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjD~hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@~ubj)}(h h]h }(hjQ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@~ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjb~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjd~modnameN classnameNj\j_)}jb]j}c.folio_remove_rmap_pmdasbuh1hhj@~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@~ubj2 )}(hj5 h]h*}(hj~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj@~ubh)}(hvmah]hvma}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjZ}ubeh}(h]h ]h"]h$]h&]jj uh1jhj!}hhhj3}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhj3}hMubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1hhj3}hMhj}hhubj )}(hhh]j9)}(h1remove a PMD mapping from a page range of a folioh]h1remove a PMD mapping from a page range of a folio}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj3}hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj~ubj)}(hhh](j)}(h=``struct folio *folio`` The folio to remove the mapping from h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjubj)}(hhh]j9)}(h$The folio to remove the mapping fromh]h$The folio to remove the mapping from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h/``struct page *page`` The first page to remove h](j)}(h``struct page *page``h]j?)}(hj?h]hstruct page *page}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj9ubj)}(hhh]j9)}(hThe first page to removeh]hThe first page to remove}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj~ubj)}(hM``struct vm_area_struct *vma`` The vm area from which the mapping is removed h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjxh]hstruct vm_area_struct *vma}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjrubj)}(hhh]j9)}(h-The vm area from which the mapping is removedh]h-The vm area from which the mapping is removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj~ubj9)}(hEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)h]hEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj~ubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"folio_remove_rmap_pud (C function)c.folio_remove_rmap_pudhNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM$ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM$ubh)}(hfolio_remove_rmap_pudh]h)}(hfolio_remove_rmap_pudh]hfolio_remove_rmap_pud}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM$ubj)}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjDhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]h)}(hfolioh]hfolio}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjdmodnameN classnameNj\j_)}jb]je)}jXj*sbc.folio_remove_rmap_pudasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj@ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubj)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjÀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hjԀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjрubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjրmodnameN classnameNj\j_)}jb]j~c.folio_remove_rmap_pudasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpageh]hpage}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj&hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjFmodnameN classnameNj\j_)}jb]j~c.folio_remove_rmap_pudasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj2 )}(hj5 h]h*}(hjphhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj"ubh)}(hvmah]hvma}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj<ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM$ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM$hjhhubj )}(hhh]j9)}(h1remove a PUD mapping from a page range of a folioh]h1remove a PUD mapping from a page range of a folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM$ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjɁh]h Parameters}(hjˁhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǁubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM(hjÁubj)}(hhh](j)}(h=``struct folio *folio`` The folio to remove the mapping from h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM%hjubj)}(hhh]j9)}(h$The folio to remove the mapping fromh]h$The folio to remove the mapping from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hj߁ubj)}(h/``struct page *page`` The first page to remove h](j)}(h``struct page *page``h]j?)}(hj!h]hstruct page *page}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM&hjubj)}(hhh]j9)}(hThe first page to removeh]hThe first page to remove}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hM&hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM&hj߁ubj)}(hM``struct vm_area_struct *vma`` The vm area from which the mapping is removed h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjZh]hstruct vm_area_struct *vma}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM'hjTubj)}(hhh]j9)}(h-The vm area from which the mapping is removedh]h-The vm area from which the mapping is removed}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohM'hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM'hj߁ubeh}(h]h ]h"]h$]h&]uh1jhjÁubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM)hjÁubj9)}(hEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)h]hEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM)hjÁubj9)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM+hjÁubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtry_to_unmap (C function)c.try_to_unmaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(h=void try_to_unmap (struct folio *folio, enum ttu_flags flags)h]h)}(h ah"]h$]h&]uh1j1 hj"ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(henum ttu_flags flagsh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h ttu_flagsh]h ttu_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j`c.try_to_unmapasbuh1hhjubj)}(h h]h }(hjԃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j܂ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjނhhubj )}(hhh]j9)}(h1Try to remove all page table mappings to a folio.h]h1Try to remove all page table mappings to a folio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjނhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj(ubj)}(hhh](j)}(h,``struct folio *folio`` The folio to unmap. h](j)}(h``struct folio *folio``h]j?)}(hjMh]hstruct folio *folio}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjGubj)}(hhh]j9)}(hThe folio to unmap.h]hThe folio to unmap.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(h*``enum ttu_flags flags`` action and flags h](j)}(h``enum ttu_flags flags``h]j?)}(hjh]henum ttu_flags flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjubj)}(hhh]j9)}(haction and flagsh]haction and flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjÄhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj(ubj9)}(hTries 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]hTries 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).}(hjׄhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj(ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj(ubj9)}(h Caller must hold the folio lock.h]h Caller must hold the folio lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtry_to_migrate (C function)c.try_to_migratehNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hM ubh)}(htry_to_migrateh]h)}(htry_to_migrateh]htry_to_migrate}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hM ubj)}(h+(struct folio *folio, enum ttu_flags flags)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjPsbc.try_to_migrateasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjfubh)}(hfolioh]hfolio}(hjÅhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubj)}(henum ttu_flags flagsh](j!)}(hjh]henum}(hj܅hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj؅ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؅ubh)}(hhh]h)}(h ttu_flagsh]h ttu_flags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.try_to_migrateasbuh1hhj؅ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؅ubh)}(hflagsh]hflags}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj؅ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjbubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hM hj"hhubj )}(hhh]j9)}(h8try to replace all page table mappings with swap entriesh]h8try to replace all page table mappings with swap entries}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjMhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhj4jhj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjlubj)}(hhh](j)}(hD``struct folio *folio`` the folio to replace page table entries for h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjubj)}(hhh]j9)}(h+the folio to replace page table entries forh]h+the folio to replace page table entries for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``enum ttu_flags flags`` action and flags h](j)}(h``enum ttu_flags flags``h]j?)}(hjʆh]henum ttu_flags flags}(hj̆hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjȆubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjĆubj)}(hhh]j9)}(haction and flagsh]haction and flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj߆hM hjubah}(h]h ]h"]h$]h&]uh1jhjĆubeh}(h]h ]h"]h$]h&]uh1jhj߆hM hjubeh}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjlubj9)}(hTries 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]hTries 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"make_device_exclusive (C function)c.make_device_exclusivehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hrstruct page * make_device_exclusive (struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)h]h)}(hpstruct page *make_device_exclusive(struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)h](j!)}(hj$h]hstruct}(hjJhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjFhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMD ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMD ubh)}(hhh]h)}(hpageh]hpage}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjkmodnameN classnameNj\j_)}jb]je)}jXmake_device_exclusivesbc.make_device_exclusiveasbuh1hhjFhhhjWhMD ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMD ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjFhhhjWhMD ubh)}(hmake_device_exclusiveh]h)}(hjh]hmake_device_exclusive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjWhMD ubj)}(hN(struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)h](j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjćhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjчhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߇ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.make_device_exclusiveasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hlongh]hlong}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(haddrh]haddr}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h void *ownerh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hownerh]howner}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio **folioph](j!)}(hj$h]hstruct}(hjLjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjÈubj)}(h h]h }(hjԈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÈubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.make_device_exclusiveasbuh1hhjÈubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÈubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjÈubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjÈubh)}(hfolioph]hfoliop}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjÈubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhjWhMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjWhMD ubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhjWhMD hj?hhubj )}(hhh]j9)}(h)Mark a page for exclusive use by a deviceh]h)Mark a page for exclusive use by a device}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMD hjRhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjWhMD ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMH hjqubj)}(hhh](j)}(h@``struct mm_struct *mm`` mm_struct of associated target process h](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chME hjubj)}(hhh]j9)}(h&mm_struct of associated target processh]h&mm_struct of associated target process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhME hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhME hjubj)}(hO``unsigned long addr`` the virtual address to mark for exclusive device access h](j)}(h``unsigned long addr``h]j?)}(hjωh]hunsigned long addr}(hjщhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj͉ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMF hjɉubj)}(hhh]j9)}(h7the virtual address to mark for exclusive device accessh]h7the virtual address to mark for exclusive device access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMF hjubah}(h]h ]h"]h$]h&]uh1jhjɉubeh}(h]h ]h"]h$]h&]uh1jhjhMF hjubj)}(hQ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering h](j)}(h``void *owner``h]j?)}(hjh]h void *owner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMG hjubj)}(hhh]j9)}(h@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filteringh]h@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMG hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMG hjubj)}(hH``struct folio **foliop`` folio pointer will be stored here on success. h](j)}(h``struct folio **foliop``h]j?)}(hjAh]hstruct folio **foliop}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMH hj;ubj)}(hhh]j9)}(h-folio pointer will be stored here on success.h]h-folio pointer will be stored here on success.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMH hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMH hjubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMJ hjqubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMJ hjqubj9)}(hxOn fault, the device-exclusive entries are replaced with the original PTE under folio lock, after calling MMU notifiers.h]hxOn fault, the device-exclusive entries are replaced with the original PTE under folio lock, after calling MMU notifiers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMO hjqubj9)}(hOnly 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]hOnly 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMR hjqubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMW hjqubj9)}(h **Notes**h]jz)}(hjЊh]hNotes}(hjҊhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΊubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM\ hjqubjU)}(hX.#. This function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to **addr**. #. While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported. #. device-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers. h]j+)}(hhh](j+)}(hThis 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]j9)}(hThis 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](hThis 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 }(hjhhhNhNubjz)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM\ hjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(hWhile 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]j9)}(hWhile 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]hWhile 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM_ hjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(hdevice-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers. h]j9)}(hdevice-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers.h]hdevice-exclusive entries are considered “clean” and “old” by core-mm. Device drivers must update the folio state when informed by MMU notifiers.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMb hj1ubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]j0,j1,j2,hj3,j4,uh1j+hjubah}(h]h ]h"]h$]h&]uh1jThjhM\ hjqubj9)}(h **Return**h]jz)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMf hjqubj9)}(h>pointer to mapped page on success, otherwise a negative error.h]h>pointer to mapped page on success, otherwise a negative error.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMg hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__rmap_walk_file (C function)c.__rmap_walk_filehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid __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)}(hvoid __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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM' ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM' ubh)}(h__rmap_walk_fileh]h)}(h__rmap_walk_fileh]h__rmap_walk_file}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM' ubj)}(h(struct folio *folio, struct address_space *mapping, pgoff_t pgoff_start, unsigned long nr_pages, struct rmap_walk_control *rwc, bool locked)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjڋhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj֋ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֋ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.__rmap_walk_fileasbuh1hhj֋ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֋ubj2 )}(hj5 h]h*}(hj&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj֋ubh)}(hfolioh]hfolio}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֋ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubj)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjLhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]h)}(h address_spaceh]h address_space}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjlmodnameN classnameNj\j_)}jb]jc.__rmap_walk_fileasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjHubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubj)}(hpgoff_t pgoff_starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.__rmap_walk_fileasbuh1hhjubj)}(h h]h }(hj݌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h pgoff_starth]h pgoff_start}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubj)}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubj)}(hstruct rmap_walk_control *rwch](j!)}(hj$h]hstruct}(hjUhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hrmap_walk_controlh]hrmap_walk_control}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjumodnameN classnameNj\j_)}jb]jc.__rmap_walk_fileasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQubh)}(hrwch]hrwc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubj)}(h bool lockedh](j)}(hj)h]hbool}(hjōhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjҍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlockedh]hlocked}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjҋubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM' ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM' ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM' hjhhubj )}(hhh]j9)}(hTraverse the reverse mapping for a file-backed mapping of a page mapped within a specified page cache object at a specified offset.h]hTraverse the reverse mapping for a file-backed mapping of a page mapped within a specified page cache object at a specified offset.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM' hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM' ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j"j4j"j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM+ 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]j?)}(hjKh]hstruct folio *folio}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM, hjEubj)}(hhh]j9)}(hEither 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](hTEither the folio whose mappings to traverse, or if NULL, the callbacks specified in }(hjdhhhNhNubjz)}(h**rwc**h]hrwc}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubhE will be configured such as to be able to look up mappings correctly.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM* hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM, hjBubj)}(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]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM/ hjubj)}(hhh]j9)}(hThe page cache object whose mapping VMAs we intend to traverse. If **folio** is non-NULL, this should be equal to folio_mapping(folio).h](hCThe page cache object whose mapping VMAs we intend to traverse. If }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh; is non-NULL, this should be equal to folio_mapping(folio).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM- hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/ hjBubj)}(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]j?)}(hjh]hpgoff_t pgoff_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM2 hjݎubj)}(hhh]j9)}(hThe 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](hThe offset within }(hjhhhNhNubjz)}(h **mapping**h]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) of the page which we are looking up. If }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh9 is non-NULL, this should be equal to folio_pgoff(folio).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM0 hjubah}(h]h ]h"]h$]h&]uh1jhjݎubeh}(h]h ]h"]h$]h&]uh1jhjhM2 hjBubj)}(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]j?)}(hjAh]hunsigned long nr_pages}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM4 hj;ubj)}(hhh]j9)}(hsThe 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 }(hjZhhhNhNubjz)}(h **folio**h]hfolio}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh< is non-NULL, this should be equal to folio_nr_pages(folio).}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM3 hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM4 hjBubj)}(hw``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]j?)}(hjh]hstruct rmap_walk_control *rwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM6 hjubj)}(hhh]j9)}(hTThe reverse mapping walk control object describing how the traversal should proceed.h]hTThe reverse mapping walk control object describing how the traversal should proceed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM5 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6 hjBubj)}(hO``bool locked`` Is the **mapping** already locked? If not, we acquire the lock.h](j)}(h``bool locked``h]j?)}(hjǏh]h bool locked}(hjɏhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjŏubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM7 hjubj)}(hhh]j9)}(h?Is the **mapping** already locked? If not, we acquire the lock.h](hIs the }(hjhhhNhNubjz)}(h **mapping**h]hmapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh- already locked? If not, we acquire the lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj܏hM7 hjݏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj܏hM7 hjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_folio (C function)c.migrate_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hoint migrate_folio (struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h]h)}(hnint migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMubh)}(h migrate_folioh]h)}(h migrate_folioh]h migrate_folio}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj@hMubj)}(h](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjohhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjUsbc.migrate_folioasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjkubh)}(hmappingh]hmapping}(hjȐhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjgubj)}(hstruct folio *dsth](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjݐubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݐubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.migrate_folioasbuh1hhjݐubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݐubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjݐubh)}(hdsth]hdst}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݐubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjgubj)}(hstruct folio *srch](j!)}(hj$h]hstruct}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(hfolioh]hfolio}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjqmodnameN classnameNj\j_)}jb]jc.migrate_folioasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjMubh)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjgubj)}(henum migrate_mode modeh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h migrate_modeh]h migrate_mode}(hjߑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܑubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.migrate_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmodeh]hmode}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjgubeh}(h]h ]h"]h$]h&]jj uh1jhj.hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj@hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1hhj@hMhj'hhubj )}(hhh]j9)}(hSimple folio migration.h]hSimple folio migration.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jMj4jMj5j6j7uh1hhhhj qhNhNubjp)}(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 page. **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](j9)}(h**Parameters**h]jz)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjQubj)}(hhh](j)}(hJ``struct address_space *mapping`` The address_space containing the folio. h](j)}(h!``struct address_space *mapping``h]j?)}(hjvh]hstruct address_space *mapping}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjpubj)}(hhh]j9)}(h'The address_space containing the folio.h]h'The address_space containing the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(h8``struct folio *dst`` The folio to migrate the data to. h](j)}(h``struct folio *dst``h]j?)}(hjh]hstruct folio *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh]j9)}(h!The folio to migrate the data to.h]h!The folio to migrate the data to.}(hjȒhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjĒhMhjŒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĒhMhjmubj)}(h=``struct folio *src`` The folio containing the current data. h](j)}(h``struct folio *src``h]j?)}(hjh]hstruct folio *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh]j9)}(h&The folio containing the current data.h]h&The folio containing the current data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(h4``enum migrate_mode mode`` How to migrate the page. h](j)}(h``enum migrate_mode mode``h]j?)}(hj!h]henum migrate_mode mode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh]j9)}(hHow to migrate the page.h]hHow to migrate the page.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjmubeh}(h]h ]h"]h$]h&]uh1jhjQubj9)}(h**Description**h]jz)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjQubj9)}(hfCommon logic to directly migrate a single LRU folio suitable for folios that do not have private data.h]hfCommon logic to directly migrate a single LRU folio suitable for folios that do not have private data.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjQubj9)}(h&Folios are locked upon entry and exit.h]h&Folios are locked upon entry and exit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!buffer_migrate_folio (C function)c.buffer_migrate_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvint buffer_migrate_folio (struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h]h)}(huint buffer_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMvubh)}(hbuffer_migrate_folioh]h)}(hbuffer_migrate_folioh]hbuffer_migrate_folio}(hjѓhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͓ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMvubj)}(h](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjӓsbc.buffer_migrate_folioasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj9hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *dsth](j!)}(hj$h]hstruct}(hj_hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hfolioh]hfolio}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j'c.buffer_migrate_folioasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj[ubh)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *srch](j!)}(hj$h]hstruct}(hjϔhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj˔ubj)}(h h]h }(hjܔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˔ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j'c.buffer_migrate_folioasbuh1hhj˔ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˔ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj˔ubh)}(hsrch]hsrc}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˔ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(henum migrate_mode modeh](j!)}(hjh]henum}(hj?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(h migrate_modeh]h migrate_mode}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj_modnameN classnameNj\j_)}jb]j'c.buffer_migrate_folioasbuh1hhj;ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMvhjhhubj )}(hhh]j9)}(h+Migration function for folios with buffers.h]h+Migration function for folios with buffers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMvhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMvubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j˕j4j˕j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjՕh]h Parameters}(hjוhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӕubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMzhjϕubj)}(hhh](j)}(hH``struct address_space *mapping`` The address space containing **src**. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMwhjubj)}(hhh]j9)}(h%The address space containing **src**.h](hThe address space containing }(hj hhhNhNubjz)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj hMwhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMwhjubj)}(h/``struct folio *dst`` The folio to migrate to. h](j)}(h``struct folio *dst``h]j?)}(hj?h]hstruct folio *dst}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMxhj9ubj)}(hhh]j9)}(hThe folio to migrate to.h]hThe folio to migrate to.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMxhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMxhjubj)}(h1``struct folio *src`` The folio to migrate from. h](j)}(h``struct folio *src``h]j?)}(hjxh]hstruct folio *src}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMyhjrubj)}(hhh]j9)}(hThe folio to migrate from.h]hThe folio to migrate from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(h5``enum migrate_mode mode`` How to migrate the folio. h](j)}(h``enum migrate_mode mode``h]j?)}(hjh]henum migrate_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMzhjubj)}(hhh]j9)}(hHow to migrate the folio.h]hHow to migrate the folio.}(hjʖhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjƖhMzhjǖubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƖhMzhjubeh}(h]h ]h"]h$]h&]uh1jhjϕubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chM|hjϕubj9)}(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](hcThis function can only be used if the underlying filesystem guarantees that no other references to }(hjhhhNhNubjz)}(h**src**h]hsrc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chM|hjϕubj9)}(h **Return**h]jz)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjϕubj9)}(h,0 on success or a negative errno on failure.h]h,0 on success or a negative errno on failure.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjϕubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(buffer_migrate_folio_norefs (C function)c.buffer_migrate_folio_norefshNtauh1hhj qhhhNhNubh)}(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)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMubh)}(hbuffer_migrate_folio_norefsh]h)}(hbuffer_migrate_folio_norefsh]hbuffer_migrate_folio_norefs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjxhMubj)}(h](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hjŗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj—ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjǗmodnameN classnameNj\j_)}jb]je)}jXjsbc.buffer_migrate_folio_norefsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *dsth](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]jc.buffer_migrate_folio_norefsasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdsth]hdst}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *srch](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.buffer_migrate_folio_norefsasbuh1hhjubj)}(h h]h }(hjŘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjӘhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(henum migrate_mode modeh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h migrate_modeh]h migrate_mode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.buffer_migrate_folio_norefsasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmodeh]hmode}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjfhhhjxhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjxhMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhj_hhubj )}(hhh]j9)}(h+Migration function for folios with buffers.h]h+Migration function for folios with buffers.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh](j)}(hH``struct address_space *mapping`` The address space containing **src**. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh]j9)}(h%The address space containing **src**.h](hThe address space containing }(hjǙhhhNhNubjz)}(h**src**h]hsrc}(hjϙhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǙubh.}(hjǙhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjÙhMhjęubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjÙhMhjubj)}(h/``struct folio *dst`` The folio to migrate to. h](j)}(h``struct folio *dst``h]j?)}(hjh]hstruct folio *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj)}(hhh]j9)}(hThe folio to migrate to.h]hThe folio to migrate to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct folio *src`` The folio to migrate from. h](j)}(h``struct folio *src``h]j?)}(hj2h]hstruct folio *src}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhj,ubj)}(hhh]j9)}(hThe folio to migrate from.h]hThe folio to migrate from.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h5``enum migrate_mode mode`` How to migrate the folio. h](j)}(h``enum migrate_mode mode``h]j?)}(hjkh]henum migrate_mode mode}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjeubj)}(hhh]j9)}(hHow to migrate the folio.h]hHow to migrate the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj9)}(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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj9)}(h **Return**h]jz)}(hj͚h]hReturn}(hjϚhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj˚ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubj9)}(h,0 on success or a negative errno on failure.h]h,0 on success or a negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_mmap (C function) c.do_mmaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hunsigned long do_mmap (struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)h]h)}(hunsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(hdo_mmaph]h)}(hdo_mmaph]hdo_mmap}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)h](j)}(hstruct file *fileh](j!)}(hj$h]hstruct}(hjkhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]h)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjQsb c.do_mmapasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjgubh)}(hfileh]hfile}(hjěhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjݛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٛubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٛubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٛubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٛubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjٛubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hlongh]hlong}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hlenh]hlen}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long proth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hproth]hprot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hjМhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̜ubj)}(h h]h }(hjޜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̜ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̜ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̜ubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̜ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hvm_flags_t vm_flagsh](h)}(hhh]h)}(h vm_flags_th]h vm_flags_t}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj&modnameN classnameNj\j_)}jb]j c.do_mmapasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hvm_flagsh]hvm_flags}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long pgoffh](j)}(hunsignedh]hunsigned}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hpgoffh]hpgoff}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long *populateh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjȝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj֝hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpopulateh]hpopulate}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hstruct list_head *ufh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h list_headh]h list_head}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8modnameN classnameNj\j_)}jb]j c.do_mmapasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjbhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hufh]huf}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(hX`Perform 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 **vm_flags**. If this is a file-backed mapping then the file is specified in **file** and page offset into the file via **pgoff**.h](hSPerform a userland memory mapping into the current process address space of length }(hjhhhNhNubjz)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with protection bits }(hjhhhNhNubjz)}(h**prot**h]hprot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh , mmap flags }(hjhhhNhNubjz)}(h **flags**h]hflags}(hjŞhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhP (from which VMA flags will be inferred), and any additional VMA flags to apply }(hjhhhNhNubjz)}(h **vm_flags**h]hvm_flags}(hjמhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhA. If this is a file-backed mapping then the file is specified in }(hjhhhNhNubjz)}(h**file**h]hfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# and page offset into the file via }(hjhhhNhNubjz)}(h **pgoff**h]hpgoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX# **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. ``vm_flags_t vm_flags`` VMA flags which should be set by default, or 0 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](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj!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]j?)}(hjFh]hstruct file *file}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM:hj@ubj)}(hhh]j9)}(hdAn optional struct file pointer describing the file which is to be mapped, if a file-backed mapping.h]hdAn optional struct file pointer describing the file which is to be mapped, if a file-backed mapping.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM9hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM: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]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM=hjzubj)}(hhh]j9)}(hIf 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](hIf non-zero, hints at (or if }(hjhhhNhNubjz)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh| has MAP_FIXED set, specifies) the address at which to perform this mapping. See mmap (2) for details. Must be page-aligned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM;hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM=hj=ubj)}(hk``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]j?)}(hj̟h]hunsigned long len}(hjΟhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjʟubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM?hjƟubj)}(hhh]j9)}(hTThe length of the mapping. Will be page-aligned and must be at least 1 page in size.h]hTThe length of the mapping. Will be page-aligned and must be at least 1 page in size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM>hjubah}(h]h ]h"]h$]h&]uh1jhjƟubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj=ubj)}(hl``unsigned long prot`` Protection bits describing access required to the mapping. See mmap (2) for details. h](j)}(h``unsigned long prot``h]j?)}(hjh]hunsigned long prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMAhjubj)}(hhh]j9)}(hTProtection bits describing access required to the mapping. See mmap (2) for details.h]hTProtection bits describing access required to the mapping. See mmap (2) for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhj=ubj)}(hh``unsigned long flags`` Flags specifying how the mapping should be performed, see mmap (2) for details. h](j)}(h``unsigned long flags``h]j?)}(hj@h]hunsigned long flags}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMChj:ubj)}(hhh]j9)}(hOFlags specifying how the mapping should be performed, see mmap (2) for details.h]hOFlags specifying how the mapping should be performed, see mmap (2) for details.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMBhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMChj=ubj)}(hR``vm_flags_t vm_flags`` VMA flags which should be set by default, or 0 otherwise. h](j)}(h``vm_flags_t vm_flags``h]j?)}(hjzh]hvm_flags_t vm_flags}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMDhjtubj)}(hhh]j9)}(h9VMA flags which should be set by default, or 0 otherwise.h]h9VMA flags which should be set by default, or 0 otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMDhj=ubj)}(h]``unsigned long pgoff`` Page offset into the **file** if file-backed, should be 0 otherwise. h](j)}(h``unsigned long pgoff``h]j?)}(hjh]hunsigned long pgoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMEhjubj)}(hhh]j9)}(hDPage offset into the **file** if file-backed, should be 0 otherwise.h](hPage offset into the }(hj̠hhhNhNubjz)}(h**file**h]hfile}(hjԠhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̠ubh' if file-backed, should be 0 otherwise.}(hj̠hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjȠhMEhjɠubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȠhMEhj=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]j?)}(hjh]hunsigned long *populate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMIhjubj)}(hhh]j9)}(hA 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]hA 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj=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]j?)}(hj8h]hstruct list_head *uf}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMLhj2ubj)}(hhh]j9)}(hAn 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]hAn 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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMJhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMLhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMNhj!ubj9)}(hThis 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](hKThis function does not perform security checks on the file and assumes, if }(hjhhhNhNubjz)}(h**uf**h]huf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX is non-NULL, the caller has provided a list head to track unmap events for userfaultfd }(hjhhhNhNubjz)}(h**uf**h]huf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj!ubj9)}(hIt 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](hJIt also simply indicates whether memory population is required by setting }(hjhhhNhNubjz)}(h **populate**h]hpopulate}(hjšhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhc, which must be non-NULL, expecting the caller to actually perform this task itself if appropriate.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj!ubj9)}(hThis 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]hThis 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ޡhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM"hj!ubj9)}(hoCallers which require userland mmap() behaviour should invoke vm_mmap(), which is also exported for module use.h]hoCallers which require userland mmap() behaviour should invoke vm_mmap(), which is also exported for module use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM&hj!ubj9)}(hThose which require this behaviour less security checks, userfaultfd and populate behaviour, and who handle the mmap write lock themselves, should call this function.h]hThose which require this behaviour less security checks, userfaultfd and populate behaviour, and who handle the mmap write lock themselves, should call this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM)hj!ubj9)}(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](hNote that the returned address may reside within a merged VMA if an appropriate merge were to take place, so it doesn’t necessarily specify the start of a VMA, rather only the start of a valid mapped range of length }(hj hhhNhNubjz)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh. bytes, rounded down to the nearest page size.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM-hj!ubj9)}(h2The caller must write-lock current->mm->mmap_lock.h]h2The caller must write-lock current->mm->mmap_lock.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM2hj!ubj9)}(h **Return**h]jz)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM4hj!ubj9)}(hREither an error, or the address at which the requested mapping has been performed.h]hREither an error, or the address at which the requested mapping has been performed.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMNhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"find_vma_intersection (C function)c.find_vma_intersectionhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvstruct vm_area_struct * find_vma_intersection (struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)h]h)}(htstruct vm_area_struct *find_vma_intersection(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj~hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMqubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfind_vma_intersectionsbc.find_vma_intersectionasbuh1hhj~hhhjhMqubj)}(h h]h }(hj¢hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMqubj2 )}(hj5 h]h*}(hjТhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj~hhhjhMqubh)}(hfind_vma_intersectionh]h)}(hjh]hfind_vma_intersection}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݢubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhjhMqubj)}(hH(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)h](j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.find_vma_intersectionasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjFhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmmh]hmm}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long start_addrh](j)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(h start_addrh]h start_addr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long end_addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjˣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj٣hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hend_addrh]hend_addr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj~hhhjhMqubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjhMqubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1hhjhMqhjwhhubj )}(hhh]j9)}(h3Look up the first VMA which intersects the intervalh]h3Look up the first VMA which intersects the interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMqubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMuhj;ubj)}(hhh](j)}(h4``struct mm_struct *mm`` The process address space. h](j)}(h``struct mm_struct *mm``h]j?)}(hj`h]hstruct mm_struct *mm}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMrhjZubj)}(hhh]j9)}(hThe process address space.h]hThe process address space.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMrhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMrhjWubj)}(h?``unsigned long start_addr`` The inclusive start user address. h](j)}(h``unsigned long start_addr``h]j?)}(hjh]hunsigned long start_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMshjubj)}(hhh]j9)}(h!The inclusive start user address.h]h!The inclusive start user address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjWubj)}(h;``unsigned long end_addr`` The exclusive end user address. h](j)}(h``unsigned long end_addr``h]j?)}(hjҤh]hunsigned long end_addr}(hjԤhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjФubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMthj̤ubj)}(hhh]j9)}(hThe exclusive end user address.h]hThe exclusive end user address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMthjubah}(h]h ]h"]h$]h&]uh1jhj̤ubeh}(h]h ]h"]h$]h&]uh1jhjhMthjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMvhj;ubj9)}(h\The first VMA within the provided range, ``NULL`` otherwise. Assumes start_addr < end_addr.h](h)The first VMA within the provided range, }(hj#hhhNhNubj?)}(h``NULL``h]hNULL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubh+ otherwise. Assumes start_addr < end_addr.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMvhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_vma (C function) c.find_vmahNtauh1hhj qhhhNhNubh)}(hhh](h)}(hKstruct vm_area_struct * find_vma (struct mm_struct *mm, unsigned long addr)h]h)}(hIstruct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)h](j!)}(hj$h]hstruct}(hjdhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjqhMubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfind_vmasb c.find_vmaasbuh1hhj`hhhjqhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjqhMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`hhhjqhMubh)}(hfind_vmah]h)}(hjh]hfind_vma}(hjåhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjqhMubj)}(h*(struct mm_struct *mm, unsigned long addr)h](j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjޥhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjڥubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڥubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.find_vmaasbuh1hhjڥubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڥubj2 )}(hj5 h]h*}(hj(hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjڥubh)}(hmmh]hmm}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڥubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֥ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hlongh]hlong}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֥ubeh}(h]h ]h"]h$]h&]jj uh1jhj`hhhjqhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhjqhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1hhjqhMhjYhhubj )}(hhh]j9)}(h2Find the VMA for a given address, or the next VMA.h]h2Find the VMA for a given address, or the next VMA.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjqhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jȦj4jȦj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjҦh]h Parameters}(hjԦhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЦubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj̦ubj)}(hhh](j)}(h0``struct mm_struct *mm`` The mm_struct to check h](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubj)}(hhh]j9)}(hThe mm_struct to checkh]hThe mm_struct to check}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h#``unsigned long addr`` The address h](j)}(h``unsigned long addr``h]j?)}(hj*h]hunsigned long addr}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj$ubj)}(hhh]j9)}(h The addressh]h The address}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubeh}(h]h ]h"]h$]h&]uh1jhj̦ubj9)}(h **Return**h]jz)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj̦ubj9)}(hjThe 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 }(hj{hhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh( in the case of no VMA at addr or above.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj̦ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_vma_prev (C function)c.find_vma_prevhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hostruct vm_area_struct * find_vma_prev (struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)h]h)}(hmstruct vm_area_struct *find_vma_prev(struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMubj)}(h h]h }(hjʧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjɧhMubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjۧhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjاubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjݧmodnameN classnameNj\j_)}jb]je)}jX find_vma_prevsbc.find_vma_prevasbuh1hhjhhhjɧhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjɧhMubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjɧhMubh)}(h find_vma_prevh]h)}(hjh]h find_vma_prev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjɧhMubj)}(hI(struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)h](j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hj6hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjVmodnameN classnameNj\j_)}jb]jc.find_vma_prevasbuh1hhj2ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj2ubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj.ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj¨hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjШhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjިhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj.ubj)}(hstruct vm_area_struct **pprevh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.find_vma_prevasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjAhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubj2 )}(hj5 h]h*}(hjNhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpprevh]hpprev}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj.ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjɧhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjɧhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjɧhMhjhhubj )}(hhh]j9)}(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 }(hjhhhNhNubj?)}(h ``pprev``h]hpprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh to the previous VMA, if any.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjɧhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubj)}(hhh](j)}(h0``struct mm_struct *mm`` The mm_struct to check h](j)}(h``struct mm_struct *mm``h]j?)}(hjةh]hstruct mm_struct *mm}(hjکhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj֩ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjҩubj)}(hhh]j9)}(hThe mm_struct to checkh]hThe mm_struct to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҩubeh}(h]h ]h"]h$]h&]uh1jhjhMhjϩubj)}(h#``unsigned long addr`` The address h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj ubj)}(hhh]j9)}(h The addressh]h The address}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjϩubj)}(hI``struct vm_area_struct **pprev`` The pointer to set to the previous VMA h](j)}(h!``struct vm_area_struct **pprev``h]j?)}(hjJh]hstruct vm_area_struct **pprev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjDubj)}(hhh]j9)}(h&The pointer to set to the previous VMAh]h&The pointer to set to the previous VMA}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjϩubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubj9)}(hRNote that RCU lock is missing here since the external mmap_lock() is used instead.h]hRNote that RCU lock is missing here since the external mmap_lock() is used instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubj9)}(hnThe VMA associated with **addr**, or the next vma. May return ``NULL`` in the case of no vma at addr or above.h](hThe VMA associated with }(hjªhhhNhNubjz)}(h**addr**h]haddr}(hjʪhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjªubh, or the next vma. May return }(hjªhhhNhNubj?)}(h``NULL``h]hNULL}(hjܪhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjªubh( in the case of no vma at addr or above.}(hjªhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_alloc (C function)c.kmemleak_allochNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRvoid __ref kmemleak_alloc (const void *ptr, size_t size, int min_count, gfp_t gfp)h]h)}(hQvoid __ref kmemleak_alloc(const void *ptr, size_t size, int min_count, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM'ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM'ubh__ref}(hjhhhNhNubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM'ubh)}(hkmemleak_alloch]h)}(hkmemleak_alloch]hkmemleak_alloc}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj#hM'ubj)}(h8(const void *ptr, size_t size, int min_count, gfp_t gfp)h](j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjdhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`ubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjīhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjƫmodnameN classnameNj\j_)}jb]je)}jXjJsbc.kmemleak_allocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(h int min_counth](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h min_counth]h min_count}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjEmodnameN classnameNj\j_)}jb]jc.kmemleak_allocasbuh1hhj<ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hgfph]hgfp}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj\ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj#hM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj#hM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj#hM'hj hhubj )}(hhh]j9)}(h!register a newly allocated objecth]h!register a newly allocated object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM'hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hM'ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM+hjubj)}(hhh](j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hjڬh]hconst void *ptr}(hjܬhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjجubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM(hjԬubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjԬubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjѬubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM)hj ubj)}(hhh]j9)}(hsize of the objecth]hsize of the object}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hM)hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM)hjѬ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]j?)}(hjLh]h int min_count}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM.hjFubj)}(hhh]j9)}(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](hhminimum number of references to this object. If during memory scanning a number of references less than }(hjehhhNhNubjz)}(h **min_count**h]h min_count}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh7 is found, the object is reported as a memory leak. If }(hjehhhNhNubjz)}(h **min_count**h]h min_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh2 is 0, the object is never reported as a leak. If }(hjehhhNhNubjz)}(h **min_count**h]h min_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubhF is -1, the object is ignored (not scanned and not reported as a leak)}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM*hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM.hjѬubj)}(hL``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM/hjubj)}(hhh]j9)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hjխhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjѭhM/hjҭubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѭhM/hjѬubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM1hjubj9)}(hThis function is called from the kernel allocators when a new object (memory block) is allocated (kmem_cache_alloc, kmalloc etc.).h]hThis function is called from the kernel allocators when a new object (memory block) is allocated (kmem_cache_alloc, kmalloc etc.).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kmemleak_alloc_percpu (C function)c.kmemleak_alloc_percpuhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSvoid __ref kmemleak_alloc_percpu (const void __percpu *ptr, size_t size, gfp_t gfp)h]h)}(hRvoid __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM?ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhM?ubh__ref}(hj8hhhNhNubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhM?ubh)}(hkmemleak_alloc_percpuh]h)}(hkmemleak_alloc_percpuh]hkmemleak_alloc_percpu}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjJhM?ubj)}(h2(const void __percpu *ptr, size_t size, gfp_t gfp)h](j)}(hconst void __percpu *ptrh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__percpu}(hjhhhNhNubj)}(h h]h }(hjƮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjԮhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjqsbc.kmemleak_alloc_percpuasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjImodnameN classnameNj\j_)}jb]jc.kmemleak_alloc_percpuasbuh1hhj@ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hgfph]hgfp}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhjJhM?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjJhM?ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhjJhM?hj1hhubj )}(hhh]j9)}(h*register a newly allocated __percpu objecth]h*register a newly allocated __percpu object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhM?ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMChjubj)}(hhh](j)}(hI``const void __percpu *ptr`` __percpu pointer to beginning of the object h](j)}(h``const void __percpu *ptr``h]j?)}(hjޯh]hconst void __percpu *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjܯubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM@hjدubj)}(hhh]j9)}(h+__percpu pointer to beginning of the objecth]h+__percpu pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjدubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjկubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMAhjubj)}(hhh]j9)}(hsize of the objecth]hsize of the object}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMAhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMAhjկubj)}(hB``gfp_t gfp`` flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j?)}(hjPh]h gfp_t gfp}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMBhjJubj)}(hhh]j9)}(h3flags used for kmemleak internal memory allocationsh]h3flags used for kmemleak internal memory allocations}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMBhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMBhjկubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMDhjubj9)}(hvThis function is called from the kernel percpu allocator when a new object (memory block) is allocated (alloc_percpu).h]hvThis function is called from the kernel percpu allocator when a new object (memory block) is allocated (alloc_percpu).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_vmalloc (C function)c.kmemleak_vmallochNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRvoid __ref kmemleak_vmalloc (const struct vm_struct *area, size_t size, gfp_t gfp)h]h)}(hQvoid __ref kmemleak_vmalloc(const struct vm_struct *area, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjаhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̰hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMRubj)}(h h]h }(hj߰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̰hhhjްhMRubh__ref}(hj̰hhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̰hhhjްhMRubh)}(hkmemleak_vmalloch]h)}(hkmemleak_vmalloch]hkmemleak_vmalloc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj̰hhhjްhMRubj)}(h6(const struct vm_struct *area, size_t size, gfp_t gfp)h](j)}(hconst struct vm_struct *areah](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hj:hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h vm_structh]h vm_struct}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjZmodnameN classnameNj\j_)}jb]je)}jXjsbc.kmemleak_vmallocasbuh1hhjubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hareah]harea}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jtc.kmemleak_vmallocasbuh1hhjubj)}(h h]h }(hjͱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hj۱hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jtc.kmemleak_vmallocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj̰hhhjްhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjȰhhhjްhMRubah}(h]jðah ](jjeh"]h$]h&]jj)jhuh1hhjްhMRhjŰhhubj )}(hhh]j9)}(h"register a newly vmalloc'ed objecth]h$register a newly vmalloc’ed object}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMRhjJhhubah}(h]h ]h"]h$]h&]uh1jhjŰhhhjްhMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMVhjiubj)}(hhh](j)}(h6``const struct vm_struct *area`` pointer to vm_struct h](j)}(h ``const struct vm_struct *area``h]j?)}(hjh]hconst struct vm_struct *area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMShjubj)}(hhh]j9)}(hpointer to vm_structh]hpointer to vm_struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j?)}(hjDzh]h size_t size}(hjɲhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjŲubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMThjubj)}(hhh]j9)}(hsize of the objecth]hsize of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjܲhMThjݲubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܲhMThjubj)}(hN``gfp_t gfp`` __vmalloc() flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMUhjubj)}(hhh]j9)}(h?__vmalloc() flags used for kmemleak internal memory allocationsh]h?__vmalloc() flags used for kmemleak internal memory allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubeh}(h]h ]h"]h$]h&]uh1jhjiubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMWhjiubj9)}(hjThis function is called from the vmalloc() kernel allocator when a new object (memory block) is allocated.h]hjThis function is called from the vmalloc() kernel allocator when a new object (memory block) is allocated.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMWhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_free (C function)c.kmemleak_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h*void __ref kmemleak_free (const void *ptr)h]h)}(h)void __ref kmemleak_free(const void *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMkubh__ref}(hj|hhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMkubh)}(h kmemleak_freeh]h)}(h kmemleak_freeh]h kmemleak_free}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|hhhjhMkubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjϳhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj˳ubj)}(h h]h }(hjܳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˳ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj˳ubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˳ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjdzubah}(h]h ]h"]h$]h&]jj uh1jhj|hhhjhMkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjhMkubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1hhjhMkhjuhhubj )}(hhh]j9)}(h)unregister a previously registered objecth]h)unregister a previously registered object}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMkhj:hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMkubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jUj4jUj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMohjYubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hj~h]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMlhjxubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjuubah}(h]h ]h"]h$]h&]uh1jhjYubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMnhjYubj9)}(hThis function is called from the kernel allocators when an object (memory block) is freed (kmem_cache_free, kfree, vfree etc.).h]hThis function is called from the kernel allocators when an object (memory block) is freed (kmem_cache_free, kfree, vfree etc.).}(hjϴhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMnhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_free_part (C function)c.kmemleak_free_parthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h ah"]h$]h&]uh1j1 hjIubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj3sbc.kmemleak_free_partasbuh1hhjubj)}(h h]h }(hj͵hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hj۵hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM{ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hM{hjhhubj )}(hhh]j9)}(h3partially unregister a previously registered objecth]h3partially unregister a previously registered object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM{hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM{ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj!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]j?)}(hjFh]hconst void *ptr}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM}hj@ubj)}(hhh]j9)}(hfpointer to the beginning or inside the object. This also represents the start of the range to be freedh]hfpointer to the beginning or inside the object. This also represents the start of the range to be freed}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM|hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM}hj=ubj)}(h(``size_t size`` size to be unregistered h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM~hjzubj)}(hhh]j9)}(hsize to be unregisteredh]hsize to be unregistered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM~hj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj!ubj9)}(hiThis function is called when only a part of a memory block is freed (usually from the bootmem allocator).h]hiThis function is called when only a part of a memory block is freed (usually from the bootmem allocator).}(hjѶhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmemleak_free_percpu (C function)c.kmemleak_free_percpuhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h:void __ref kmemleak_free_percpu (const void __percpu *ptr)h]h)}(h9void __ref kmemleak_free_percpu(const void __percpu *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hjhhhNhNubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_free_percpuh]h)}(hkmemleak_free_percpuh]hkmemleak_free_percpu}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const void __percpu *ptr)h]j)}(hconst void __percpu *ptrh](j!)}(hjeh]hconst}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh__percpu}(hjKhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjKubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjGubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h2unregister a previously registered __percpu objecth]h2unregister a previously registered __percpu object}(hjϷhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj̷hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j)}(hI``const void __percpu *ptr`` __percpu pointer to beginning of the object h](j)}(h``const void __percpu *ptr``h]j?)}(hjh]hconst void __percpu *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj ubj)}(hhh]j9)}(h+__percpu pointer to beginning of the objecth]h+__percpu pointer to beginning of the object}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj9)}(hnThis function is called from the kernel percpu allocator when an object (memory block) is freed (free_percpu).h]hnThis function is called from the kernel percpu allocator when an object (memory block) is freed (free_percpu).}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kmemleak_update_trace (C function)c.kmemleak_update_tracehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2void __ref kmemleak_update_trace (const void *ptr)h]h)}(h1void __ref kmemleak_update_trace(const void *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_update_traceh]h)}(hkmemleak_update_traceh]hkmemleak_update_trace}(hjøhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hj߸hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj۸ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۸ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۸ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۸ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj۸ubh)}(hptrh]hptr}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj۸ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj׸ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h$update object allocation stack traceh]h$update object allocation stack trace}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjiubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hjh]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubj9)}(h**Description**h]jz)}(hjɹh]h Description}(hj˹hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǹubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjiubj9)}(hlOverride the object allocation stack trace for cases where the actual allocation place is not always useful.h]hlOverride the object allocation stack trace for cases where the actual allocation place is not always useful.}(hj߹hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_not_leak (C function)c.kmemleak_not_leakhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h.void __ref kmemleak_not_leak (const void *ptr)h]h)}(h-void __ref kmemleak_not_leak(const void *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubh__ref}(hj hhhNhNubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubh)}(hkmemleak_not_leakh]h)}(hkmemleak_not_leakh]hkmemleak_not_leak}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hj]hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjUubah}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h*mark an allocated object as false positiveh]h*mark an allocated object as false positive}(hj˺hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjȺhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hj h]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj9)}(hvCalling this function on an object will cause the memory block to no longer be reported as leak and always be scanned.h]hvCalling this function on an object will cause the memory block to no longer be reported as leak and always be scanned.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$kmemleak_transient_leak (C function)c.kmemleak_transient_leakhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4void __ref kmemleak_transient_leak (const void *ptr)h]h)}(h3void __ref kmemleak_transient_leak(const void *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_transient_leakh]h)}(hkmemleak_transient_leakh]hkmemleak_transient_leak}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjۻhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj׻ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׻ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׻ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׻ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj׻ubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj׻ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjӻubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h4mark an allocated object as transient false positiveh]h4mark an allocated object as transient false positive}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjeubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hjh]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjżh]h Description}(hjǼhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjüubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjeubj9)}(hCalling 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]hCalling 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ۼhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kmemleak_ignore_percpu (C function)c.kmemleak_ignore_percpuhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h ah"]h$]h&]uh1j1 hjUubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h?similar to kmemleak_ignore but taking a percpu address argumenth]h?similar to kmemleak_ignore but taking a percpu address argument}(hjٽhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjֽhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hK**Parameters** ``const void __percpu *ptr`` percpu address of the objecth](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j)}(h9``const void __percpu *ptr`` percpu address of the objecth](j)}(h``const void __percpu *ptr``h]j?)}(hjh]hconst void __percpu *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(hpercpu address of the objecth]hpercpu address of the object}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_ignore (C function)c.kmemleak_ignorehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h,void __ref kmemleak_ignore (const void *ptr)h]h)}(h+void __ref kmemleak_ignore(const void *ptr)h](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMubh__ref}(hjphhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMubh)}(hkmemleak_ignoreh]h)}(hkmemleak_ignoreh]hkmemleak_ignore}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhMubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjþhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjоhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hj޾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjihhubj )}(hhh]j9)}(hignore an allocated objecth]hignore an allocated object}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjMubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hjrh]hconst void *ptr}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjlubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjMubj9)}(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ÿhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_scan_area (C function)c.kmemleak_scan_areahNtauh1hhj qhhhNhNubh)}(hhh](h)}(hGvoid __ref kmemleak_scan_area (const void *ptr, size_t size, gfp_t gfp)h]h)}(hFvoid __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_scan_areah]h)}(hkmemleak_scan_areah]hkmemleak_scan_area}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h)(const void *ptr, size_t size, gfp_t gfp)h](j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2 )}(hj5 h]h*}(hjxhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=ubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj'sbc.kmemleak_scan_areaasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.kmemleak_scan_areaasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h4limit the range to be scanned in an allocated objecth]h4limit the range to be scanned in an allocated object}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jYj4jYj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj]ubj)}(hhh](j)}(ho``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]j?)}(hjh]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj|ubj)}(hhh]j9)}(hZpointer to beginning or inside the object. This also represents the start of the scan areah]hZpointer to beginning or inside the object. This also represents the start of the scan area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h&``size_t size`` size of the scan area h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(hsize of the scan areah]hsize of the scan area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(hL``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh]j9)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj]ubj9)}(hThis 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]hThis 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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_no_scan (C function)c.kmemleak_no_scanhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h-void __ref kmemleak_no_scan (const void *ptr)h]h)}(h,void __ref kmemleak_no_scan(const void *ptr)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubh__ref}(hjqhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubh)}(hkmemleak_no_scanh]h)}(hkmemleak_no_scanh]hkmemleak_no_scan}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMubj)}(h(const void *ptr)h]j)}(hconst void *ptrh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjjhhubj )}(hhh]j9)}(hdo not scan an allocated objecth]hdo not scan an allocated object}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jJj4jJj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjNubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j?)}(hjsh]hconst void *ptr}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjmubj)}(hhh]j9)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjNubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kmemleak_alloc_phys (C function)c.kmemleak_alloc_physhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hIvoid __ref kmemleak_alloc_phys (phys_addr_t phys, size_t size, gfp_t gfp)h]h)}(hHvoid __ref kmemleak_alloc_phys(phys_addr_t phys, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM(ubh__ref}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM(ubh)}(hkmemleak_alloc_physh]h)}(hkmemleak_alloc_physh]hkmemleak_alloc_phys}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM(ubj)}(h*(phys_addr_t phys, size_t size, gfp_t gfp)h](j)}(hphys_addr_t physh](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjGmodnameN classnameNj\j_)}jb]je)}jXj(sbc.kmemleak_alloc_physasbuh1hhj>ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hphysh]hphys}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jac.kmemleak_alloc_physasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jac.kmemleak_alloc_physasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM(hjhhubj )}(hhh]j9)}(h@similar to kmemleak_alloc but taking a physical address argumenth]h@similar to kmemleak_alloc but taking a physical address argument}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM(hj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj qhNhNubjp)}(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 allocationsh](j9)}(h**Parameters**h]jz)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM,hjIubj)}(hhh](j)}(h4``phys_addr_t phys`` physical address of the object h](j)}(h``phys_addr_t phys``h]j?)}(hjnh]hphys_addr_t phys}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM*hjhubj)}(hhh]j9)}(hphysical address of the objecth]hphysical address of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjeubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM+hjubj)}(hhh]j9)}(hsize of the objecth]hsize of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjeubj)}(hK``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocationsh](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM-hjubj)}(hhh]j9)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjeubeh}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$kmemleak_free_part_phys (C function)c.kmemleak_free_part_physhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hBvoid __ref kmemleak_free_part_phys (phys_addr_t phys, size_t size)h]h)}(hAvoid __ref kmemleak_free_part_phys(phys_addr_t phys, size_t size)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM<ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhM<ubh__ref}(hj6hhhNhNubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhM<ubh)}(hkmemleak_free_part_physh]h)}(hkmemleak_free_part_physh]hkmemleak_free_part_phys}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhjHhM<ubj)}(h(phys_addr_t phys, size_t size)h](j)}(hphys_addr_t physh](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjosbc.kmemleak_free_part_physasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hphysh]hphys}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.kmemleak_free_part_physasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj6hhhjHhM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhjHhM<ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1hhjHhM<hj/hhubj )}(hhh]j9)}(hDsimilar to kmemleak_free_part but taking a physical address argumenth]hDsimilar to kmemleak_free_part but taking a physical address argument}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM<hj)hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhM<ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhj qhNhNubjp)}(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 unregisteredh](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM@hjHubj)}(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]j?)}(hjmh]hphys_addr_t phys}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM?hjgubj)}(hhh]j9)}(hnphysical address if the beginning or inside an object. This also represents the start of the range to be freedh]hnphysical address if the beginning or inside an object. This also represents the start of the range to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM>hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjdubj)}(h'``size_t size`` size to be unregisteredh](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMAhjubj)}(hhh]j9)}(hsize to be unregisteredh]hsize to be unregistered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmemleak_ignore_phys (C function)c.kmemleak_ignore_physhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2void __ref kmemleak_ignore_phys (phys_addr_t phys)h]h)}(h1void __ref kmemleak_ignore_phys(phys_addr_t phys)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMLubh__ref}(hjhhhNhNubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMLubh)}(hkmemleak_ignore_physh]h)}(hkmemleak_ignore_physh]hkmemleak_ignore_phys}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMLubj)}(h(phys_addr_t phys)h]j)}(hphys_addr_t physh](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUmodnameN classnameNj\j_)}jb]je)}jXj6sbc.kmemleak_ignore_physasbuh1hhjLubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hphysh]hphys}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjHubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMLhjhhubj )}(hhh]j9)}(hAsimilar to kmemleak_ignore but taking a physical address argumenth]hAsimilar to kmemleak_ignore but taking a physical address argument}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMLubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hE**Parameters** ``phys_addr_t phys`` physical address of the objecth](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMPhjubj)}(hhh]j)}(h3``phys_addr_t phys`` physical address of the objecth](j)}(h``phys_addr_t phys``h]j?)}(hjh]hphys_addr_t phys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMRhjubj)}(hhh]j9)}(hphysical address of the objecth]hphysical address of the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubhcomment)}(h'#kernel-doc:: mm/hmm.c (build warnings)h]h'#kernel-doc:: mm/hmm.c (build warnings)}hj/sbah}(h]h ]h"]h$]h&]jj uh1j-hj qhhhhhK{ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_memremap_pages (C function)c.devm_memremap_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hJvoid * devm_memremap_pages (struct device *dev, struct dev_pagemap *pgmap)h]h)}(hHvoid *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjdhMubj2 )}(hj5 h]h*}(hjshhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRhhhjdhMubh)}(hdevm_memremap_pagesh]h)}(hdevm_memremap_pagesh]hdevm_memremap_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjdhMubj)}(h/(struct device *dev, struct dev_pagemap *pgmap)h](j)}(hstruct device *devh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.devm_memremap_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct dev_pagemap *pgmaph](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj2modnameN classnameNj\j_)}jb]jc.devm_memremap_pagesasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpgmaph]hpgmap}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjdhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhjdhMhjKhhubj )}(hhh]j9)}(h7remap and provide memmap backing for the given resourceh]h7remap and provide memmap backing for the given resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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 **Description** 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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh](j)}(h2``struct device *dev`` hosting device for **res** h](j)}(h``struct device *dev``h]j?)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j9)}(hhosting device for **res**h](hhosting device for }(hjhhhNhNubjz)}(h**res**h]hres}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``struct dev_pagemap *pgmap`` pointer to a struct dev_pagemap h](j)}(h``struct dev_pagemap *pgmap``h]j?)}(hjh]hstruct dev_pagemap *pgmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j9)}(hpointer to a struct dev_pagemaph]hpointer to a struct dev_pagemap}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Notes**h]jz)}(hjVh]hNotes}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(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)}(hK1/ At a minimum the range and type members of **pgmap** must be initializedh](h.1/ At a minimum the range and type members of }(hjshhhNhNubjz)}(h **pgmap**h]hpgmap}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh must be initialized}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjoubj)}(hhh]j9)}(h0by the caller before passing it to this functionh]h0by the caller before passing it to this function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh](j)}(hq2/ 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 caseh]h@2/ The altmap field may optionally be initialized, in which case}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j9)}(h/PGMAP_ALTMAP_VALID must be set in pgmap->flags.h]h/PGMAP_ALTMAP_VALID must be set in pgmap->flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3/ 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)}(hH3/ The ref field may optionally be provided, in which pgmap->ref must beh]hH3/ The ref field may optionally be provided, in which pgmap->ref must be}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j9)}(hn'live' on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails.h]hr‘live’ on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4/ 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)}(hE4/ range is expected to be a host memory range that could feasibly beh]hE4/ range is expected to be a host memory range that could feasibly be}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhj3ubj)}(hhh]j9)}(hXtreated 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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_dev_pagemap (C function)c.get_dev_pagemaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSstruct dev_pagemap * get_dev_pagemap (unsigned long pfn, struct dev_pagemap *pgmap)h]h)}(hQstruct dev_pagemap *get_dev_pagemap(unsigned long pfn, struct dev_pagemap *pgmap)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXget_dev_pagemapsbc.get_dev_pagemapasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hget_dev_pagemaph]h)}(hjh]hget_dev_pagemap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h.(unsigned long pfn, struct dev_pagemap *pgmap)h](j)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct dev_pagemap *pgmaph](j!)}(hj$h]hstruct}(hjThhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]jc.get_dev_pagemapasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjPubh)}(hpgmaph]hpgmap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj~hhubj )}(hhh]j9)}(h8take a new live reference on the dev_pagemap for **pfn**h](h1take a new live reference on the dev_pagemap for }(hjhhhNhNubjz)}(h**pfn**h]hpfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXS**Parameters** ``unsigned long pfn`` page frame number to lookup page_map ``struct dev_pagemap *pgmap`` optional known pgmap that already has a reference **Description** If **pgmap** is non-NULL and covers **pfn** it will be returned as-is. If **pgmap** is non-NULL but does not cover **pfn** the reference to it will be released.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh](j)}(h;``unsigned long pfn`` page frame number to lookup page_map h](j)}(h``unsigned long pfn``h]j?)}(hj$h]hunsigned long pfn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j9)}(h$page frame number to lookup page_maph]h$page frame number to lookup page_map}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(hP``struct dev_pagemap *pgmap`` optional known pgmap that already has a reference h](j)}(h``struct dev_pagemap *pgmap``h]j?)}(hj]h]hstruct dev_pagemap *pgmap}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjWubj)}(hhh]j9)}(h1optional known pgmap that already has a referenceh]h1optional known pgmap that already has a reference}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj9)}(hIf **pgmap** is non-NULL and covers **pfn** it will be returned as-is. If **pgmap** is non-NULL but does not cover **pfn** the reference to it will be released.h](hIf }(hjhhhNhNubjz)}(h **pgmap**h]hpgmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is non-NULL and covers }(hjhhhNhNubjz)}(h**pfn**h]hpfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh it will be returned as-is. If }(hjhhhNhNubjz)}(h **pgmap**h]hpgmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is non-NULL but does not cover }(hjhhhNhNubjz)}(h**pfn**h]hpfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh& the reference to it will be released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ vma_kernel_pagesize (C function)c.vma_kernel_pagesizehNtauh1hhj qhhhNhNubh)}(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)}(hunsignedh]hunsigned}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubj)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubh)}(hvma_kernel_pagesizeh]h)}(hvma_kernel_pagesizeh]hvma_kernel_pagesize}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj3hMubj)}(h(struct vm_area_struct *vma)h]j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj~hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjdsbc.vma_kernel_pagesizeasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjzubh)}(hvmah]hvma}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjvubah}(h]h ]h"]h$]h&]jj uh1jhj!hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj3hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj3hMhjhhubj )}(hhh]j9)}(h#Page size granularity for this VMA.h]h#Page size granularity for this VMA.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX **Parameters** ``struct vm_area_struct *vma`` The user mapping. **Description** Folios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function. **Return** The default size of the folios allocated when backing a VMA.h](j9)}(h**Parameters**h]jz)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM hjubj)}(hhh]j)}(h1``struct vm_area_struct *vma`` The user mapping. h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjBh]hstruct vm_area_struct *vma}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM hj<ubj)}(hhh]j9)}(hThe user mapping.h]hThe user mapping.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM hjubj9)}(hnFolios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function.h]hnFolios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjubj9)}(h ah"]h$]h&]uh1j1 hj!ubh)}(hfolioh]hfolio}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct list_head *listh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j_c.folio_isolate_hugetlbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMNubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMNhjhhubj )}(hhh]j9)}(h)try to isolate an allocated hugetlb folioh]h)try to isolate an allocated hugetlb folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMNubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j0j4j0j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMRhj4ubj)}(hhh](j)}(h-``struct folio *folio`` the folio to isolate h](j)}(h``struct folio *folio``h]j?)}(hjYh]hstruct folio *folio}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMOhjSubj)}(hhh]j9)}(hthe folio to isolateh]hthe folio to isolate}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMOhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMOhjPubj)}(hC``struct list_head *list`` the list to add the folio to on success h](j)}(h``struct list_head *list``h]j?)}(hjh]hstruct list_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMPhjubj)}(hhh]j9)}(h'the list to add the folio to on successh]h'the list to add the folio to on success}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMRhj4ubj9)}(hIsolate an allocated (refcount > 0) hugetlb folio, marking it as isolated/non-migratable, and moving it from the active list to the given list.h]hIsolate an allocated (refcount > 0) hugetlb folio, marking it as isolated/non-migratable, and moving it from the active list to the given list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMRhj4ubj9)}(hpIsolation will fail if **folio** is not an allocated hugetlb folio, or if it is already isolated/non-migratable.h](hIsolation will fail if }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhP is not an allocated hugetlb folio, or if it is already isolated/non-migratable.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMVhj4ubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMYhj4ubj9)}(h **Return**h]jz)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM\hj4ubj9)}(h*True if isolation worked, otherwise False.h]h*True if isolation worked, otherwise False.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chM\hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"folio_putback_hugetlb (C function)c.folio_putback_hugetlbhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h0void folio_putback_hugetlb (struct folio *folio)h]h)}(h/void folio_putback_hugetlb(struct folio *folio)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubh)}(hfolio_putback_hugetlbh]h)}(hfolio_putback_hugetlbh]hfolio_putback_hugetlb}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjwhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_putback_hugetlbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhjwhMhj^hhubj )}(hhh]j9)}(hunisolate a hugetlb folioh]hunisolate a hugetlb folio}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjEubj)}(hhh]j)}(h3``struct folio *folio`` the isolated hugetlb folio h](j)}(h``struct folio *folio``h]j?)}(hjjh]hstruct folio *folio}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjdubj)}(hhh]j9)}(hthe isolated hugetlb folioh]hthe isolated hugetlb folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjEubj9)}(hPutback/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]hPutback/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjEubj9)}(hRWill drop the additional folio reference obtained through folio_isolate_hugetlb().h]hRWill drop the additional folio reference obtained through folio_isolate_hugetlb().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_mark_accessed (C function)c.folio_mark_accessedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h.void folio_mark_accessed (struct folio *folio)h]h)}(h-void folio_mark_accessed(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_mark_accessedh]h)}(hfolio_mark_accessedh]hfolio_mark_accessed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj6hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]h)}(hfolioh]hfolio}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjVmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_mark_accessedasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj2ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj.ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%Mark a folio as having seen activity.h]h%Mark a folio as having seen activity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j)}(h+``struct folio *folio`` The folio to mark. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(hThe folio to mark.h]hThe folio to mark.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj9)}(h inactive,referencedh]j9)}(hj_h]h6inactive,unreferenced -> inactive,referenced}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj]ubah}(h]h ]h"]h$]h&]uh1j+hjZubj+)}(h6inactive,referenced -> active,unreferencedh]j9)}(hjwh]h6inactive,referenced -> active,unreferenced}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjuubah}(h]h ]h"]h$]h&]uh1j+hjZubj+)}(h5active,unreferenced -> active,referenced h]j9)}(h4active,unreferenced -> active,referencedh]h4active,unreferenced -> active,referenced}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubah}(h]h ]h"]h$]h&]uh1j+hjZubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjnhMhjubj9)}(hWhen 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]hWhen a newly allocated folio is not yet visible, so safe for non-atomic ops, __folio_set_referenced() may be substituted for folio_mark_accessed().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_add_lru (C function)c.folio_add_lruhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h(void folio_add_lru (struct folio *folio)h]h)}(h'void folio_add_lru(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_add_lruh]h)}(h folio_add_lruh]h folio_add_lru}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_add_lruasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjdhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hAdd a folio to an LRU list.h]hAdd a folio to an LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j)}(h:``struct folio *folio`` The folio to be added to the LRU. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(h!The folio to be added to the LRU.h]h!The folio to be added to the LRU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj9)}(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-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_add_lru_vma (C function)c.folio_add_lru_vmahNtauh1hhj qhhhNhNubh)}(hhh](h)}(hHvoid folio_add_lru_vma (struct folio *folio, struct vm_area_struct *vma)h]h)}(hGvoid folio_add_lru_vma(struct folio *folio, struct vm_area_struct *vma)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjjhMubh)}(hfolio_add_lru_vmah]h)}(hfolio_add_lru_vmah]hfolio_add_lru_vma}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjjhMubj)}(h1(struct folio *folio, struct vm_area_struct *vma)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.folio_add_lru_vmaasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]jc.folio_add_lru_vmaasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjUhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjXhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjjhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1hhjjhMhjQhhubj )}(hhh]j9)}(h3Add a folio to the appropate LRU list for this VMA.h]h3Add a folio to the appropate LRU list for this VMA.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh](j)}(h:``struct folio *folio`` The folio to be added to the LRU. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(h!The folio to be added to the LRU.h]h!The folio to be added to the LRU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``struct vm_area_struct *vma`` VMA in which the folio is mapped. h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(h!VMA in which the folio is mapped.h]h!VMA in which the folio is mapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj9)}(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](hIf the VMA is mlocked, }(hjWhhhNhNubjz)}(h **folio**h]hfolio}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh\ is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"deactivate_file_folio (C function)c.deactivate_file_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(h0void deactivate_file_folio (struct folio *folio)h]h)}(h/void deactivate_file_folio(struct folio *folio)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hdeactivate_file_folioh]h)}(hdeactivate_file_folioh]hdeactivate_file_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.deactivate_file_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj!hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hDeactivate a file folio.h]hDeactivate a file folio.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjtubj)}(hhh]j)}(h-``struct folio *folio`` Folio to deactivate. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(hFolio to deactivate.h]hFolio to deactivate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjtubj9)}(hThis 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 }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubht is a good reclaim candidate, for example if its invalidation fails due to the folio being dirty or under writeback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjtubj9)}(h **Context**h]jz)}(hj h]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjtubj9)}(h&Caller holds a reference on the folio.h]h&Caller holds a reference on the folio.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_mark_lazyfree (C function)c.folio_mark_lazyfreehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h.void folio_mark_lazyfree (struct folio *folio)h]h)}(h-void folio_mark_lazyfree(struct folio *folio)h](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hMubh)}(hfolio_mark_lazyfreeh]h)}(hfolio_mark_lazyfreeh]hfolio_mark_lazyfree}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjusbc.folio_mark_lazyfreeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhj`hMhjGhhubj )}(hhh]j9)}(hmake an anon folio lazyfreeh]hmake an anon folio lazyfree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj.ubj)}(hhh]j)}(h,``struct folio *folio`` folio to deactivate h](j)}(h``struct folio *folio``h]j?)}(hjSh]hstruct folio *folio}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjMubj)}(hhh]j9)}(hfolio to deactivateh]hfolio to deactivate}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj.ubj9)}(hufolio_mark_lazyfree() moves **folio** to the inactive file list. This is done to accelerate the reclaim of **folio**.h](hfolio_mark_lazyfree() moves }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhF to the inactive file list. This is done to accelerate the reclaim of }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolios_put_refs (C function)c.folios_put_refshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hEvoid folios_put_refs (struct folio_batch *folios, unsigned int *refs)h]h)}(hDvoid folios_put_refs(struct folio_batch *folios, unsigned int *refs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolios_put_refsh]h)}(hfolios_put_refsh]hfolios_put_refs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h0(struct folio_batch *folios, unsigned int *refs)h](j)}(hstruct folio_batch *foliosh](j!)}(hj$h]hstruct}(hj4hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjTmodnameN classnameNj\j_)}jb]je)}jXjsbc.folios_put_refsasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj0ubh)}(hfoliosh]hfolios}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj,ubj)}(hunsigned int *refsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hrefsh]hrefs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj,ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h0Reduce the reference count on a batch of folios.h]h0Reduce the reference count on a batch of folios.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj)}(hhh](j)}(h+``struct folio_batch *folios`` The folios. h](j)}(h``struct folio_batch *folios``h]j?)}(hjVh]hstruct folio_batch *folios}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjPubj)}(hhh]j9)}(h The folios.h]h The folios.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubj)}(hG``unsigned int *refs`` The number of refs to subtract from each folio. h](j)}(h``unsigned int *refs``h]j?)}(hjh]hunsigned int *refs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(h/The number of refs to subtract from each folio.h]h/The number of refs to subtract from each folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj9)}(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 }(hjhhhNhNubjz)}(h**refs**h]hrefs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh3 is NULL, we subtract one from each folio refcount.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj9)}(hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.h]hoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrelease_pages (C function)c.release_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2void release_pages (release_pages_arg arg, int nr)h]h)}(h1void release_pages(release_pages_arg arg, int nr)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhMubh)}(h release_pagesh]h)}(h release_pagesh]h release_pages}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjVhMubj)}(h(release_pages_arg arg, int nr)h](j)}(hrelease_pages_arg argh](h)}(hhh]h)}(hrelease_pages_argh]hrelease_pages_arg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjksbc.release_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hargh]harg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubj)}(hint nrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj}ubeh}(h]h ]h"]h$]h&]jj uh1jhjDhhhjVhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@hhhjVhMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1hhjVhMhj=hhubj )}(hhh]j9)}(hbatched put_page()h]hbatched put_page()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhjVhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj)}(hhh](j)}(h4``release_pages_arg arg`` array of pages to release h](j)}(h``release_pages_arg arg``h]j?)}(hjVh]hrelease_pages_arg arg}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjPubj)}(hhh]j9)}(harray of pages to releaseh]harray of pages to release}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubj)}(h``int nr`` number of pages h](j)}(h ``int nr``h]j?)}(hjh]hint nr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j9)}(hnumber of pagesh]hnumber of pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj9)}(hyDecrement the reference count on all the pages in **arg**. If it fell to zero, remove the page from the LRU and free it.h](h2Decrement the reference count on all the pages in }(hjhhhNhNubjz)}(h**arg**h]harg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh@. If it fell to zero, remove the page from the LRU and free it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubj9)}(hNote 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]hNote 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,folio_batch_remove_exceptionals (C function)!c.folio_batch_remove_exceptionalshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hAvoid folio_batch_remove_exceptionals (struct folio_batch *fbatch)h]h)}(h@void folio_batch_remove_exceptionals(struct folio_batch *fbatch)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM!ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj>hM!ubh)}(hfolio_batch_remove_exceptionalsh]h)}(hfolio_batch_remove_exceptionalsh]hfolio_batch_remove_exceptionals}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hM!ubj)}(h(struct folio_batch *fbatch)h]j)}(hstruct folio_batch *fbatchh](j!)}(hj$h]hstruct}(hjmhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjSsb!c.folio_batch_remove_exceptionalsasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjiubh)}(hfbatchh]hfbatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjeubah}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hM!ubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hM!hj%hhubj )}(hhh]j9)}(hPrune non-folios from a batch.h]hPrune non-folios from a batch.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hM!ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM%hj ubj)}(hhh]j)}(h2``struct folio_batch *fbatch`` The batch to prune h](j)}(h``struct folio_batch *fbatch``h]j?)}(hj1h]hstruct folio_batch *fbatch}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM"hj+ubj)}(hhh]j9)}(hThe batch to pruneh]hThe batch to prune}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhM"hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM"hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM$hj ubj9)}(hfind_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](hfind_get_entries() fills a batch with both folios and shadow/swap/DAX entries. This function prunes all the non-folio entries from }(hjhhhNhNubjz)}(h **fbatch**h]hfbatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhS without leaving holes, so that it can be passed on to folio-only batch operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"zpool_register_driver (C function)c.zpool_register_driverhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h8void zpool_register_driver (struct zpool_driver *driver)h]h)}(h7void zpool_register_driver(struct zpool_driver *driver)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hzpool_register_driverh]h)}(hzpool_register_driverh]hzpool_register_driver}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(struct zpool_driver *driver)h]j)}(hstruct zpool_driver *driverh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h zpool_driverh]h zpool_driver}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsbc.zpool_register_driverasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjLhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdriverh]hdriver}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h register a zpool implementation.h]h register a zpool implementation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hD**Parameters** ``struct zpool_driver *driver`` driver to registerh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK"hjubj)}(hhh]j)}(h2``struct zpool_driver *driver`` driver to registerh](j)}(h``struct zpool_driver *driver``h]j?)}(hjh]hstruct zpool_driver *driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK$hjubj)}(hhh]j9)}(hdriver to registerh]hdriver to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$zpool_unregister_driver (C function)c.zpool_unregister_driverhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9int zpool_unregister_driver (struct zpool_driver *driver)h]h)}(h8int zpool_unregister_driver(struct zpool_driver *driver)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK+ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hK+ubh)}(hzpool_unregister_driverh]h)}(hzpool_unregister_driverh]hzpool_unregister_driver}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hK+ubj)}(h(struct zpool_driver *driver)h]j)}(hstruct zpool_driver *driverh](j!)}(hj$h]hstruct}(hj[hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]h)}(h zpool_driverh]h zpool_driver}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj{modnameN classnameNj\j_)}jb]je)}jXjAsbc.zpool_unregister_driverasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjWubh)}(hdriverh]hdriver}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hK+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hK+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj,hK+hjhhubj )}(hhh]j9)}(h"unregister a zpool implementation.h]h"unregister a zpool implementation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK+hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hK+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXn**Parameters** ``struct zpool_driver *driver`` driver to unregister. **Description** Module usage counting is used to prevent using a driver while/after unloading, so if this is called from module exit function, this should never fail; if called from other than the module exit function, and this returns failure, the driver is in use and must remain available.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK/hjubj)}(hhh]j)}(h6``struct zpool_driver *driver`` driver to unregister. h](j)}(h``struct zpool_driver *driver``h]j?)}(hjh]hstruct zpool_driver *driver}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK,hjubj)}(hhh]j9)}(hdriver to unregister.h]hdriver to unregister.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hK,hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hK,hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK.hjubj9)}(hXModule usage counting is used to prevent using a driver while/after unloading, so if this is called from module exit function, this should never fail; if called from other than the module exit function, and this returns failure, the driver is in use and must remain available.h]hXModule usage counting is used to prevent using a driver while/after unloading, so if this is called from module exit function, this should never fail; if called from other than the module exit function, and this returns failure, the driver is in use and must remain available.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_has_pool (C function)c.zpool_has_poolhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h bool zpool_has_pool (char *type)h]h)}(hbool zpool_has_pool(char *type)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKaubh)}(hzpool_has_poolh]h)}(hzpool_has_poolh]hzpool_has_pool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKaubj)}(h (char *type)h]j)}(h char *typeh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(htypeh]htype}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKaubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKahjhhubj )}(hhh]j9)}(h%Check if the pool driver is availableh]h%Check if the pool driver is available}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKahj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKaubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhj qhNhNubjp)}(hX***Parameters** ``char *type`` The type of the zpool to check (e.g. zsmalloc) **Description** This checks if the **type** pool driver is available. This will try to load the requested module, if needed, but there is no guarantee the module will still be loaded and available immediately after calling. If this returns true, the caller should assume the pool is available, but must be prepared to handle the **zpool_create_pool\(\)** returning failure. However if this returns false, the caller should assume the requested pool type is not available; either the requested pool type module does not exist, or could not be loaded, and calling **zpool_create_pool\(\)** with the pool type will fail. The **type** string must be null-terminated. **Return** true if **type** pool is available, false if noth](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKehjJubj)}(hhh]j)}(h>``char *type`` The type of the zpool to check (e.g. zsmalloc) h](j)}(h``char *type``h]j?)}(hjoh]h char *type}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKbhjiubj)}(hhh]j9)}(h.The type of the zpool to check (e.g. zsmalloc)h]h.The type of the zpool to check (e.g. zsmalloc)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKbhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKbhjfubah}(h]h ]h"]h$]h&]uh1jhjJubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKdhjJubj9)}(hX\This checks if the **type** pool driver is available. This will try to load the requested module, if needed, but there is no guarantee the module will still be loaded and available immediately after calling. If this returns true, the caller should assume the pool is available, but must be prepared to handle the **zpool_create_pool\(\)** returning failure. However if this returns false, the caller should assume the requested pool type is not available; either the requested pool type module does not exist, or could not be loaded, and calling **zpool_create_pool\(\)** with the pool type will fail.h](hThis checks if the }(hjhhhNhNubjz)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX  pool driver is available. This will try to load the requested module, if needed, but there is no guarantee the module will still be loaded and available immediately after calling. If this returns true, the caller should assume the pool is available, but must be prepared to handle the }(hjhhhNhNubjz)}(h**zpool_create_pool\(\)**h]hzpool_create_pool()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh returning failure. However if this returns false, the caller should assume the requested pool type is not available; either the requested pool type module does not exist, or could not be loaded, and calling }(hjhhhNhNubjz)}(h**zpool_create_pool\(\)**h]hzpool_create_pool()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with the pool type will fail.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKdhjJubj9)}(h,The **type** string must be null-terminated.h](hThe }(hjhhhNhNubjz)}(h**type**h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh string must be null-terminated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKnhjJubj9)}(h **Return**h]jz)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKphjJubj9)}(h0true if **type** pool is available, false if noth](htrue if }(hj>hhhNhNubjz)}(h**type**h]htype}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh pool is available, false if not}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKphjJubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_create_pool (C function)c.zpool_create_poolhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hPstruct zpool * zpool_create_pool (const char *type, const char *name, gfp_t gfp)h]h)}(hNstruct zpool *zpool_create_pool(const char *type, const char *name, gfp_t gfp)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj{hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhKubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXzpool_create_poolsbc.zpool_create_poolasbuh1hhj{hhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhKubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj{hhhjhKubh)}(hzpool_create_poolh]h)}(hjh]hzpool_create_pool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhKubj)}(h/(const char *type, const char *name, gfp_t gfp)h](j)}(hconst char *typeh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj0hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(htypeh]htype}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hconst char *nameh](j!)}(hjeh]hconst}(hjVhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hcharh]hchar}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.zpool_create_poolasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjthhubj )}(hhh]j9)}(hCreate a new zpoolh]hCreate a new zpool}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj qhNhNubjp)}(hXb**Parameters** ``const char *type`` The type of the zpool to create (e.g. zsmalloc) ``const char *name`` The name of the zpool (e.g. zram0, zswap) ``gfp_t gfp`` The GFP flags to use when allocating the pool. **Description** This creates a new zpool of the specified type. The gfp flags will be used when allocating memory, if the implementation supports it. If the ops param is NULL, then the created zpool will not be evictable. Implementations must guarantee this to be thread-safe. The **type** and **name** strings must be null-terminated. **Return** New zpool on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj)}(hhh](j)}(hE``const char *type`` The type of the zpool to create (e.g. zsmalloc) h](j)}(h``const char *type``h]j?)}(hjMh]hconst char *type}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjGubj)}(hhh]j9)}(h/The type of the zpool to create (e.g. zsmalloc)h]h/The type of the zpool to create (e.g. zsmalloc)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjDubj)}(h?``const char *name`` The name of the zpool (e.g. zram0, zswap) h](j)}(h``const char *name``h]j?)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(h)The name of the zpool (e.g. zram0, zswap)h]h)The name of the zpool (e.g. zram0, zswap)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjDubj)}(h=``gfp_t gfp`` The GFP flags to use when allocating the pool. h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(h.The GFP flags to use when allocating the pool.h]h.The GFP flags to use when allocating the pool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj9)}(hThis creates a new zpool of the specified type. The gfp flags will be used when allocating memory, if the implementation supports it. If the ops param is NULL, then the created zpool will not be evictable.h]hThis creates a new zpool of the specified type. The gfp flags will be used when allocating memory, if the implementation supports it. If the ops param is NULL, then the created zpool will not be evictable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj9)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj9)}(h:The **type** and **name** strings must be null-terminated.h](hThe }(hj.hhhNhNubjz)}(h**type**h]htype}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh and }(hj.hhhNhNubjz)}(h**name**h]hname}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh! strings must be null-terminated.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj9)}(h **Return**h]jz)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubj9)}(h&New zpool on success, NULL on failure.h]h&New zpool on success, NULL on failure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_destroy_pool (C function)c.zpool_destroy_poolhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h-void zpool_destroy_pool (struct zpool *zpool)h]h)}(h,void zpool_destroy_pool(struct zpool *zpool)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hzpool_destroy_poolh]h)}(hzpool_destroy_poolh]hzpool_destroy_pool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(struct zpool *zpool)h]j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.zpool_destroy_poolasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj1hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hzpoolh]hzpool}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hDestroy a zpoolh]hDestroy a zpool}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXU**Parameters** ``struct zpool *zpool`` The zpool to destroy. **Description** Implementations must guarantee this to be thread-safe, however only when destroying different pools. The same pool should only be destroyed once, and should not be used after it is destroyed. This destroys an existing zpool. The zpool should not be in use.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j)}(h.``struct zpool *zpool`` The zpool to destroy. h](j)}(h``struct zpool *zpool``h]j?)}(hjh]hstruct zpool *zpool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(hThe zpool to destroy.h]hThe zpool to destroy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj9)}(hImplementations must guarantee this to be thread-safe, however only when destroying different pools. The same pool should only be destroyed once, and should not be used after it is destroyed.h]hImplementations must guarantee this to be thread-safe, however only when destroying different pools. The same pool should only be destroyed once, and should not be used after it is destroyed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj9)}(hAThis destroys an existing zpool. The zpool should not be in use.h]hAThis destroys an existing zpool. The zpool should not be in use.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_get_type (C function)c.zpool_get_typehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h1const char * zpool_get_type (struct zpool *zpool)h]h)}(h/const char *zpool_get_type(struct zpool *zpool)h](j!)}(hjeh]hconst}(hj8hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj4hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhKubj)}(hcharh]hchar}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhKubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhKubj2 )}(hj5 h]h*}(hjphhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj4hhhjEhKubh)}(hzpool_get_typeh]h)}(hzpool_get_typeh]hzpool_get_type}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhjEhKubj)}(h(struct zpool *zpool)h]j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.zpool_get_typeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhj4hhhjEhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhjEhKubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhjEhKhj-hhubj )}(hhh]j9)}(hGet the type of the zpoolh]hGet the type of the zpool}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjEhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct zpool *zpool`` The zpool to check **Description** This returns the type of the pool. Implementations must guarantee this to be thread-safe. **Return** The type of zpool.h](j9)}(h**Parameters**h]jz)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubj)}(hhh]j)}(h+``struct zpool *zpool`` The zpool to check h](j)}(h``struct zpool *zpool``h]j?)}(hjah]hstruct zpool *zpool}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj[ubj)}(hhh]j9)}(hThe zpool to checkh]hThe zpool to check}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhKhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubj9)}(h"This returns the type of the pool.h]h"This returns the type of the pool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubj9)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubj9)}(hThe type of zpool.h]hThe type of zpool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_malloc (C function)c.zpool_mallochNtauh1hhj qhhhNhNubh)}(hhh](h)}(hdint zpool_malloc (struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle, const int nid)h]h)}(hcint zpool_malloc(struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle, const int nid)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj%hKubh)}(h zpool_malloch]h)}(h zpool_malloch]h zpool_malloc}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hKubj)}(hS(struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle, const int nid)h](j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjThhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]h)}(hzpoolh]hzpool}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjtmodnameN classnameNj\j_)}jb]je)}jXj:sbc.zpool_mallocasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjPubh)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.zpool_mallocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.zpool_mallocasbuh1hhj ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hgfph]hgfp}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubj)}(hunsigned long *handleh](j)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjRubh)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubj)}(h const int nidh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj%hKhj hhubj )}(hhh]j9)}(hAllocate memoryh]hAllocate memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct zpool *zpool`` The zpool to allocate from. ``size_t size`` The amount of memory to allocate. ``gfp_t gfp`` The GFP flags to use when allocating memory. ``unsigned long *handle`` Pointer to the handle to set ``const int nid`` The preferred node id. **Description** This allocates the requested amount of memory from the pool. The gfp flags will be used when allocating memory, if the implementation supports it. The provided **handle** will be set to the allocated object handle. The allocation will prefer the NUMA node specified by **nid**. Implementations must guarantee this to be thread-safe. **Return** 0 on success, negative value on error.h](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubj)}(hhh](j)}(h4``struct zpool *zpool`` The zpool to allocate from. h](j)}(h``struct zpool *zpool``h]j?)}(hjVh]hstruct zpool *zpool}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjPubj)}(hhh]j9)}(hThe zpool to allocate from.h]hThe zpool to allocate from.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjMubj)}(h2``size_t size`` The amount of memory to allocate. h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(h!The amount of memory to allocate.h]h!The amount of memory to allocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjMubj)}(h;``gfp_t gfp`` The GFP flags to use when allocating memory. h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(h,The GFP flags to use when allocating memory.h]h,The GFP flags to use when allocating memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjMubj)}(h7``unsigned long *handle`` Pointer to the handle to set h](j)}(h``unsigned long *handle``h]j?)}(hjh]hunsigned long *handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(hPointer to the handle to seth]hPointer to the handle to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjMubj)}(h)``const int nid`` The preferred node id. h](j)}(h``const int nid``h]j?)}(hj:h]h const int nid}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj4ubj)}(hhh]j9)}(hThe preferred node id.h]hThe preferred node id.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubj9)}(hXThis allocates the requested amount of memory from the pool. The gfp flags will be used when allocating memory, if the implementation supports it. The provided **handle** will be set to the allocated object handle. The allocation will prefer the NUMA node specified by **nid**.h](hThis allocates the requested amount of memory from the pool. The gfp flags will be used when allocating memory, if the implementation supports it. The provided }(hjhhhNhNubjz)}(h **handle**h]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhc will be set to the allocated object handle. The allocation will prefer the NUMA node specified by }(hjhhhNhNubjz)}(h**nid**h]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubj9)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubj9)}(h&0 on success, negative value on error.h]h&0 on success, negative value on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_free (C function) c.zpool_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h;void zpool_free (struct zpool *zpool, unsigned long handle)h]h)}(h:void zpool_free(struct zpool *zpool, unsigned long handle)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hKubh)}(h zpool_freeh]h)}(h zpool_freeh]h zpool_free}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hKubj)}(h+(struct zpool *zpool, unsigned long handle)h](j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(hzpoolh]hzpool}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjqmodnameN classnameNj\j_)}jb]je)}jXj7sb c.zpool_freeasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjMubh)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjIubj)}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjIubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj"hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj"hKhj hhubj )}(hhh]j9)}(h Free previously allocated memoryh]h Free previously allocated memory}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj"hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j=j4j=j5j6j7uh1hhhhj qhNhNubjp)}(hX **Parameters** ``struct zpool *zpool`` The zpool that allocated the memory. ``unsigned long handle`` The handle to the memory to free. **Description** This frees previously allocated memory. This does not guarantee that the pool will actually free memory, only that the memory in the pool will become available for use by the pool. Implementations must guarantee this to be thread-safe, however only when freeing different handles. The same handle should only be freed once, and should not be used after freeing.h](j9)}(h**Parameters**h]jz)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjAubj)}(hhh](j)}(h=``struct zpool *zpool`` The zpool that allocated the memory. h](j)}(h``struct zpool *zpool``h]j?)}(hjfh]hstruct zpool *zpool}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj`ubj)}(hhh]j9)}(h$The zpool that allocated the memory.h]h$The zpool that allocated the memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hKhj]ubj)}(h;``unsigned long handle`` The handle to the memory to free. h](j)}(h``unsigned long handle``h]j?)}(hjh]hunsigned long handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j9)}(h!The handle to the memory to free.h]h!The handle to the memory to free.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjAubj9)}(hThis frees previously allocated memory. This does not guarantee that the pool will actually free memory, only that the memory in the pool will become available for use by the pool.h]hThis frees previously allocated memory. This does not guarantee that the pool will actually free memory, only that the memory in the pool will become available for use by the pool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjAubj9)}(hImplementations must guarantee this to be thread-safe, however only when freeing different handles. The same handle should only be freed once, and should not be used after freeing.h]hImplementations must guarantee this to be thread-safe, however only when freeing different handles. The same handle should only be freed once, and should not be used after freeing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!zpool_obj_read_begin (C function)c.zpool_obj_read_beginhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hYvoid * zpool_obj_read_begin (struct zpool *zpool, unsigned long handle, void *local_copy)h]h)}(hWvoid *zpool_obj_read_begin(struct zpool *zpool, unsigned long handle, void *local_copy)h](j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj<hM ubj2 )}(hj5 h]h*}(hjKhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj*hhhj<hM ubh)}(hzpool_obj_read_beginh]h)}(hzpool_obj_read_beginh]hzpool_obj_read_begin}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj<hM ubj)}(h=(struct zpool *zpool, unsigned long handle, void *local_copy)h](j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjxhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj^sbc.zpool_obj_read_beginasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhandleh]hhandle}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(hvoid *local_copyh](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2 )}(hj5 h]h*}(hjWhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj7ubh)}(h local_copyh]h local_copy}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubeh}(h]h ]h"]h$]h&]jj uh1jhj*hhhj<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj<hM ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1hhj<hM hj#hhubj )}(hhh]j9)}(h1Start reading from a previously allocated handle.h]h1Start reading from a previously allocated handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj<hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXR**Parameters** ``struct zpool *zpool`` The zpool that the handle was allocated from ``unsigned long handle`` The handle to read from ``void *local_copy`` A local buffer to use if needed. **Description** This starts a read operation of a previously allocated handle. The passed **local_copy** buffer may be used if needed by copying the memory into. zpool_obj_read_end() MUST be called after the read is completed to undo any actions taken (e.g. release locks). **Return** A pointer to the handle memory to be read, if **local_copy** is used, the returned pointer is **local_copy**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubj)}(hhh](j)}(hE``struct zpool *zpool`` The zpool that the handle was allocated from h](j)}(h``struct zpool *zpool``h]j?)}(hjh]hstruct zpool *zpool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj)}(hhh]j9)}(h,The zpool that the handle was allocated fromh]h,The zpool that the handle was allocated from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h1``unsigned long handle`` The handle to read from h](j)}(h``unsigned long handle``h]j?)}(hjh]hunsigned long handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj)}(hhh]j9)}(hThe handle to read fromh]hThe handle to read from}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h6``void *local_copy`` A local buffer to use if needed. h](j)}(h``void *local_copy``h]j?)}(hjAh]hvoid *local_copy}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhj;ubj)}(hhh]j9)}(h A local buffer to use if needed.h]h A local buffer to use if needed.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubj9)}(hXThis starts a read operation of a previously allocated handle. The passed **local_copy** buffer may be used if needed by copying the memory into. zpool_obj_read_end() MUST be called after the read is completed to undo any actions taken (e.g. release locks).h](hJThis starts a read operation of a previously allocated handle. The passed }(hjhhhNhNubjz)}(h**local_copy**h]h local_copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh buffer may be used if needed by copying the memory into. zpool_obj_read_end() MUST be called after the read is completed to undo any actions taken (e.g. release locks).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubj9)}(hmA pointer to the handle memory to be read, if **local_copy** is used, the returned pointer is **local_copy**.h](h.A pointer to the handle memory to be read, if }(hjhhhNhNubjz)}(h**local_copy**h]h local_copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh" is used, the returned pointer is }(hjhhhNhNubjz)}(h**local_copy**h]h local_copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_obj_read_end (C function)c.zpool_obj_read_endhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hUvoid zpool_obj_read_end (struct zpool *zpool, unsigned long handle, void *handle_mem)h]h)}(hTvoid zpool_obj_read_end(struct zpool *zpool, unsigned long handle, void *handle_mem)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hMubh)}(hzpool_obj_read_endh]h)}(hzpool_obj_read_endh]hzpool_obj_read_end}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hMubj)}(h=(struct zpool *zpool, unsigned long handle, void *handle_mem)h](j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hj[hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]h)}(hzpoolh]hzpool}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj{modnameN classnameNj\j_)}jb]je)}jXjAsbc.zpool_obj_read_endasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjWubh)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hvoid *handle_memh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj:hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h handle_memh]h handle_mem}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj,hMhjhhubj )}(hhh]j9)}(h2Finish reading from a previously allocated handle.h]h2Finish reading from a previously allocated handle.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX+**Parameters** ``struct zpool *zpool`` The zpool that the handle was allocated from ``unsigned long handle`` The handle to read from ``void *handle_mem`` The pointer returned by zpool_obj_read_begin() **Description** Finishes a read operation previously started by zpool_obj_read_begin().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM#hjubj)}(hhh](j)}(hE``struct zpool *zpool`` The zpool that the handle was allocated from h](j)}(h``struct zpool *zpool``h]j?)}(hjh]hstruct zpool *zpool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj)}(hhh]j9)}(h,The zpool that the handle was allocated fromh]h,The zpool that the handle was allocated from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h1``unsigned long handle`` The handle to read from h](j)}(h``unsigned long handle``h]j?)}(hjh]hunsigned long handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM!hjubj)}(hhh]j9)}(hThe handle to read fromh]hThe handle to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(hD``void *handle_mem`` The pointer returned by zpool_obj_read_begin() h](j)}(h``void *handle_mem``h]j?)}(hj$h]hvoid *handle_mem}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM"hjubj)}(hhh]j9)}(h.The pointer returned by zpool_obj_read_begin()h]h.The pointer returned by zpool_obj_read_begin()}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hM"hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM"hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM$hjubj9)}(hGFinishes a read operation previously started by zpool_obj_read_begin().h]hGFinishes a read operation previously started by zpool_obj_read_begin().}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_obj_write (C function)c.zpool_obj_writehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hbvoid zpool_obj_write (struct zpool *zpool, unsigned long handle, void *handle_mem, size_t mem_len)h]h)}(havoid zpool_obj_write(struct zpool *zpool, unsigned long handle, void *handle_mem, size_t mem_len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM-ubh)}(hzpool_obj_writeh]h)}(hzpool_obj_writeh]hzpool_obj_write}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM-ubj)}(hM(struct zpool *zpool, unsigned long handle, void *handle_mem, size_t mem_len)h](j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.zpool_obj_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj-hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hzpoolh]hzpool}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hlongh]hlong}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hvoid *handle_memh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h handle_memh]h handle_mem}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hsize_t mem_lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.zpool_obj_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmem_lenh]hmem_len}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM-ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM-hjhhubj )}(hhh]j9)}(h'Write to a previously allocated handle.h]h'Write to a previously allocated handle.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM-hj<hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct zpool *zpool`` The zpool that the handle was allocated from ``unsigned long handle`` The handle to read from ``void *handle_mem`` The memory to copy from into the handle. ``size_t mem_len`` The length of memory to be written.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM1hj[ubj)}(hhh](j)}(hE``struct zpool *zpool`` The zpool that the handle was allocated from h](j)}(h``struct zpool *zpool``h]j?)}(hjh]hstruct zpool *zpool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM.hjzubj)}(hhh]j9)}(h,The zpool that the handle was allocated fromh]h,The zpool that the handle was allocated from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjwubj)}(h1``unsigned long handle`` The handle to read from h](j)}(h``unsigned long handle``h]j?)}(hjh]hunsigned long handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM/hjubj)}(hhh]j9)}(hThe handle to read fromh]hThe handle to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjwubj)}(h>``void *handle_mem`` The memory to copy from into the handle. h](j)}(h``void *handle_mem``h]j?)}(hjh]hvoid *handle_mem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM0hjubj)}(hhh]j9)}(h(The memory to copy from into the handle.h]h(The memory to copy from into the handle.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjwubj)}(h6``size_t mem_len`` The length of memory to be written.h](j)}(h``size_t mem_len``h]j?)}(hj+h]hsize_t mem_len}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM2hj%ubj)}(hhh]j9)}(h#The length of memory to be written.h]h#The length of memory to be written.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM1hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM2hjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"zpool_get_total_pages (C function)c.zpool_get_total_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h/u64 zpool_get_total_pages (struct zpool *zpool)h]h)}(h.u64 zpool_get_total_pages(struct zpool *zpool)h](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXzpool_get_total_pagessbc.zpool_get_total_pagesasbuh1hhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM;ubh)}(hzpool_get_total_pagesh]h)}(hjh]hzpool_get_total_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM;ubj)}(h(struct zpool *zpool)h]j)}(hstruct zpool *zpoolh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.zpool_get_total_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj!hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hzpoolh]hzpool}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhM;ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjhM;hjzhhubj )}(hhh]j9)}(hThe total size of the poolh]hThe total size of the pool}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM;hjUhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct zpool *zpool`` The zpool to check **Description** This returns the total size in pages of the pool. **Return** Total size of the zpool in pages.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM?hjtubj)}(hhh]j)}(h+``struct zpool *zpool`` The zpool to check h](j)}(h``struct zpool *zpool``h]j?)}(hjh]hstruct zpool *zpool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM<hjubj)}(hhh]j9)}(hThe zpool to checkh]hThe zpool to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM>hjtubj9)}(h1This returns the total size in pages of the pool.h]h1This returns the total size in pages of the pool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM>hjtubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM@hjtubj9)}(h!Total size of the zpool in pages.h]h!Total size of the zpool in pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM@hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&mem_cgroup_css_from_folio (C function)c.mem_cgroup_css_from_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hLstruct cgroup_subsys_state * mem_cgroup_css_from_folio (struct folio *folio)h]h)}(hJstruct cgroup_subsys_state *mem_cgroup_css_from_folio(struct folio *folio)h](j!)}(hj$h]hstruct}(hj@hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj<hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhKubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]je)}jXmem_cgroup_css_from_foliosbc.mem_cgroup_css_from_folioasbuh1hhj<hhhjMhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhKubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj<hhhjMhKubh)}(hmem_cgroup_css_from_folioh]h)}(hj}h]hmem_cgroup_css_from_folio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjMhKubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j{c.mem_cgroup_css_from_folioasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhj<hhhjMhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjMhKubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhjMhKhj5hhubj )}(hhh]j9)}(h(css of the memcg associated with a folioh]h(css of the memcg associated with a folio}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhj8hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj qhNhNubjp)}(hXR**Parameters** ``struct folio *folio`` folio of interest **Description** If memcg is bound to the default hierarchy, css of the memcg associated with **folio** is returned. The returned css remains associated with **folio** until it is released. If memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhjWubj)}(hhh]j)}(h*``struct folio *folio`` folio of interest h](j)}(h``struct folio *folio``h]j?)}(hj|h]hstruct folio *folio}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhjvubj)}(hhh]j9)}(hfolio of interesth]hfolio of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhjsubah}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhjWubj9)}(hIf 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](hMIf memcg is bound to the default hierarchy, css of the memcg associated with }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh8 is returned. The returned css remains associated with }(hjhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh until it is released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhjWubj9)}(hUIf memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.h]hUIf memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_cgroup_ino (C function)c.page_cgroup_inohNtauh1hhj qhhhNhNubh)}(hhh](h)}(h)ino_t page_cgroup_ino (struct page *page)h]h)}(h(ino_t page_cgroup_ino(struct page *page)h](h)}(hhh]h)}(hino_th]hino_t}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj4modnameN classnameNj\j_)}jb]je)}jXpage_cgroup_inosbc.page_cgroup_inoasbuh1hhj+hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhjShMubh)}(hpage_cgroup_inoh]h)}(hjPh]hpage_cgroup_ino}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhjShMubj)}(h(struct page *page)h]j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jNc.page_cgroup_inoasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj}ubh)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjyubah}(h]h ]h"]h$]h&]jj uh1jhj+hhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhjShMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1hhjShMhj$hhubj )}(hhh]j9)}(h5return inode number of the memcg a page is charged toh]h5return inode number of the memcg a page is charged to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhjShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX5**Parameters** ``struct page *page`` the page **Description** Look up the closest online ancestor of the memory cgroup **page** is charged to and return its inode number or 0 if **page** is not charged to any cgroup. It is safe to call this function without holding a reference to **page**. Note, this function is inherently racy, because there is nothing to prevent the cgroup inode from getting torn down and potentially reallocated a moment after page_cgroup_ino() returns, so it only should be used by callers that do not care (such as procfs interfaces).h](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjubj)}(hhh]j)}(h``struct page *page`` the page h](j)}(h``struct page *page``h]j?)}(hjCh]hstruct page *page}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj=ubj)}(hhh]j9)}(hthe pageh]hthe page}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjubj9)}(hLook 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](h9Look up the closest online ancestor of the memory cgroup }(hjhhhNhNubjz)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh3 is charged to and return its inode number or 0 if }(hjhhhNhNubjz)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh_ is not charged to any cgroup. It is safe to call this function without holding a reference to }(hjhhhNhNubjz)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjubj9)}(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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmod_memcg_state (C function)c.mod_memcg_statehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRvoid mod_memcg_state (struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)h]h)}(hQvoid mod_memcg_state(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hmod_memcg_stateh]h)}(hmod_memcg_stateh]hmod_memcg_state}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h=(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjEhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXj+sbc.mod_memcg_stateasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjAubh)}(hmemcgh]hmemcg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubj)}(henum memcg_stat_item idxh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmemcg_stat_itemh]hmemcg_stat_item}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.mod_memcg_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidxh]hidx}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubj)}(hint valh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hvalh]hval}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hupdate cgroup memory statisticsh]hupdate cgroup memory statistics}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj qhNhNubjp)}(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 negativeh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj|ubj)}(hhh](j)}(h/``struct mem_cgroup *memcg`` the memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjh]hstruct mem_cgroup *memcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(hthe memory cgrouph]hthe memory cgroup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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]j?)}(hjh]henum memcg_stat_item idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(hBthe stat item - can be enum memcg_stat_item or enum node_stat_itemh]hBthe stat item - can be enum memcg_stat_item or enum node_stat_item}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``int val`` delta to add to the counter, can be negativeh](j)}(h ``int val``h]j?)}(hjh]hint val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(h,delta to add to the counter, can be negativeh]h,delta to add to the counter, can be negative}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__mod_lruvec_state (C function)c.__mod_lruvec_statehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hQvoid __mod_lruvec_state (struct lruvec *lruvec, enum node_stat_item idx, int val)h]h)}(hPvoid __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, int val)h](j)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj{hMubh)}(h__mod_lruvec_stateh]h)}(h__mod_lruvec_stateh]h__mod_lruvec_state}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj{hMubj)}(h9(struct lruvec *lruvec, enum node_stat_item idx, int val)h](j)}(hstruct lruvec *lruvech](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.__mod_lruvec_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(henum node_stat_item idxh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hnode_stat_itemh]hnode_stat_item}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]jc.__mod_lruvec_stateasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidxh]hidx}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint valh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hvalh]hval}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhj{hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhj{hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj{hMhjbhhubj )}(hhh]j9)}(hupdate lruvec memory statisticsh]hupdate lruvec memory statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h%``struct lruvec *lruvec`` the lruvec h](j)}(h``struct lruvec *lruvec``h]j?)}(hjh]hstruct lruvec *lruvec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(h the lruvech]h the lruvec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``enum node_stat_item idx`` the stat item h](j)}(h``enum node_stat_item idx``h]j?)}(hj?h]henum node_stat_item idx}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj9ubj)}(hhh]j9)}(h the stat itemh]h the stat item}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubj)}(h9``int val`` delta to add to the counter, can be negative h](j)}(h ``int val``h]j?)}(hjxh]hint val}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjrubj)}(hhh]j9)}(h,delta to add to the counter, can be negativeh]h,delta to add to the counter, can be negative}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj9)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcount_memcg_events (C function)c.count_memcg_eventshNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM<ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM<ubh)}(hcount_memcg_eventsh]h)}(hcount_memcg_eventsh]hcount_memcg_events}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM<ubj)}(hG(struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hj5hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUmodnameN classnameNj\j_)}jb]je)}jXjsbc.count_memcg_eventsasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj1ubh)}(hmemcgh]hmemcg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(henum vm_event_item idxh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h vm_event_itemh]h vm_event_item}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]joc.count_memcg_eventsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidxh]hidx}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(hunsigned long counth](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hcounth]hcount}(hjB hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM<ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM<hjhhubj )}(hhh]j9)}(haccount VM events in a cgrouph]haccount VM events in a cgroup}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM<hji hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM<ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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 occurredh](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM@hj ubj)}(hhh](j)}(h/``struct mem_cgroup *memcg`` the memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hj h]hstruct mem_cgroup *memcg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM=hj ubj)}(hhh]j9)}(hthe memory cgrouph]hthe memory cgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM=hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM=hj ubj)}(h*``enum vm_event_item idx`` the event item h](j)}(h``enum vm_event_item idx``h]j?)}(hj h]henum vm_event_item idx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM>hj ubj)}(hhh]j9)}(hthe event itemh]hthe event item}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM>hj ubj)}(h:``unsigned long count`` the number of events that occurredh](j)}(h``unsigned long count``h]j?)}(hj h]hunsigned long count}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM@hj ubj)}(hhh]j9)}(h"the number of events that occurredh]h"the number of events that occurred}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM?hj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hM@hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#get_mem_cgroup_from_mm (C function)c.get_mem_cgroup_from_mmhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hAstruct 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!)}(hj$h]hstruct}(hjy hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hju hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju hhhj hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXget_mem_cgroup_from_mmsbc.get_mem_cgroup_from_mmasbuh1hhju hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju hhhj hMubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hju hhhj hMubh)}(hget_mem_cgroup_from_mmh]h)}(hj h]hget_mem_cgroup_from_mm}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhju hhhj hMubj)}(h(struct mm_struct *mm)h]j)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]j c.get_mem_cgroup_from_mmasbuh1hhj ubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj= hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hmmh]hmm}(hjJ hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhju hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjq hhhj hMubah}(h]jl ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjn hhubj )}(hhh]j9)}(h.Obtain a reference on given mm_struct's memcg.h]h0Obtain a reference on given mm_struct’s memcg.}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjq hhubah}(h]h ]h"]h$]h&]uh1jhjn hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j)}(hR``struct mm_struct *mm`` mm from which memcg should be extracted. It can be NULL. h](j)}(h``struct mm_struct *mm``h]j?)}(hj h]hstruct mm_struct *mm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(h8mm from which memcg should be extracted. It can be NULL.h]h8mm from which memcg should be extracted. It can be NULL.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj9)}(hObtain 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]hObtain 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(get_mem_cgroup_from_current (C function)c.get_mem_cgroup_from_currenthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h6struct mem_cgroup * get_mem_cgroup_from_current (void)h]h)}(h4struct mem_cgroup *get_mem_cgroup_from_current(void)h](j!)}(hj$h]hstruct}(hj5 hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj1 hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhjB hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjT hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjV modnameN classnameNj\j_)}jb]je)}jXget_mem_cgroup_from_currentsbc.get_mem_cgroup_from_currentasbuh1hhj1 hhhjB hMubj)}(h h]h }(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhjB hMubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj1 hhhjB hMubh)}(hget_mem_cgroup_from_currenth]h)}(hjr h]hget_mem_cgroup_from_current}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1 hhhjB hMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhj1 hhhjB hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj- hhhjB hMubah}(h]j( ah ](jjeh"]h$]h&]jj)jhuh1hhjB hMhj* hhubj )}(hhh]j9)}(h+Obtain a reference on current task's memcg.h]h-Obtain a reference on current task’s memcg.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj* hhhjB hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(h'**Parameters** ``void`` no argumentsh](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j?)}(hj h]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chKhj0 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj/ hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&get_mem_cgroup_from_folio (C function)c.get_mem_cgroup_from_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hCstruct mem_cgroup * get_mem_cgroup_from_folio (struct folio *folio)h]h)}(hAstruct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)h](j!)}(hj$h]hstruct}(hjt hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjp hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp hhhj hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXget_mem_cgroup_from_foliosbc.get_mem_cgroup_from_folioasbuh1hhjp hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp hhhj hMubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjp hhhj hMubh)}(hget_mem_cgroup_from_folioh]h)}(hj h]hget_mem_cgroup_from_folio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp hhhj hMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.get_mem_cgroup_from_folioasbuh1hhj ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj8hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hfolioh]hfolio}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhjp hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl hhhj hMubah}(h]jg ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhji hhubj )}(hhh]j9)}(h,Obtain a reference on a given folio's memcg.h]h.Obtain a reference on a given folio’s memcg.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jhji hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hU**Parameters** ``struct folio *folio`` folio from which memcg should be extracted.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j)}(hC``struct folio *folio`` folio from which memcg should be extracted.h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(h+folio from which memcg should be extracted.h]h+folio from which memcg should be extracted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_iter (C function)c.mem_cgroup_iterhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hstruct mem_cgroup * mem_cgroup_iter (struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)h]h)}(hstruct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)h](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]je)}jXmem_cgroup_itersbc.mem_cgroup_iterasbuh1hhjhhhjhMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjXhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hmem_cgroup_iterh]h)}(hjGh]hmem_cgroup_iter}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h](struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)h](j)}(hstruct mem_cgroup *rooth](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jEc.mem_cgroup_iterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hrooth]hroot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubj)}(hstruct mem_cgroup *prevh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jEc.mem_cgroup_iterasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj>hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hprevh]hprev}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubj)}(h)struct mem_cgroup_reclaim_cookie *reclaimh](j!)}(hj$h]hstruct}(hjdhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]h)}(hmem_cgroup_reclaim_cookieh]hmem_cgroup_reclaim_cookie}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jEc.mem_cgroup_iterasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`ubh)}(hreclaimh]hreclaim}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h$iterate over memory cgroup hierarchyh]h$iterate over memory cgroup hierarchy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h+``struct mem_cgroup *root`` hierarchy root h](j)}(h``struct mem_cgroup *root``h]j?)}(hj&h]hstruct mem_cgroup *root}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(hhierarchy rooth]hhierarchy root}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(hP``struct mem_cgroup *prev`` previously returned memcg, NULL on first invocation h](j)}(h``struct mem_cgroup *prev``h]j?)}(hj_h]hstruct mem_cgroup *prev}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjYubj)}(hhh]j9)}(h3previously returned memcg, NULL on first invocationh]h3previously returned memcg, NULL on first invocation}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubj)}(hc``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]j?)}(hjh]h)struct mem_cgroup_reclaim_cookie *reclaim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(h4cookie for shared reclaim walks, NULL for full walksh]h4cookie for shared reclaim walks, NULL for full walks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj9)}(hxReturns references to children of the hierarchy below **root**, or **root** itself, or ``NULL`` after a full round-trip.h](h6Returns references to children of the hierarchy below }(hjhhhNhNubjz)}(h**root**h]hroot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, or }(hjhhhNhNubjz)}(h**root**h]hroot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh itself, or }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh after a full round-trip.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj9)}(hCaller must pass the return value in **prev** on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.h](h%Caller must pass the return value in }(hj.hhhNhNubjz)}(h**prev**h]hprev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj9)}(hReclaimers 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 }(hjOhhhNhNubjz)}(h **reclaim**h]hreclaim}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubhe to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"mem_cgroup_iter_break (C function)c.mem_cgroup_iter_breakhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hMvoid mem_cgroup_iter_break (struct mem_cgroup *root, struct mem_cgroup *prev)h]h)}(hLvoid mem_cgroup_iter_break(struct mem_cgroup *root, struct mem_cgroup *prev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMDubh)}(hmem_cgroup_iter_breakh]h)}(hmem_cgroup_iter_breakh]hmem_cgroup_iter_break}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMDubj)}(h2(struct mem_cgroup *root, struct mem_cgroup *prev)h](j)}(hstruct mem_cgroup *rooth](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mem_cgroup_iter_breakasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hrooth]hroot}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mem_cgroup *prevh](j!)}(hj$h]hstruct}(hj?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj_modnameN classnameNj\j_)}jb]jc.mem_cgroup_iter_breakasbuh1hhj;ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hprevh]hprev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMDhjhhubj )}(hhh]j9)}(h"abort a hierarchy walk prematurelyh]h"abort a hierarchy walk prematurely}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMDhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct mem_cgroup *root`` hierarchy root ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMHhjubj)}(hhh](j)}(h+``struct mem_cgroup *root`` hierarchy root h](j)}(h``struct mem_cgroup *root``h]j?)}(hjh]hstruct mem_cgroup *root}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMEhjubj)}(hhh]j9)}(hhierarchy rooth]hhierarchy root}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubj)}(hZ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()h](j)}(h``struct mem_cgroup *prev``h]j?)}(hj:h]hstruct mem_cgroup *prev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMGhj4ubj)}(hhh]j9)}(h>last visited hierarchy member as returned by mem_cgroup_iter()h]h>last visited hierarchy member as returned by mem_cgroup_iter()}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMFhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"mem_cgroup_scan_tasks (C function)c.mem_cgroup_scan_taskshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hivoid mem_cgroup_scan_tasks (struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg)h]h)}(hfvoid mem_cgroup_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubh)}(hmem_cgroup_scan_tasksh]h)}(hmem_cgroup_scan_tasksh]hmem_cgroup_scan_tasks}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMuubj)}(hL(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mem_cgroup_scan_tasksasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmemcgh]hmemcg}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h%int (*fn)(struct task_struct*, void*)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj2 )}(hjk h]h(}(hj_hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj2 )}(hj5 h]h*}(hjlhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubh)}(hfnh]hfn}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubj2 )}(hj h]h)}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj2 )}(hjk h]h(}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.mem_cgroup_scan_tasksasbuh1hhj?ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj2 )}(h,h]h,}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubj2 )}(hj h]h)}(hj!hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h void *argh](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj2 )}(hj5 h]h*}(hjUhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj5ubh)}(hargh]harg}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMuhjhhubj )}(hhh]j9)}(h/iterate over tasks of a memory cgroup hierarchyh]h/iterate over tasks of a memory cgroup hierarchy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMyhjubj)}(hhh](j)}(h,``struct mem_cgroup *memcg`` hierarchy root h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjh]hstruct mem_cgroup *memcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMvhjubj)}(hhh]j9)}(hhierarchy rooth]hhierarchy root}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubj)}(hK``int (*fn)(struct task_struct *, void *)`` function to call for each task h](j)}(h+``int (*fn)(struct task_struct *, void *)``h]j?)}(hjh]h'int (*fn)(struct task_struct *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMwhjubj)}(hhh]j9)}(hfunction to call for each taskh]hfunction to call for each task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h(``void *arg`` argument passed to **fn** h](j)}(h ``void *arg``h]j?)}(hj?h]h void *arg}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMxhj9ubj)}(hhh]j9)}(hargument passed to **fn**h](hargument passed to }(hjXhhhNhNubjz)}(h**fn**h]hfn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubeh}(h]h ]h"]h$]h&]uh1j8hjThMxhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMxhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMzhjubj9)}(hThis 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 }(hjhhhNhNubjz)}(h **memcg**h]hmemcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh( or to any of its descendants and calls }(hjhhhNhNubjz)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh for each task. If }(hjhhhNhNubjz)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhz returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMzhjubj9)}(h ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hfolio_lruvec_lockh]h)}(hjOh]hfolio_lruvec_lock}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jMc.folio_lruvec_lockasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hLock the lruvec for a folio.h]hLock the lruvec for a folio.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j%j4j%j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct folio *folio`` Pointer to the folio. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubj)}(hhh]j)}(h.``struct folio *folio`` Pointer to the folio. h](j)}(h``struct folio *folio``h]j?)}(hjNh]hstruct folio *folio}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjHubj)}(hhh]j9)}(hPointer to the folio.h]hPointer to the folio.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubj9)}(hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)h]hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubj9)}(h/The lruvec this folio is on with its lock held.h]h/The lruvec this folio is on with its lock held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"folio_lruvec_lock_irq (C function)c.folio_lruvec_lock_irqhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h;struct lruvec * folio_lruvec_lock_irq (struct folio *folio)h]h)}(h9struct lruvec *folio_lruvec_lock_irq(struct folio *folio)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfolio_lruvec_lock_irqsbc.folio_lruvec_lock_irqasbuh1hhjhhhjhMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjChhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hfolio_lruvec_lock_irqh]h)}(hj2h]hfolio_lruvec_lock_irq}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjohhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j0c.folio_lruvec_lock_irqasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjkubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjgubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hLock the lruvec for a folio.h]hLock the lruvec for a folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX2**Parameters** ``struct folio *folio`` Pointer to the folio. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j)}(h.``struct folio *folio`` Pointer to the folio. h](j)}(h``struct folio *folio``h]j?)}(hj1h]hstruct folio *folio}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj+ubj)}(hhh]j9)}(hPointer to the folio.h]hPointer to the folio.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj9)}(hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)h]hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj9)}(hGThe lruvec this folio is on with its lock held and interrupts disabled.h]hGThe lruvec this folio is on with its lock held and interrupts disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&folio_lruvec_lock_irqsave (C function)c.folio_lruvec_lock_irqsavehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hUstruct lruvec * folio_lruvec_lock_irqsave (struct folio *folio, unsigned long *flags)h]h)}(hSstruct lruvec *folio_lruvec_lock_irqsave(struct folio *folio, unsigned long *flags)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXfolio_lruvec_lock_irqsavesbc.folio_lruvec_lock_irqsaveasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hj&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hfolio_lruvec_lock_irqsaveh]h)}(hjh]hfolio_lruvec_lock_irqsave}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h+(struct folio *folio, unsigned long *flags)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjRhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]h)}(hfolioh]hfolio}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjrmodnameN classnameNj\j_)}jb]jc.folio_lruvec_lock_irqsaveasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjNubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjJubj)}(hunsigned long *flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjJubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hLock the lruvec for a folio.h]hLock the lruvec for a folio.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj qhNhNubjp)}(hXh**Parameters** ``struct folio *folio`` Pointer to the folio. ``unsigned long *flags`` Pointer to irqsave flags. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled.h](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjMubj)}(hhh](j)}(h.``struct folio *folio`` Pointer to the folio. h](j)}(h``struct folio *folio``h]j?)}(hjrh]hstruct folio *folio}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjlubj)}(hhh]j9)}(hPointer to the folio.h]hPointer to the folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubj)}(h3``unsigned long *flags`` Pointer to irqsave flags. h](j)}(h``unsigned long *flags``h]j?)}(hjh]hunsigned long *flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j9)}(hPointer to irqsave flags.h]hPointer to irqsave flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjMubj9)}(hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)h]hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjMubj9)}(h **Return**h]jz)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjMubj9)}(hGThe lruvec this folio is on with its lock held and interrupts disabled.h]hGThe lruvec this folio is on with its lock held and interrupts disabled.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'mem_cgroup_update_lru_size (C function)c.mem_cgroup_update_lru_sizehNtauh1hhj qhhhNhNubh)}(hhh](h)}(havoid mem_cgroup_update_lru_size (struct lruvec *lruvec, enum lru_list lru, int zid, int nr_pages)h]h)}(h`void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru, int zid, int nr_pages)h](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hMubh)}(hmem_cgroup_update_lru_sizeh]h)}(hmem_cgroup_update_lru_sizeh]hmem_cgroup_update_lru_size}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hMubj)}(hA(struct lruvec *lruvec, enum lru_list lru, int zid, int nr_pages)h](j)}(hstruct lruvec *lruvech](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjusbc.mem_cgroup_update_lru_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(henum lru_list lruh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlru_listh]hlru_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj!modnameN classnameNj\j_)}jb]jc.mem_cgroup_update_lru_sizeasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlruh]hlru}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint zidh](j)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hzidh]hzid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int nr_pagesh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhj`hMhjGhhubj )}(hhh]j9)}(h*account for adding or removing an lru pageh]h*account for adding or removing an lru page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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 ``int 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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h9``struct lruvec *lruvec`` mem_cgroup per zone lru vector h](j)}(h``struct lruvec *lruvec``h]j?)}(hj h]hstruct lruvec *lruvec}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(hmem_cgroup per zone lru vectorh]hmem_cgroup per zone lru vector}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5 hMhj6 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj5 hMhj ubj)}(h?``enum lru_list lru`` index of lru list the page is sitting on h](j)}(h``enum lru_list lru``h]j?)}(hjY h]henum lru_list lru}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjW ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjS ubj)}(hhh]j9)}(h(index of lru list the page is sitting onh]h(index of lru list the page is sitting on}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjn hMhjo ubah}(h]h ]h"]h$]h&]uh1jhjS ubeh}(h]h ]h"]h$]h&]uh1jhjn hMhj ubj)}(h+``int zid`` zone id of the accounted pages h](j)}(h ``int zid``h]j?)}(hj h]hint zid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(hzone id of the accounted pagesh]hzone id of the accounted pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h@``int nr_pages`` positive when adding or negative when removing h](j)}(h``int nr_pages``h]j?)}(hj h]h int nr_pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj)}(hhh]j9)}(h.positive when adding or negative when removingh]h.positive when adding or negative when removing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj9)}(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!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_margin (C function)c.mem_cgroup_marginhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h:unsigned long mem_cgroup_margin (struct mem_cgroup *memcg)h]h)}(h9unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)h](j)}(hunsignedh]hunsigned}(hjK!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjZ!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!hhhjY!hMubj)}(hlongh]hlong}(hjh!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!hhhjY!hMubj)}(h h]h }(hjv!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!hhhjY!hMubh)}(hmem_cgroup_marginh]h)}(hmem_cgroup_marginh]hmem_cgroup_margin}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjG!hhhjY!hMubj)}(h(struct mem_cgroup *memcg)h]j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hj!hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj!modnameN classnameNj\j_)}jb]je)}jXj!sbc.mem_cgroup_marginasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj2 )}(hj5 h]h*}(hj!hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj!ubh)}(hmemcgh]hmemcg}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj!ubah}(h]h ]h"]h$]h&]jj uh1jhjG!hhhjY!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjC!hhhjY!hMubah}(h]j>!ah ](jjeh"]h$]h&]jj)jhuh1hhjY!hMhj@!hhubj )}(hhh]j9)}(h-calculate chargeable space of a memory cgrouph]h-calculate chargeable space of a memory cgroup}(hj'"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj$"hhubah}(h]h ]h"]h$]h&]uh1jhj@!hhhjY!hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?"j4j?"j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct mem_cgroup *memcg`` the memory cgroup **Description** Returns the maximum amount of memory **mem** can be charged with, in pages.h](j9)}(h**Parameters**h]jz)}(hjI"h]h Parameters}(hjK"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjG"ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjC"ubj)}(hhh]j)}(h/``struct mem_cgroup *memcg`` the memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjh"h]hstruct mem_cgroup *memcg}(hjj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjf"ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjb"ubj)}(hhh]j9)}(hthe memory cgrouph]hthe memory cgroup}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}"hMhj~"ubah}(h]h ]h"]h$]h&]uh1jhjb"ubeh}(h]h ]h"]h$]h&]uh1jhj}"hMhj_"ubah}(h]h ]h"]h$]h&]uh1jhjC"ubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjC"ubj9)}(hKReturns the maximum amount of memory **mem** can be charged with, in pages.h](h%Returns the maximum amount of memory }(hj"hhhNhNubjz)}(h**mem**h]hmem}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh can be charged with, in pages.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjC"ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mem_cgroup_print_oom_context (C function)c.mem_cgroup_print_oom_contexthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSvoid mem_cgroup_print_oom_context (struct mem_cgroup *memcg, struct task_struct *p)h]h)}(hRvoid mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj#hMubh)}(hmem_cgroup_print_oom_contexth]h)}(hmem_cgroup_print_oom_contexth]hmem_cgroup_print_oom_context}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj#hMubj)}(h1(struct mem_cgroup *memcg, struct task_struct *p)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hj7#hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj3#ubj)}(h h]h }(hjD#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3#ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjU#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjW#modnameN classnameNj\j_)}jb]je)}jXj#sbc.mem_cgroup_print_oom_contextasbuh1hhj3#ubj)}(h h]h }(hju#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3#ubj2 )}(hj5 h]h*}(hj#hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj3#ubh)}(hmemcgh]hmemcg}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/#ubj)}(hstruct task_struct *ph](j!)}(hj$h]hstruct}(hj#hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]h)}(h task_structh]h task_struct}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]jq#c.mem_cgroup_print_oom_contextasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj2 )}(hj5 h]h*}(hj#hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj#ubh)}(hj> h]hp}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/#ubeh}(h]h ]h"]h$]h&]jj uh1jhj"hhhj#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj#hMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1hhj#hMhj"hhubj )}(hhh]j9)}(h4Print OOM information relevant to memory controller.h]h4Print OOM information relevant to memory controller.}(hj)$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&$hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj#hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jA$j4jA$j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct mem_cgroup *memcg`` The memory cgroup that went over limit ``struct task_struct *p`` Task that is going to be killed **NOTE** **memcg** and **p**'s mem_cgroup can be different when hierarchy is enabledh](j9)}(h**Parameters**h]jz)}(hjK$h]h Parameters}(hjM$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjI$ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjE$ubj)}(hhh](j)}(hD``struct mem_cgroup *memcg`` The memory cgroup that went over limit h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjj$h]hstruct mem_cgroup *memcg}(hjl$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjh$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjd$ubj)}(hhh]j9)}(h&The memory cgroup that went over limith]h&The memory cgroup that went over limit}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjd$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhja$ubj)}(h:``struct task_struct *p`` Task that is going to be killed h](j)}(h``struct task_struct *p``h]j?)}(hj$h]hstruct task_struct *p}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj$ubj)}(hhh]j9)}(hTask that is going to be killedh]hTask that is going to be killed}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhja$ubeh}(h]h ]h"]h$]h&]uh1jhjE$ubj9)}(h**NOTE**h]jz)}(hj$h]hNOTE}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjE$ubj9)}(hK**memcg** and **p**'s mem_cgroup can be different when hierarchy is enabledh](jz)}(h **memcg**h]hmemcg}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh and }(hj$hhhNhNubjz)}(h**p**h]hp}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh:’s mem_cgroup can be different when hierarchy is enabled}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjE$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mem_cgroup_print_oom_meminfo (C function)c.mem_cgroup_print_oom_meminfohNtauh1hhj qhhhNhNubh)}(hhh](h)}(h ah"]h$]h&]uh1j1 hj|%ubh)}(hmemcgh]hmemcg}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|%ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjx%ubah}(h]h ]h"]h$]h&]jj uh1jhj?%hhhjQ%hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;%hhhjQ%hMubah}(h]j6%ah ](jjeh"]h$]h&]jj)jhuh1hhjQ%hMhj8%hhubj )}(hhh]j9)}(h;Print OOM memory information relevant to memory controller.h]h;Print OOM memory information relevant to memory controller.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj8%hhhjQ%hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj qhNhNubjp)}(hU**Parameters** ``struct mem_cgroup *memcg`` The memory cgroup that went over limith](j9)}(h**Parameters**h]jz)}(hj%&h]h Parameters}(hj'&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#&ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&ubj)}(hhh]j)}(hC``struct mem_cgroup *memcg`` The memory cgroup that went over limith](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjD&h]hstruct mem_cgroup *memcg}(hjF&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjB&ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj>&ubj)}(hhh]j9)}(h&The memory cgroup that went over limith]h&The memory cgroup that went over limit}(hj]&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjZ&ubah}(h]h ]h"]h$]h&]uh1jhj>&ubeh}(h]h ]h"]h$]h&]uh1jhjY&hMhj;&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mem_cgroup_get_oom_group (C function)c.mem_cgroup_get_oom_grouphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hhstruct mem_cgroup * mem_cgroup_get_oom_group (struct task_struct *victim, struct mem_cgroup *oom_domain)h]h)}(hfstruct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim, struct mem_cgroup *oom_domain)h](j!)}(hj$h]hstruct}(hj&hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj&hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj&modnameN classnameNj\j_)}jb]je)}jXmem_cgroup_get_oom_groupsbc.mem_cgroup_get_oom_groupasbuh1hhj&hhhj&hMubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hMubj2 )}(hj5 h]h*}(hj&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj&hhhj&hMubh)}(hmem_cgroup_get_oom_grouph]h)}(hj&h]hmem_cgroup_get_oom_group}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj&hMubj)}(h;(struct task_struct *victim, struct mem_cgroup *oom_domain)h](j)}(hstruct task_struct *victimh](j!)}(hj$h]hstruct}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj%'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]h)}(h task_structh]h task_struct}(hj6'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3'ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8'modnameN classnameNj\j_)}jb]j&c.mem_cgroup_get_oom_groupasbuh1hhj'ubj)}(h h]h }(hjT'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj2 )}(hj5 h]h*}(hjb'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj'ubh)}(hvictimh]hvictim}(hjo'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj'ubj)}(hstruct mem_cgroup *oom_domainh](j!)}(hj$h]hstruct}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'modnameN classnameNj\j_)}jb]j&c.mem_cgroup_get_oom_groupasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj2 )}(hj5 h]h*}(hj'hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj'ubh)}(h oom_domainh]h oom_domain}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj'ubeh}(h]h ]h"]h$]h&]jj uh1jhj&hhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMhj&hhubj )}(hhh]j9)}(h)get a memory cgroup to clean up after OOMh]h)get a memory cgroup to clean up after OOM}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!(j4j!(j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj+(h]h Parameters}(hj-(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)(ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj%(ubj)}(hhh](j)}(hC``struct task_struct *victim`` task to be killed by the OOM killer h](j)}(h``struct task_struct *victim``h]j?)}(hjJ(h]hstruct task_struct *victim}(hjL(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjH(ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjD(ubj)}(hhh]j9)}(h#task to be killed by the OOM killerh]h#task to be killed by the OOM killer}(hjc(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_(hMhj`(ubah}(h]h ]h"]h$]h&]uh1jhjD(ubeh}(h]h ]h"]h$]h&]uh1jhj_(hMhjA(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]j?)}(hj(h]hstruct mem_cgroup *oom_domain}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj}(ubj)}(hhh]j9)}(h;memcg in case of memcg OOM, NULL in case of system-wide OOMh]h;memcg in case of memcg OOM, NULL in case of system-wide OOM}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj}(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjA(ubeh}(h]h ]h"]h$]h&]uh1jhj%(ubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj%(ubj9)}(hmReturns a pointer to a memory cgroup, which has to be cleaned up by killing all belonging OOM-killable tasks.h]hmReturns a pointer to a memory cgroup, which has to be cleaned up by killing all belonging OOM-killable tasks.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj%(ubj9)}(hCCaller has to call mem_cgroup_put() on the returned non-NULL memcg.h]hCCaller has to call mem_cgroup_put() on the returned non-NULL memcg.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj%(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsume_stock (C function)c.consume_stockhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hDbool consume_stock (struct mem_cgroup *memcg, unsigned int nr_pages)h]h)}(hCbool consume_stock(struct mem_cgroup *memcg, unsigned int nr_pages)h](j)}(hj)h]hbool}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj )hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hMubh)}(h consume_stockh]h)}(h consume_stockh]h consume_stock}(hj2)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj)hMubj)}(h1(struct mem_cgroup *memcg, unsigned int nr_pages)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjN)hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjJ)ubj)}(h h]h }(hj[)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ)ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hjl)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjn)modnameN classnameNj\j_)}jb]je)}jXj4)sbc.consume_stockasbuh1hhjJ)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ)ubj2 )}(hj5 h]h*}(hj)hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJ)ubh)}(hmemcgh]hmemcg}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjF)ubj)}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hnr_pagesh]hnr_pages}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjF)ubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj)hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj )hhhj)hMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhj)hMhj)hhubj )}(hhh]j9)}(h*Try to consume stocked charge on this cpu.h]h*Try to consume stocked charge on this cpu.}(hj"*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:*j4j:*j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjD*h]h Parameters}(hjF*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB*ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj>*ubj)}(hhh](j)}(h4``struct mem_cgroup *memcg`` memcg to consume from. h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjc*h]hstruct mem_cgroup *memcg}(hje*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hja*ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj]*ubj)}(hhh]j9)}(hmemcg to consume from.h]hmemcg to consume from.}(hj|*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjx*hMhjy*ubah}(h]h ]h"]h$]h&]uh1jhj]*ubeh}(h]h ]h"]h$]h&]uh1jhjx*hMhjZ*ubj)}(h4``unsigned int nr_pages`` how many pages to charge. h](j)}(h``unsigned int nr_pages``h]j?)}(hj*h]hunsigned int nr_pages}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj*ubj)}(hhh]j9)}(hhow many pages to charge.h]hhow many pages to charge.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjZ*ubeh}(h]h ]h"]h$]h&]uh1jhj>*ubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj>*ubj9)}(hConsume 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]hConsume the cached charge if enough nr_pages are present otherwise return failure. Also return failure for charge request larger than MEMCG_CHARGE_BATCH or if the local lock is already taken.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj>*ubj9)}(h,returns true if successful, false otherwise.h]h,returns true if successful, false otherwise.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj>*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__memcg_kmem_charge_page (C function)c.__memcg_kmem_charge_pagehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hFint __memcg_kmem_charge_page (struct page *page, gfp_t gfp, int order)h]h)}(hEint __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order)h](j)}(hinth]hint}(hj++hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'+hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hj:+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'+hhhj9+hM ubh)}(h__memcg_kmem_charge_pageh]h)}(h__memcg_kmem_charge_pageh]h__memcg_kmem_charge_page}(hjL+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjH+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'+hhhj9+hM ubj)}(h)(struct page *page, gfp_t gfp, int order)h](j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hjh+hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjd+ubj)}(h h]h }(hju+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd+ubh)}(hhh]h)}(hpageh]hpage}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]je)}jXjN+sbc.__memcg_kmem_charge_pageasbuh1hhjd+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd+ubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjd+ubh)}(hpageh]hpage}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjd+ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj`+ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj+modnameN classnameNj\j_)}jb]j+c.__memcg_kmem_charge_pageasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hgfph]hgfp}(hj ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj`+ubj)}(h int orderh](j)}(hinth]hint}(hj",hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj0,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(horderh]horder}(hj>,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj`+ubeh}(h]h ]h"]h$]h&]jj uh1jhj'+hhhj9+hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#+hhhj9+hM ubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhj9+hM hj +hhubj )}(hhh]j9)}(h/charge a kmem page to the current memory cgrouph]h/charge a kmem page to the current memory cgroup}(hjh,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hje,hhubah}(h]h ]h"]h$]h&]uh1jhj +hhhj9+hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubj)}(hhh](j)}(h%``struct page *page`` page to charge h](j)}(h``struct page *page``h]j?)}(hj,h]hstruct page *page}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubj)}(hhh]j9)}(hpage to chargeh]hpage to charge}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hj,ubj)}(h``gfp_t gfp`` reclaim mode h](j)}(h ``gfp_t gfp``h]j?)}(hj,h]h gfp_t gfp}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubj)}(hhh]j9)}(h reclaim modeh]h reclaim mode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hj,ubj)}(h``int order`` allocation order h](j)}(h ``int order``h]j?)}(hj-h]h int order}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj-ubj)}(hhh]j9)}(hallocation orderh]hallocation order}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0-hM hj1-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj0-hM hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubj9)}(h**Description**h]jz)}(hjV-h]h Description}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT-ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubj9)}(h/Returns 0 on success, an error code on failure.h]h/Returns 0 on success, an error code on failure.}(hjl-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__memcg_kmem_uncharge_page (C function)c.__memcg_kmem_uncharge_pagehNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM( ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hM( ubh)}(h__memcg_kmem_uncharge_pageh]h)}(h__memcg_kmem_uncharge_pageh]h__memcg_kmem_uncharge_page}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj-hM( ubj)}(h(struct page *page, int order)h](j)}(hstruct page *pageh](j!)}(hj$h]hstruct}(hj-hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]h)}(hpageh]hpage}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj-modnameN classnameNj\j_)}jb]je)}jXj-sbc.__memcg_kmem_uncharge_pageasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj2 )}(hj5 h]h*}(hj$.hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj-ubh)}(hpageh]hpage}(hj1.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubj)}(h int orderh](j)}(hinth]hint}(hjJ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF.ubj)}(h h]h }(hjX.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF.ubh)}(horderh]horder}(hjf.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF.ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj-ubeh}(h]h ]h"]h$]h&]jj uh1jhj-hhhj-hM( ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhj-hM( ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1hhj-hM( hj-hhubj )}(hhh]j9)}(huncharge a kmem pageh]huncharge a kmem page}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM( hj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hM( ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.j4j.j5j6j7uh1hhhhj qhNhNubjp)}(hZ**Parameters** ``struct page *page`` page to uncharge ``int order`` allocation orderh](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM, hj.ubj)}(hhh](j)}(h'``struct page *page`` page to uncharge h](j)}(h``struct page *page``h]j?)}(hj.h]hstruct page *page}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM) hj.ubj)}(hhh]j9)}(hpage to unchargeh]hpage to uncharge}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hM) hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM) hj.ubj)}(h``int order`` allocation orderh](j)}(h ``int order``h]j?)}(hj /h]h int order}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM+ hj/ubj)}(hhh]j9)}(hallocation orderh]hallocation order}(hj#/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM* hj /ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM+ hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ mem_cgroup_wb_stats (C function)c.mem_cgroup_wb_statshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid mem_cgroup_wb_stats (struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)h]h)}(hvoid mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)h](j)}(hvoidh]hvoid}(hjd/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`/hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hjs/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`/hhhjr/hM ubh)}(hmem_cgroup_wb_statsh]h)}(hmem_cgroup_wb_statsh]hmem_cgroup_wb_stats}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`/hhhjr/hM ubj)}(h(struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)h](j)}(hstruct bdi_writeback *wbh](j!)}(hj$h]hstruct}(hj/hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]h)}(h bdi_writebackh]h bdi_writeback}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj/modnameN classnameNj\j_)}jb]je)}jXj/sbc.mem_cgroup_wb_statsasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj2 )}(hj5 h]h*}(hj/hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj/ubh)}(hwbh]hwb}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubj)}(hunsigned long *pfilepagesh](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj!0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hlongh]hlong}(hj/0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj=0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj2 )}(hj5 h]h*}(hjK0hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj0ubh)}(h pfilepagesh]h pfilepages}(hjX0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubj)}(hunsigned long *pheadroomh](j)}(hunsignedh]hunsigned}(hjq0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm0ubj)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm0ubj2 )}(hj5 h]h*}(hj0hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjm0ubh)}(h pheadroomh]h pheadroom}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjm0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubj)}(hunsigned long *pdirtyh](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj2 )}(hj5 h]h*}(hj1hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj0ubh)}(hpdirtyh]hpdirty}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubj)}(hunsigned long *pwritebackh](j)}(hunsignedh]hunsigned}(hj-1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubj)}(h h]h }(hj;1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubj)}(hlongh]hlong}(hjI1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubj)}(h h]h }(hjW1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)1ubj2 )}(hj5 h]h*}(hje1hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj)1ubh)}(h pwritebackh]h pwriteback}(hjr1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubeh}(h]h ]h"]h$]h&]jj uh1jhj`/hhhjr/hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\/hhhjr/hM ubah}(h]jW/ah ](jjeh"]h$]h&]jj)jhuh1hhjr/hM hjY/hhubj )}(hhh]j9)}(h/retrieve writeback related stats from its memcgh]h/retrieve writeback related stats from its memcg}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1hhubah}(h]h ]h"]h$]h&]uh1jhjY/hhhjr/hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubj)}(hhh](j)}(h7``struct bdi_writeback *wb`` bdi_writeback in question h](j)}(h``struct bdi_writeback *wb``h]j?)}(hj1h]hstruct bdi_writeback *wb}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubj)}(hhh]j9)}(hbdi_writeback in questionh]hbdi_writeback in question}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hj1ubj)}(hE``unsigned long *pfilepages`` out parameter for number of file pages h](j)}(h``unsigned long *pfilepages``h]j?)}(hj2h]hunsigned long *pfilepages}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj)}(hhh]j9)}(h&out parameter for number of file pagesh]h&out parameter for number of file pages}(hj/2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+2hM hj,2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj+2hM hj1ubj)}(h^``unsigned long *pheadroom`` out parameter for number of allocatable pages according to memcg h](j)}(h``unsigned long *pheadroom``h]j?)}(hjO2h]hunsigned long *pheadroom}(hjQ2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjM2ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjI2ubj)}(hhh]j9)}(h@out parameter for number of allocatable pages according to memcgh]h@out parameter for number of allocatable pages according to memcg}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjd2hM hje2ubah}(h]h ]h"]h$]h&]uh1jhjI2ubeh}(h]h ]h"]h$]h&]uh1jhjd2hM hj1ubj)}(hB``unsigned long *pdirty`` out parameter for number of dirty pages h](j)}(h``unsigned long *pdirty``h]j?)}(hj2h]hunsigned long *pdirty}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj)}(hhh]j9)}(h'out parameter for number of dirty pagesh]h'out parameter for number of dirty pages}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hj1ubj)}(hP``unsigned long *pwriteback`` out parameter for number of pages under writeback h](j)}(h``unsigned long *pwriteback``h]j?)}(hj2h]hunsigned long *pwriteback}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj)}(hhh]j9)}(h1out parameter for number of pages under writebackh]h1out parameter for number of pages under writeback}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM! hj1ubj9)}(hDetermine 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](hGDetermine the numbers of file, headroom, dirty, and writeback pages in }(hj3hhhNhNubjz)}(h**wb**h]hwb}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh^’s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM! hj1ubj9)}(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 }(hj33hhhNhNubjz)}(h***pheadroom**h]h *pheadroom}(hj;3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj33ubh accordingly.}(hj33hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM% hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_from_id (C function)c.mem_cgroup_from_idhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h:struct mem_cgroup * mem_cgroup_from_id (unsigned short id)h]h)}(h8struct mem_cgroup *mem_cgroup_from_id(unsigned short id)h](j!)}(hj$h]hstruct}(hjt3hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjp3hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp3hhhj3hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj3modnameN classnameNj\j_)}jb]je)}jXmem_cgroup_from_idsbc.mem_cgroup_from_idasbuh1hhjp3hhhj3hMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp3hhhj3hMubj2 )}(hj5 h]h*}(hj3hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjp3hhhj3hMubh)}(hmem_cgroup_from_idh]h)}(hj3h]hmem_cgroup_from_id}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjp3hhhj3hMubj)}(h(unsigned short id)h]j)}(hunsigned short idh](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hshorth]hshort}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hidh]hid}(hj&4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj3ubah}(h]h ]h"]h$]h&]jj uh1jhjp3hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjl3hhhj3hMubah}(h]jg3ah ](jjeh"]h$]h&]jj)jhuh1hhj3hMhji3hhubj )}(hhh]j9)}(hlook up a memcg from a memcg idh]hlook up a memcg from a memcg id}(hjP4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjM4hhubah}(h]h ]h"]h$]h&]uh1jhji3hhhj3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jh4j4jh4j5j6j7uh1hhhhj qhNhNubjp)}(hs**Parameters** ``unsigned short id`` the memcg id to look up **Description** Caller must hold rcu_read_lock().h](j9)}(h**Parameters**h]jz)}(hjr4h]h Parameters}(hjt4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjp4ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjl4ubj)}(hhh]j)}(h.``unsigned short id`` the memcg id to look up h](j)}(h``unsigned short id``h]j?)}(hj4h]hunsigned short id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj4ubj)}(hhh]j9)}(hthe memcg id to look uph]hthe memcg id to look up}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjl4ubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjl4ubj9)}(h!Caller must hold rcu_read_lock().h]h!Caller must hold rcu_read_lock().}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjl4ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!mem_cgroup_css_reset (C function)c.mem_cgroup_css_resethNtauh1hhj qhhhNhNubh)}(hhh](h)}(h;void mem_cgroup_css_reset (struct cgroup_subsys_state *css)h]h)}(h:void mem_cgroup_css_reset(struct cgroup_subsys_state *css)h](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM]ubj)}(h h]h }(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5hhhj5hM]ubh)}(hmem_cgroup_css_reseth]h)}(hmem_cgroup_css_reseth]hmem_cgroup_css_reset}(hj25hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj 5hhhj5hM]ubj)}(h!(struct cgroup_subsys_state *css)h]j)}(hstruct cgroup_subsys_state *cssh](j!)}(hj$h]hstruct}(hjN5hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjJ5ubj)}(h h]h }(hj[5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ5ubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hjl5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji5ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjn5modnameN classnameNj\j_)}jb]je)}jXj45sbc.mem_cgroup_css_resetasbuh1hhjJ5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ5ubj2 )}(hj5 h]h*}(hj5hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJ5ubh)}(hcssh]hcss}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ5ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjF5ubah}(h]h ]h"]h$]h&]jj uh1jhj 5hhhj5hM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj 5hhhj5hM]ubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhj5hM]hj5hhubj )}(hhh]j9)}(h reset the states of a mem_cgrouph]h reset the states of a mem_cgroup}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM]hj5hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hM]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMahj5ubj)}(hhh]j)}(h3``struct cgroup_subsys_state *css`` the target css h](j)}(h#``struct cgroup_subsys_state *css``h]j?)}(hj6h]hstruct cgroup_subsys_state *css}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM^hj 6ubj)}(hhh]j9)}(hthe target cssh]hthe target css}(hj+6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'6hM^hj(6ubah}(h]h ]h"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]uh1jhj'6hM^hj 6ubah}(h]h ]h"]h$]h&]uh1jhj5ubj9)}(h**Description**h]jz)}(hjM6h]h Description}(hjO6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK6ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM`hj5ubj9)}(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](h3Reset the states of the mem_cgroup associated with }(hjc6hhhNhNubjz)}(h**css**h]hcss}(hjk6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc6ubh. 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.}(hjc6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM`hj5ubj9)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMfhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,mem_cgroup_calculate_protection (C function)!c.mem_cgroup_calculate_protectionhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hXvoid mem_cgroup_calculate_protection (struct mem_cgroup *root, struct mem_cgroup *memcg)h]h)}(hWvoid mem_cgroup_calculate_protection(struct mem_cgroup *root, struct mem_cgroup *memcg)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubh)}(hmem_cgroup_calculate_protectionh]h)}(hmem_cgroup_calculate_protectionh]hmem_cgroup_calculate_protection}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhj6hMubj)}(h3(struct mem_cgroup *root, struct mem_cgroup *memcg)h](j)}(hstruct mem_cgroup *rooth](j!)}(hj$h]hstruct}(hj6hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]je)}jXj6sb!c.mem_cgroup_calculate_protectionasbuh1hhj6ubj)}(h h]h }(hj.7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj2 )}(hj5 h]h*}(hj<7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj6ubh)}(hrooth]hroot}(hjI7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj6ubj)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjb7hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^7ubj)}(h h]h }(hjo7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^7ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]j*7!c.mem_cgroup_calculate_protectionasbuh1hhj^7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^7ubj2 )}(hj5 h]h*}(hj7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^7ubh)}(hmemcgh]hmemcg}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^7ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj6ubeh}(h]h ]h"]h$]h&]jj uh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1hhj6hMhj6hhubj )}(hhh]j9)}(h2check if memory consumption is in the normal rangeh]h2check if memory consumption is in the normal range}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj7ubj)}(hhh](j)}(hK``struct mem_cgroup *root`` the top ancestor of the sub-tree being checked h](j)}(h``struct mem_cgroup *root``h]j?)}(hj$8h]hstruct mem_cgroup *root}(hj&8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"8ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj8ubj)}(hhh]j9)}(h.the top ancestor of the sub-tree being checkedh]h.the top ancestor of the sub-tree being checked}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj98hMhj:8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj98hMhj8ubj)}(h8``struct mem_cgroup *memcg`` the memory cgroup to check h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hj]8h]hstruct mem_cgroup *memcg}(hj_8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[8ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjW8ubj)}(hhh]j9)}(hthe memory cgroup to checkh]hthe memory cgroup to check}(hjv8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjr8hMhjs8ubah}(h]h ]h"]h$]h&]uh1jhjW8ubeh}(h]h ]h"]h$]h&]uh1jhjr8hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj7ubj9)}(h**Description**h]jz)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj7ubj)}(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)}(hDWARNING: This function is not stateless! It can only be used as parth]hDWARNING: This function is not stateless! It can only be used as part}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj8ubj)}(hhh]j9)}(h7of a top-down tree iteration, not for isolated queries.h]h7of a top-down tree iteration, not for isolated queries.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&mem_cgroup_charge_hugetlb (C function)c.mem_cgroup_charge_hugetlbhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h>int mem_cgroup_charge_hugetlb (struct folio *folio, gfp_t gfp)h]h)}(h=int mem_cgroup_charge_hugetlb(struct folio *folio, gfp_t gfp)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMubh)}(hmem_cgroup_charge_hugetlbh]h)}(hmem_cgroup_charge_hugetlbh]hmem_cgroup_charge_hugetlb}(hj)9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhj9hMubj)}(h (struct folio *folio, gfp_t gfp)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjE9hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjA9ubj)}(h h]h }(hjR9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA9ubh)}(hhh]h)}(hfolioh]hfolio}(hjc9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`9ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetje9modnameN classnameNj\j_)}jb]je)}jXj+9sbc.mem_cgroup_charge_hugetlbasbuh1hhjA9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA9ubj2 )}(hj5 h]h*}(hj9hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjA9ubh)}(hfolioh]hfolio}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA9ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=9ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9modnameN classnameNj\j_)}jb]j9c.mem_cgroup_charge_hugetlbasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hgfph]hgfp}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj=9ubeh}(h]h ]h"]h$]h&]jj uh1jhj9hhhj9hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj9hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhj9hMhj8hhubj )}(hhh]j9)}(h$charge the memcg for a hugetlb folioh]h$charge the memcg for a hugetlb folio}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj :hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj9hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(:j4j(:j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct folio *folio`` folio being charged ``gfp_t gfp`` reclaim mode **Description** This function is called when allocating a huge page folio, after the page has already been obtained and charged to the appropriate hugetlb cgroup controller (if it is enabled). Returns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.h](j9)}(h**Parameters**h]jz)}(hj2:h]h Parameters}(hj4:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0:ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj,:ubj)}(hhh](j)}(h,``struct folio *folio`` folio being charged h](j)}(h``struct folio *folio``h]j?)}(hjQ:h]hstruct folio *folio}(hjS:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjO:ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjK:ubj)}(hhh]j9)}(hfolio being chargedh]hfolio being charged}(hjj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjf:hMhjg:ubah}(h]h ]h"]h$]h&]uh1jhjK:ubeh}(h]h ]h"]h$]h&]uh1jhjf:hMhjH:ubj)}(h``gfp_t gfp`` reclaim mode h](j)}(h ``gfp_t gfp``h]j?)}(hj:h]h gfp_t gfp}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj:ubj)}(hhh]j9)}(h reclaim modeh]h reclaim mode}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjH:ubeh}(h]h ]h"]h$]h&]uh1jhj,:ubj9)}(h**Description**h]jz)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj,:ubj9)}(hThis 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]hThis function is called when allocating a huge page folio, after the page has already been obtained and charged to the appropriate hugetlb cgroup controller (if it is enabled).}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj,:ubj9)}(hwReturns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.h]hwReturns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj,:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+mem_cgroup_swapin_charge_folio (C function) c.mem_cgroup_swapin_charge_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hlint mem_cgroup_swapin_charge_folio (struct folio *folio, struct mm_struct *mm, gfp_t gfp, swp_entry_t entry)h]h)}(hkint mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm, gfp_t gfp, swp_entry_t entry)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj(;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhj';hMubh)}(hmem_cgroup_swapin_charge_folioh]h)}(hmem_cgroup_swapin_charge_folioh]hmem_cgroup_swapin_charge_folio}(hj:;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhj';hMubj)}(hI(struct folio *folio, struct mm_struct *mm, gfp_t gfp, swp_entry_t entry)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjV;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjR;ubj)}(h h]h }(hjc;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR;ubh)}(hhh]h)}(hfolioh]hfolio}(hjt;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq;ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjv;modnameN classnameNj\j_)}jb]je)}jXj<;sb c.mem_cgroup_swapin_charge_folioasbuh1hhjR;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR;ubj2 )}(hj5 h]h*}(hj;hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjR;ubh)}(hfolioh]hfolio}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjN;ubj)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hj;hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]j; c.mem_cgroup_swapin_charge_folioasbuh1hhj;ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj2 )}(hj5 h]h*}(hj<hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj;ubh)}(hmmh]hmm}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjN;ubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj;<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj=<modnameN classnameNj\j_)}jb]j; c.mem_cgroup_swapin_charge_folioasbuh1hhj4<ubj)}(h h]h }(hjY<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4<ubh)}(hgfph]hgfp}(hjg<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjN;ubj)}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]j; c.mem_cgroup_swapin_charge_folioasbuh1hhj|<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|<ubh)}(hentryh]hentry}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjN;ubeh}(h]h ]h"]h$]h&]jj uh1jhj;hhhj';hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;hhhj';hMubah}(h]j ;ah ](jjeh"]h$]h&]jj)jhuh1hhj';hMhj;hhubj )}(hhh]j9)}(h*Charge a newly allocated folio for swapin.h]h*Charge a newly allocated folio for swapin.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj';hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct folio *folio`` folio to charge. ``struct mm_struct *mm`` mm context of the victim ``gfp_t gfp`` reclaim mode ``swp_entry_t entry`` swap entry for which the folio is allocated **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](j9)}(h**Parameters**h]jz)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj<ubj)}(hhh](j)}(h)``struct folio *folio`` folio to charge. h](j)}(h``struct folio *folio``h]j?)}(hj=h]hstruct folio *folio}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj=ubj)}(hhh]j9)}(hfolio to charge.h]hfolio to charge.}(hj3=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/=hMhj0=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj/=hMhj=ubj)}(h2``struct mm_struct *mm`` mm context of the victim h](j)}(h``struct mm_struct *mm``h]j?)}(hjS=h]hstruct mm_struct *mm}(hjU=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjM=ubj)}(hhh]j9)}(hmm context of the victimh]hmm context of the victim}(hjl=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh=hMhji=ubah}(h]h ]h"]h$]h&]uh1jhjM=ubeh}(h]h ]h"]h$]h&]uh1jhjh=hMhj=ubj)}(h``gfp_t gfp`` reclaim mode h](j)}(h ``gfp_t gfp``h]j?)}(hj=h]h gfp_t gfp}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj=ubj)}(hhh]j9)}(h reclaim modeh]h reclaim mode}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj=ubj)}(hB``swp_entry_t entry`` swap entry for which the folio is allocated h](j)}(h``swp_entry_t entry``h]j?)}(hj=h]hswp_entry_t entry}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj=ubj)}(hhh]j9)}(h+swap entry for which the folio is allocatedh]h+swap entry for which the folio is allocated}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj<ubj9)}(hnThis function charges a folio allocated for swapin. Please call this before adding the folio to the swapcache.h]hnThis function charges a folio allocated for swapin. Please call this before adding the folio to the swapcache.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj<ubj9)}(h;Returns 0 on success. Otherwise, an error code is returned.h]h;Returns 0 on success. Otherwise, an error code is returned.}(hj%>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mem_cgroup_replace_folio (C function)c.mem_cgroup_replace_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hDvoid mem_cgroup_replace_folio (struct folio *old, struct folio *new)h]h)}(hCvoid mem_cgroup_replace_folio(struct folio *old, struct folio *new)h](j)}(hvoidh]hvoid}(hjT>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMpubj)}(h h]h }(hjc>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>hhhjb>hMpubh)}(hmem_cgroup_replace_folioh]h)}(hmem_cgroup_replace_folioh]hmem_cgroup_replace_folio}(hju>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjP>hhhjb>hMpubj)}(h&(struct folio *old, struct folio *new)h](j)}(hstruct folio *oldh](j!)}(hj$h]hstruct}(hj>hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]h)}(hfolioh]hfolio}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj>modnameN classnameNj\j_)}jb]je)}jXjw>sbc.mem_cgroup_replace_folioasbuh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2 )}(hj5 h]h*}(hj>hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>ubh)}(holdh]hold}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj>ubj)}(hstruct folio *newh](j!)}(hj$h]hstruct}(hj?hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]h)}(hfolioh]hfolio}(hj!?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#?modnameN classnameNj\j_)}jb]j>c.mem_cgroup_replace_folioasbuh1hhj>ubj)}(h h]h }(hj??hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2 )}(hj5 h]h*}(hjM?hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>ubh)}(hnewh]hnew}(hjZ?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj>ubeh}(h]h ]h"]h$]h&]jj uh1jhjP>hhhjb>hMpubeh}(h]h ]h"]h$]h&]jj juh1hjjhjL>hhhjb>hMpubah}(h]jG>ah ](jjeh"]h$]h&]jj)jhuh1hhjb>hMphjI>hhubj )}(hhh]j9)}(hCharge a folio's replacement.h]hCharge a folio’s replacement.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMphj?hhubah}(h]h ]h"]h$]h&]uh1jhjI>hhhjb>hMpubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMthj?ubj)}(hhh](j)}(h3``struct folio *old`` Currently circulating folio. h](j)}(h``struct folio *old``h]j?)}(hj?h]hstruct folio *old}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMqhj?ubj)}(hhh]j9)}(hCurrently circulating folio.h]hCurrently circulating folio.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMqhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMqhj?ubj)}(h)``struct folio *new`` Replacement folio. h](j)}(h``struct folio *new``h]j?)}(hj?h]hstruct folio *new}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrhj?ubj)}(hhh]j9)}(hReplacement folio.h]hReplacement folio.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMrhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hMrhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hj9@h]h Description}(hj;@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7@ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMthj?ubj9)}(hWCharge **new** as a replacement folio for **old**. **old** will be uncharged upon free.h](hCharge }(hjO@hhhNhNubjz)}(h**new**h]hnew}(hjW@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO@ubh as a replacement folio for }(hjO@hhhNhNubjz)}(h**old**h]hold}(hji@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO@ubh. }(hjO@hhhNhNubjz)}(h**old**h]hold}(hj{@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO@ubh will be uncharged upon free.}(hjO@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMthj?ubj9)}(hmapping** must be set up.h](hBoth folios must be locked, }(hj@hhhNhNubjz)}(h**new->mapping**h]h new->mapping}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh must be set up.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMwhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_migrate (C function)c.mem_cgroup_migratehNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj@hMubh)}(hmem_cgroup_migrateh]h)}(hmem_cgroup_migrateh]hmem_cgroup_migrate}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhj@hMubj)}(h&(struct folio *old, struct folio *new)h](j)}(hstruct folio *oldh](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(hfolioh]hfolio}(hj0AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Aubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj2AmodnameN classnameNj\j_)}jb]je)}jXj@sbc.mem_cgroup_migrateasbuh1hhjAubj)}(h h]h }(hjPAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj2 )}(hj5 h]h*}(hj^AhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjAubh)}(holdh]hold}(hjkAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj Aubj)}(hstruct folio *newh](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(hfolioh]hfolio}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjAmodnameN classnameNj\j_)}jb]jLAc.mem_cgroup_migrateasbuh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj2 )}(hj5 h]h*}(hjAhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjAubh)}(hnewh]hnew}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj Aubeh}(h]h ]h"]h$]h&]jj uh1jhj@hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@hhhj@hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhj@hMhj@hhubj )}(hhh]j9)}(h6Transfer the memcg data from the old to the new folio.h]h6Transfer the memcg data from the old to the new folio.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jBj4jBj5j6j7uh1hhhhj qhNhNubjp)}(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. Note that the memory counters will remain unchanged throughout the process. Both folios must be locked, **new->mapping** must be set up.h](j9)}(h**Parameters**h]jz)}(hj'Bh]h Parameters}(hj)BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%Bubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj!Bubj)}(hhh](j)}(h3``struct folio *old`` Currently circulating folio. h](j)}(h``struct folio *old``h]j?)}(hjFBh]hstruct folio *old}(hjHBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDBubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj@Bubj)}(hhh]j9)}(hCurrently circulating folio.h]hCurrently circulating folio.}(hj_BhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[BhMhj\Bubah}(h]h ]h"]h$]h&]uh1jhj@Bubeh}(h]h ]h"]h$]h&]uh1jhj[BhMhj=Bubj)}(h)``struct folio *new`` Replacement folio. h](j)}(h``struct folio *new``h]j?)}(hjBh]hstruct folio *new}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}Bubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjyBubj)}(hhh]j9)}(hReplacement folio.h]hReplacement folio.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjyBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj=Bubeh}(h]h ]h"]h$]h&]uh1jhj!Bubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj!Bubj9)}(hTransfer the memcg data from the old folio to the new folio for migration. The old folio's data info will be cleared. Note that the memory counters will remain unchanged throughout the process.h]hTransfer the memcg data from the old folio to the new folio for migration. The old folio’s data info will be cleared. Note that the memory counters will remain unchanged throughout the process.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj!Bubj9)}(hmapping** must be set up.h](hBoth folios must be locked, }(hjBhhhNhNubjz)}(h**new->mapping**h]h new->mapping}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh must be set up.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj!Bubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mem_cgroup_charge_skmem (C function)c.mem_cgroup_charge_skmemhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h^bool mem_cgroup_charge_skmem (struct mem_cgroup *memcg, unsigned int nr_pages, gfp_t gfp_mask)h]h)}(h]bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages, gfp_t gfp_mask)h](j)}(hj)h]hbool}(hj ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj.ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhj-ChMubh)}(hmem_cgroup_charge_skmemh]h)}(hmem_cgroup_charge_skmemh]hmem_cgroup_charge_skmem}(hj@ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ah"]h$]h&]uh1j1 hjXCubh)}(hmemcgh]hmemcg}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTCubj)}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hnr_pagesh]hnr_pages}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTCubj)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj"DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj$DmodnameN classnameNj\j_)}jb]jCc.mem_cgroup_charge_skmemasbuh1hhjDubj)}(h h]h }(hj@DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hgfp_maskh]hgfp_mask}(hjNDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjTCubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhj-ChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhj-ChMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhj-ChMhjChhubj )}(hhh]j9)}(hcharge socket memoryh]hcharge socket memory}(hjxDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjuDhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj-ChMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhj qhNhNubjp)}(hX.**Parameters** ``struct mem_cgroup *memcg`` 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](j9)}(h**Parameters**h]jz)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj)}(hhh](j)}(h-``struct mem_cgroup *memcg`` memcg to charge h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjDh]hstruct mem_cgroup *memcg}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj)}(hhh]j9)}(hmemcg to chargeh]hmemcg to charge}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubj)}(h4``unsigned int nr_pages`` number of pages to charge h](j)}(h``unsigned int nr_pages``h]j?)}(hjDh]hunsigned int nr_pages}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj)}(hhh]j9)}(hnumber of pages to chargeh]hnumber of pages to charge}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjDubj)}(h ``gfp_t gfp_mask`` reclaim mode h](j)}(h``gfp_t gfp_mask``h]j?)}(hj+Eh]hgfp_t gfp_mask}(hj-EhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)Eubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj%Eubj)}(hhh]j9)}(h reclaim modeh]h reclaim mode}(hjDEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@EhMhjAEubah}(h]h ]h"]h$]h&]uh1jhj%Eubeh}(h]h ]h"]h$]h&]uh1jhj@EhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjDubj9)}(h**Description**h]jz)}(hjfEh]h Description}(hjhEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdEubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj9)}(hCharges **nr_pages** to **memcg**. Returns ``true`` if the charge fit within **memcg**'s configured limit, ``false`` if it doesn't.h](hCharges }(hj|EhhhNhNubjz)}(h **nr_pages**h]hnr_pages}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|Eubh to }(hj|EhhhNhNubjz)}(h **memcg**h]hmemcg}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|Eubh . Returns }(hj|EhhhNhNubj?)}(h``true``h]htrue}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|Eubh if the charge fit within }(hj|EhhhNhNubjz)}(h **memcg**h]hmemcg}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|Eubh’s configured limit, }(hj|EhhhNhNubj?)}(h ``false``h]hfalse}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|Eubh if it doesn’t.}(hj|EhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&mem_cgroup_uncharge_skmem (C function)c.mem_cgroup_uncharge_skmemhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hPvoid mem_cgroup_uncharge_skmem (struct mem_cgroup *memcg, unsigned int nr_pages)h]h)}(hOvoid mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages)h](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMubh)}(hmem_cgroup_uncharge_skmemh]h)}(hmem_cgroup_uncharge_skmemh]hmem_cgroup_uncharge_skmem}(hj&FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Fubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjFhMubj)}(h1(struct mem_cgroup *memcg, unsigned int nr_pages)h](j)}(hstruct mem_cgroup *memcgh](j!)}(hj$h]hstruct}(hjBFhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>Fubj)}(h h]h }(hjOFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Fubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hj`FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Fubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbFmodnameN classnameNj\j_)}jb]je)}jXj(Fsbc.mem_cgroup_uncharge_skmemasbuh1hhj>Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Fubj2 )}(hj5 h]h*}(hjFhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>Fubh)}(hmemcgh]hmemcg}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>Fubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:Fubj)}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hnr_pagesh]hnr_pages}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:Fubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhjFhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjFhMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhjFhMhjEhhubj )}(hhh]j9)}(huncharge socket memoryh]huncharge socket memory}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjFhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.Gj4j.Gj5j6j7uh1hhhhj qhNhNubjp)}(hy**Parameters** ``struct mem_cgroup *memcg`` memcg to uncharge ``unsigned int nr_pages`` number of pages to unchargeh](j9)}(h**Parameters**h]jz)}(hj8Gh]h Parameters}(hj:GhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6Gubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj2Gubj)}(hhh](j)}(h/``struct mem_cgroup *memcg`` memcg to uncharge h](j)}(h``struct mem_cgroup *memcg``h]j?)}(hjWGh]hstruct mem_cgroup *memcg}(hjYGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUGubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjQGubj)}(hhh]j9)}(hmemcg to unchargeh]hmemcg to uncharge}(hjpGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlGhMhjmGubah}(h]h ]h"]h$]h&]uh1jhjQGubeh}(h]h ]h"]h$]h&]uh1jhjlGhMhjNGubj)}(h5``unsigned int nr_pages`` number of pages to unchargeh](j)}(h``unsigned int nr_pages``h]j?)}(hjGh]hunsigned int nr_pages}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjGubj)}(hhh]j9)}(hnumber of pages to unchargeh]hnumber of pages to uncharge}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjNGubeh}(h]h ]h"]h$]h&]uh1jhj2Gubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)__mem_cgroup_try_charge_swap (C function)c.__mem_cgroup_try_charge_swaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hIint __mem_cgroup_try_charge_swap (struct folio *folio, swp_entry_t entry)h]h)}(hHint __mem_cgroup_try_charge_swap(struct folio *folio, swp_entry_t entry)h](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMJubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhMJubh)}(h__mem_cgroup_try_charge_swaph]h)}(h__mem_cgroup_try_charge_swaph]h__mem_cgroup_try_charge_swap}(hj HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjGhMJubj)}(h((struct folio *folio, swp_entry_t entry)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj'HhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#Hubj)}(h h]h }(hj4HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Hubh)}(hhh]h)}(hfolioh]hfolio}(hjEHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBHubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjGHmodnameN classnameNj\j_)}jb]je)}jXj Hsbc.__mem_cgroup_try_charge_swapasbuh1hhj#Hubj)}(h h]h }(hjeHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Hubj2 )}(hj5 h]h*}(hjsHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj#Hubh)}(hfolioh]hfolio}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Hubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjHubj)}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjHmodnameN classnameNj\j_)}jb]jaHc.__mem_cgroup_try_charge_swapasbuh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hentryh]hentry}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjHubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjGhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhjGhMJubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjGhMJhjGhhubj )}(hhh]j9)}(h#try charging swap space for a folioh]h#try charging swap space for a folio}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMJhjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Ij4j Ij5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct folio *folio`` folio being added to swap ``swp_entry_t entry`` swap entry to charge **Description** Try to charge **folio**'s memcg for the swap space at **entry**. Returns 0 on success, -ENOMEM on failure.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNhjIubj)}(hhh](j)}(h2``struct folio *folio`` folio being added to swap h](j)}(h``struct folio *folio``h]j?)}(hj3Ih]hstruct folio *folio}(hj5IhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1Iubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMKhj-Iubj)}(hhh]j9)}(hfolio being added to swaph]hfolio being added to swap}(hjLIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHIhMKhjIIubah}(h]h ]h"]h$]h&]uh1jhj-Iubeh}(h]h ]h"]h$]h&]uh1jhjHIhMKhj*Iubj)}(h+``swp_entry_t entry`` swap entry to charge h](j)}(h``swp_entry_t entry``h]j?)}(hjlIh]hswp_entry_t entry}(hjnIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMLhjfIubj)}(hhh]j9)}(hswap entry to chargeh]hswap entry to charge}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMLhjIubah}(h]h ]h"]h$]h&]uh1jhjfIubeh}(h]h ]h"]h$]h&]uh1jhjIhMLhj*Iubeh}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNhjIubj9)}(h@Try to charge **folio**'s memcg for the swap space at **entry**.h](hTry to charge }(hjIhhhNhNubjz)}(h **folio**h]hfolio}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh!’s memcg for the swap space at }(hjIhhhNhNubjz)}(h **entry**h]hentry}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNhjIubj9)}(h)Returns 0 on success, -ENOMEM on failure.h]h)Returns 0 on success, -ENOMEM on failure.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMPhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__mem_cgroup_uncharge_swap (C function)c.__mem_cgroup_uncharge_swaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hJvoid __mem_cgroup_uncharge_swap (swp_entry_t entry, unsigned int nr_pages)h]h)}(hIvoid __mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM{ubj)}(h h]h }(hj.JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj-JhM{ubh)}(h__mem_cgroup_uncharge_swaph]h)}(h__mem_cgroup_uncharge_swaph]h__mem_cgroup_uncharge_swap}(hj@JhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhjGKubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM|hjCKubj)}(hhh]j9)}(hswap entry to unchargeh]hswap entry to uncharge}(hjbKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^KhM|hj_Kubah}(h]h ]h"]h$]h&]uh1jhjCKubeh}(h]h ]h"]h$]h&]uh1jhj^KhM|hj@Kubj)}(h>``unsigned int nr_pages`` the amount of swap space to unchargeh](j)}(h``unsigned int nr_pages``h]j?)}(hjKh]hunsigned int nr_pages}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM~hj|Kubj)}(hhh]j9)}(h$the amount of swap space to unchargeh]h$the amount of swap space to uncharge}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM}hjKubah}(h]h ]h"]h$]h&]uh1jhj|Kubeh}(h]h ]h"]h$]h&]uh1jhjKhM~hj@Kubeh}(h]h ]h"]h$]h&]uh1jhj$Kubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!obj_cgroup_may_zswap (C function)c.obj_cgroup_may_zswaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4bool obj_cgroup_may_zswap (struct obj_cgroup *objcg)h]h)}(h3bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)h](j)}(hj)h]hbool}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMAubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMAubh)}(hobj_cgroup_may_zswaph]h)}(hobj_cgroup_may_zswaph]hobj_cgroup_may_zswap}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhjKhMAubj)}(h(struct obj_cgroup *objcg)h]j)}(hstruct obj_cgroup *objcgh](j!)}(hj$h]hstruct}(hjLhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjLubj)}(h h]h }(hj%LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]h)}(h obj_cgrouph]h obj_cgroup}(hj6LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3Lubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8LmodnameN classnameNj\j_)}jb]je)}jXjKsbc.obj_cgroup_may_zswapasbuh1hhjLubj)}(h h]h }(hjVLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj2 )}(hj5 h]h*}(hjdLhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjLubh)}(hobjcgh]hobjcg}(hjqLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjLubah}(h]h ]h"]h$]h&]jj uh1jhjKhhhjKhMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjKhMAubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1hhjKhMAhjKhhubj )}(hhh]j9)}(hcheck if this cgroup can zswaph]hcheck if this cgroup can zswap}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMAhjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jLj4jLj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMEhjLubj)}(hhh]j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j?)}(hjLh]hstruct obj_cgroup *objcg}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMBhjLubj)}(hhh]j9)}(hthe object cgrouph]hthe object cgroup}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMBhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMBhjLubah}(h]h ]h"]h$]h&]uh1jhjLubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMDhjLubj9)}(h7Check if the hierarchical zswap limit has been reached.h]h7Check if the hierarchical zswap limit has been reached.}(hj-MhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMDhjLubj9)}(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 ah"]h$]h&]uh1j1 hjMubh)}(hobjcgh]hobjcg}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjMubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjNmodnameN classnameNj\j_)}jb]jMc.obj_cgroup_charge_zswapasbuh1hhjNubj)}(h h]h }(hj;NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hsizeh]hsize}(hjINhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjMubeh}(h]h ]h"]h$]h&]jj uh1jhjgMhhhjyMhMnubeh}(h]h ]h"]h$]h&]jj juh1hjjhjcMhhhjyMhMnubah}(h]j^Mah ](jjeh"]h$]h&]jj)jhuh1hhjyMhMnhj`Mhhubj )}(hhh]j9)}(h!charge compression backend memoryh]h!charge compression backend memory}(hjsNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMnhjpNhhubah}(h]h ]h"]h$]h&]uh1jhj`MhhhjyMhMnubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhj qhNhNubjp)}(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 zwap for this cgroup to go ahead.h](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrhjNubj)}(hhh](j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j?)}(hjNh]hstruct obj_cgroup *objcg}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMohjNubj)}(hhh]j9)}(hthe object cgrouph]hthe object cgroup}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMohjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMohjNubj)}(h*``size_t size`` size of compressed object h](j)}(h``size_t size``h]j?)}(hjNh]h size_t size}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMphjNubj)}(hhh]j9)}(hsize of compressed objecth]hsize of compressed object}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhMphjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjOhMphjNubeh}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hj(Oh]h Description}(hj*OhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Oubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrhjNubj9)}(hxThis forces the charge after obj_cgroup_may_zswap() allowed compression and storage in zwap for this cgroup to go ahead.h]hxThis forces the charge after obj_cgroup_may_zswap() allowed compression and storage in zwap for this cgroup to go ahead.}(hj>OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&obj_cgroup_uncharge_zswap (C function)c.obj_cgroup_uncharge_zswaphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hFvoid obj_cgroup_uncharge_zswap (struct obj_cgroup *objcg, size_t size)h]h)}(hEvoid obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size)h](j)}(hvoidh]hvoid}(hjmOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiOhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hj|OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiOhhhj{OhMubh)}(hobj_cgroup_uncharge_zswaph]h)}(hobj_cgroup_uncharge_zswaph]hobj_cgroup_uncharge_zswap}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhjiOhhhj{OhMubj)}(h'(struct obj_cgroup *objcg, size_t size)h](j)}(hstruct obj_cgroup *objcgh](j!)}(hj$h]hstruct}(hjOhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]h)}(h obj_cgrouph]h obj_cgroup}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjOmodnameN classnameNj\j_)}jb]je)}jXjOsbc.obj_cgroup_uncharge_zswapasbuh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj2 )}(hj5 h]h*}(hjOhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjOubh)}(hobjcgh]hobjcg}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjOubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj!PmodnameN classnameNj\j_)}jb]jOc.obj_cgroup_uncharge_zswapasbuh1hhjPubj)}(h h]h }(hj=PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hsizeh]hsize}(hjKPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjOubeh}(h]h ]h"]h$]h&]jj uh1jhjiOhhhj{OhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjeOhhhj{OhMubah}(h]j`Oah ](jjeh"]h$]h&]jj)jhuh1hhj{OhMhjbOhhubj )}(hhh]j9)}(h#uncharge compression backend memoryh]h#uncharge compression backend memory}(hjuPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjrPhhubah}(h]h ]h"]h$]h&]uh1jhjbOhhhj{OhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct obj_cgroup *objcg`` the object cgroup ``size_t size`` size of compressed object **Description** Uncharges zswap memory on page in.h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPubj)}(hhh](j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j?)}(hjPh]hstruct obj_cgroup *objcg}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPubj)}(hhh]j9)}(hthe object cgrouph]hthe object cgroup}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjPubj)}(h*``size_t size`` size of compressed object h](j)}(h``size_t size``h]j?)}(hjPh]h size_t size}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPubj)}(hhh]j9)}(hsize of compressed objecth]hsize of compressed object}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjPubeh}(h]h ]h"]h$]h&]uh1jhjPubj9)}(h**Description**h]jz)}(hj*Qh]h Description}(hj,QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(Qubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPubj9)}(h"Uncharges zswap memory on page in.h]h"Uncharges zswap memory on page in.}(hj@QhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubj.)}(h0#kernel-doc:: mm/memory-tiers.c (build warnings)h]h0#kernel-doc:: mm/memory-tiers.c (build warnings)}hjVQsbah}(h]h ]h"]h$]h&]jj uh1j-hj qhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_recalc_inode (C function)c.shmem_recalc_inodehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hIvoid shmem_recalc_inode (struct inode *inode, long alloced, long swapped)h]h)}(hHvoid shmem_recalc_inode(struct inode *inode, long alloced, long swapped)h](j)}(hvoidh]hvoid}(hj}QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyQhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyQhhhjQhMubh)}(hshmem_recalc_inodeh]h)}(hshmem_recalc_inodeh]hshmem_recalc_inode}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyQhhhjQhMubj)}(h1(struct inode *inode, long alloced, long swapped)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hinodeh]hinode}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjQmodnameN classnameNj\j_)}jb]je)}jXjQsbc.shmem_recalc_inodeasbuh1hhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj2 )}(hj5 h]h*}(hjRhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjQubh)}(hinodeh]hinode}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubj)}(h long allocedh](j)}(hlongh]hlong}(hj,RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Rubj)}(h h]h }(hj:RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Rubh)}(hallocedh]halloced}(hjHRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Rubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubj)}(h long swappedh](j)}(hlongh]hlong}(hjaRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Rubj)}(h h]h }(hjoRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Rubh)}(hswappedh]hswapped}(hj}RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Rubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjQubeh}(h]h ]h"]h$]h&]jj uh1jhjyQhhhjQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuQhhhjQhMubah}(h]jpQah ](jjeh"]h$]h&]jj)jhuh1hhjQhMhjrQhhubj )}(hhh]j9)}(h'recalculate the block usage of an inodeh]h'recalculate the block usage of an inode}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjrQhhhjQhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj qhNhNubjp)}(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)h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRubj)}(hhh](j)}(h(``struct inode *inode`` inode to recalc h](j)}(h``struct inode *inode``h]j?)}(hjRh]hstruct inode *inode}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRubj)}(hhh]j9)}(hinode to recalch]hinode to recalc}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubj)}(hB``long alloced`` the change in number of pages allocated to inode h](j)}(h``long alloced``h]j?)}(hj!Sh]h long alloced}(hj#ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjSubj)}(hhh]j9)}(h0the change in number of pages allocated to inodeh]h0the change in number of pages allocated to inode}(hj:ShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6ShMhj7Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj6ShMhjRubj)}(hB``long swapped`` the change in number of pages swapped from inode h](j)}(h``long swapped``h]j?)}(hjZSh]h long swapped}(hj\ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXSubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjTSubj)}(hhh]j9)}(h0the change in number of pages swapped from inodeh]h0the change in number of pages swapped from inode}(hjsShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjoShMhjpSubah}(h]h ]h"]h$]h&]uh1jhjTSubeh}(h]h ]h"]h$]h&]uh1jhjoShMhjRubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRubj9)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRubj9)}(hBut normally info->alloced == inode->i_mapping->nrpages + info->swapped So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)h]hBut normally info->alloced == inode->i_mapping->nrpages + info->swapped So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&shmem_mapping_size_orders (C function)c.shmem_mapping_size_ordershNtauh1hhj qhhhNhNubh)}(hhh](h)}(hgunsigned int shmem_mapping_size_orders (struct address_space *mapping, pgoff_t index, loff_t write_end)h]h)}(hfunsigned int shmem_mapping_size_orders(struct address_space *mapping, pgoff_t index, loff_t write_end)h](j)}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM.ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM.ubj)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM.ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM.ubh)}(hshmem_mapping_size_ordersh]h)}(hshmem_mapping_size_ordersh]hshmem_mapping_size_orders}(hj&ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"Tubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShM.ubj)}(h@(struct address_space *mapping, pgoff_t index, loff_t write_end)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjBThhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj>Tubj)}(h h]h }(hjOThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Tubh)}(hhh]h)}(h address_spaceh]h address_space}(hj`ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Tubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjbTmodnameN classnameNj\j_)}jb]je)}jXj(Tsbc.shmem_mapping_size_ordersasbuh1hhj>Tubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Tubj2 )}(hj5 h]h*}(hjThhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj>Tubh)}(hmappingh]hmapping}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>Tubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:Tubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjTmodnameN classnameNj\j_)}jb]j|Tc.shmem_mapping_size_ordersasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hindexh]hindex}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:Tubj)}(hloff_t write_endh](h)}(hhh]h)}(hloff_th]hloff_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUmodnameN classnameNj\j_)}jb]j|Tc.shmem_mapping_size_ordersasbuh1hhjTubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(h write_endh]h write_end}(hj+UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj:Tubeh}(h]h ]h"]h$]h&]jj uh1jhjShhhjShM.ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShM.ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjShM.hjShhubj )}(hhh]j9)}(h3Get allowable folio orders for the given file size.h]h3Get allowable folio orders for the given file size.}(hjUUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM.hjRUhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShM.ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmUj4jmUj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct address_space *mapping`` Target address_space. ``pgoff_t index`` The page index. ``loff_t write_end`` end of a write, could extend inode size. **Description** This returns huge orders for folios (when supported) based on the file size which the mapping currently allows at the given index. The index is relevant due to alignment considerations the mapping might have. The returned order may be less than the size passed. **Return** The orders.h](j9)}(h**Parameters**h]jz)}(hjwUh]h Parameters}(hjyUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuUubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM2hjqUubj)}(hhh](j)}(h8``struct address_space *mapping`` Target address_space. h](j)}(h!``struct address_space *mapping``h]j?)}(hjUh]hstruct address_space *mapping}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM/hjUubj)}(hhh]j9)}(hTarget address_space.h]hTarget address_space.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhM/hjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhM/hjUubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j?)}(hjUh]h pgoff_t index}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM0hjUubj)}(hhh]j9)}(hThe page index.h]hThe page index.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhM0hjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhM0hjUubj)}(h>``loff_t write_end`` end of a write, could extend inode size. h](j)}(h``loff_t write_end``h]j?)}(hjVh]hloff_t write_end}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM1hjVubj)}(hhh]j9)}(h(end of a write, could extend inode size.h]h(end of a write, could extend inode size.}(hj!VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM1hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM1hjUubeh}(h]h ]h"]h$]h&]uh1jhjqUubj9)}(h**Description**h]jz)}(hjCVh]h Description}(hjEVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAVubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM3hjqUubj9)}(hXThis returns huge orders for folios (when supported) based on the file size which the mapping currently allows at the given index. The index is relevant due to alignment considerations the mapping might have. The returned order may be less than the size passed.h]hXThis returns huge orders for folios (when supported) based on the file size which the mapping currently allows at the given index. The index is relevant due to alignment considerations the mapping might have. The returned order may be less than the size passed.}(hjYVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM3hjqUubj9)}(h **Return**h]jz)}(hjjVh]hReturn}(hjlVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhVubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM8hjqUubj9)}(h The orders.h]h The orders.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM8hjqUubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_writeout (C function)c.shmem_writeouthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hGint shmem_writeout (struct folio *folio, struct writeback_control *wbc)h]h)}(hFint shmem_writeout(struct folio *folio, struct writeback_control *wbc)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjVhMubh)}(hshmem_writeouth]h)}(hshmem_writeouth]hshmem_writeout}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjVhMubj)}(h4(struct folio *folio, struct writeback_control *wbc)h](j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjVhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]h)}(hfolioh]hfolio}(hj WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj WmodnameN classnameNj\j_)}jb]je)}jXjVsbc.shmem_writeoutasbuh1hhjVubj)}(h h]h }(hj*WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj2 )}(hj5 h]h*}(hj8WhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjVubh)}(hfolioh]hfolio}(hjEWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjVubj)}(hstruct writeback_control *wbch](j!)}(hj$h]hstruct}(hj^WhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjZWubj)}(h h]h }(hjkWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZWubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hj|WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyWubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~WmodnameN classnameNj\j_)}jb]j&Wc.shmem_writeoutasbuh1hhjZWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZWubj2 )}(hj5 h]h*}(hjWhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjZWubh)}(hwbch]hwbc}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjVubeh}(h]h ]h"]h$]h&]jj uh1jhjVhhhjVhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjVhMubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjVhMhjVhhubj )}(hhh]j9)}(hWrite the folio to swaph]hWrite the folio to swap}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjWhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjVhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct folio *folio`` The folio to write ``struct writeback_control *wbc`` How writeback is to be done **Description** Move the folio from the page cache to the swap cache.h](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjWubj)}(hhh](j)}(h+``struct folio *folio`` The folio to write h](j)}(h``struct folio *folio``h]j?)}(hj Xh]hstruct folio *folio}(hj"XhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjXubj)}(hhh]j9)}(hThe folio to writeh]hThe folio to write}(hj9XhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5XhMhj6Xubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj5XhMhjXubj)}(h>``struct writeback_control *wbc`` How writeback is to be done h](j)}(h!``struct writeback_control *wbc``h]j?)}(hjYXh]hstruct writeback_control *wbc}(hj[XhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWXubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjSXubj)}(hhh]j9)}(hHow writeback is to be doneh]hHow writeback is to be done}(hjrXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnXhMhjoXubah}(h]h ]h"]h$]h&]uh1jhjSXubeh}(h]h ]h"]h$]h&]uh1jhjnXhMhjXubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjWubj9)}(h5Move the folio from the page cache to the swap cache.h]h5Move the folio from the page cache to the swap cache.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_get_folio (C function)c.shmem_get_foliohNtauh1hhj qhhhNhNubh)}(hhh](h)}(htint shmem_get_folio (struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)h]h)}(hsint shmem_get_folio(struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM8 ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhM8 ubh)}(hshmem_get_folioh]h)}(hshmem_get_folioh]hshmem_get_folio}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjXhM8 ubj)}(h`(struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)h](j)}(hstruct inode *inodeh](j!)}(hj$h]hstruct}(hjYhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjYubj)}(h h]h }(hj#YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]h)}(hinodeh]hinode}(hj4YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1Yubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj6YmodnameN classnameNj\j_)}jb]je)}jXjXsbc.shmem_get_folioasbuh1hhjYubj)}(h h]h }(hjTYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjbYhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(hinodeh]hinode}(hjoYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjYmodnameN classnameNj\j_)}jb]jPYc.shmem_get_folioasbuh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hindexh]hindex}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(hloff_t write_endh](h)}(hhh]h)}(hloff_th]hloff_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjYmodnameN classnameNj\j_)}jb]jPYc.shmem_get_folioasbuh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(h write_endh]h write_end}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(hstruct folio **folioph](j!)}(hj$h]hstruct}(hjZhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjZubj)}(h h]h }(hj%ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]h)}(hfolioh]hfolio}(hj6ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3Zubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8ZmodnameN classnameNj\j_)}jb]jPYc.shmem_get_folioasbuh1hhjZubj)}(h h]h }(hjTZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj2 )}(hj5 h]h*}(hjbZhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjZubj2 )}(hj5 h]h*}(hjoZhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjZubh)}(hfolioph]hfoliop}(hj|ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(henum sgp_type sgph](j!)}(hjh]henum}(hjZhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]h)}(hsgp_typeh]hsgp_type}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjZmodnameN classnameNj\j_)}jb]jPYc.shmem_get_folioasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hsgph]hsgp}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubeh}(h]h ]h"]h$]h&]jj uh1jhjXhhhjXhM8 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjXhM8 ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjXhM8 hjXhhubj )}(hhh]j9)}(hfind, and lock a shmem folio.h]hfind, and lock a shmem folio.}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM8 hj[hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjXhM8 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j![j4j![j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj+[h]h Parameters}(hj-[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)[ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM< hj%[ubj)}(hhh](j)}(h(``struct inode *inode`` inode to search h](j)}(h``struct inode *inode``h]j?)}(hjJ[h]hstruct inode *inode}(hjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjH[ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM9 hjD[ubj)}(hhh]j9)}(hinode to searchh]hinode to search}(hjc[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_[hM9 hj`[ubah}(h]h ]h"]h$]h&]uh1jhjD[ubeh}(h]h ]h"]h$]h&]uh1jhj_[hM9 hjA[ubj)}(h"``pgoff_t index`` the page index. h](j)}(h``pgoff_t index``h]j?)}(hj[h]h pgoff_t index}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM: hj}[ubj)}(hhh]j9)}(hthe page index.h]hthe page index.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hM: hj[ubah}(h]h ]h"]h$]h&]uh1jhj}[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM: hjA[ubj)}(h=``loff_t write_end`` end of a write, could extend inode size h](j)}(h``loff_t write_end``h]j?)}(hj[h]hloff_t write_end}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM; hj[ubj)}(hhh]j9)}(h'end of a write, could extend inode sizeh]h'end of a write, could extend inode size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hM; hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM; hjA[ubj)}(h8``struct folio **foliop`` pointer to the folio if found h](j)}(h``struct folio **foliop``h]j?)}(hj[h]hstruct folio **foliop}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM< hj[ubj)}(hhh]j9)}(hpointer to the folio if foundh]hpointer to the folio if found}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj \hM< hj \ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj \hM< hjA[ubj)}(h6``enum sgp_type sgp`` SGP_* flags to control behavior h](j)}(h``enum sgp_type sgp``h]j?)}(hj.\h]henum sgp_type sgp}(hj0\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,\ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM= hj(\ubj)}(hhh]j9)}(hSGP_* flags to control behaviorh]hSGP_* flags to control behavior}(hjG\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjC\hM= hjD\ubah}(h]h ]h"]h$]h&]uh1jhj(\ubeh}(h]h ]h"]h$]h&]uh1jhjC\hM= hjA[ubeh}(h]h ]h"]h$]h&]uh1jhj%[ubj9)}(h**Description**h]jz)}(hji\h]h Description}(hjk\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg\ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM? hj%[ubj9)}(hLooks up the page cache entry at **inode** & **index**. If a folio is present, it is returned locked with an increased refcount.h](h!Looks up the page cache entry at }(hj\hhhNhNubjz)}(h **inode**h]hinode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh & }(hj\hhhNhNubjz)}(h **index**h]hindex}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubhK. If a folio is present, it is returned locked with an increased refcount.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM? hj%[ubj9)}(hIf the caller modifies data in the folio, it must call folio_mark_dirty() before unlocking the folio to ensure that the folio is not reclaimed. There is no need to reserve space before calling folio_mark_dirty().h]hIf the caller modifies data in the folio, it must call folio_mark_dirty() before unlocking the folio to ensure that the folio is not reclaimed. There is no need to reserve space before calling folio_mark_dirty().}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMB hj%[ubj)}(hhh]j)}(hX(When no folio is found, the behavior depends on **sgp**: - for SGP_READ, ***foliop** is ``NULL`` and 0 is returned - for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returned - for all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. h](j)}(h8When no folio is found, the behavior depends on **sgp**:h](h0When no folio is found, the behavior depends on }(hj\hhhNhNubjz)}(h**sgp**h]hsgp}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh:}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMJ hj\ubj)}(hhh]j)}(hhh](j+)}(h7for SGP_READ, ***foliop** is ``NULL`` and 0 is returnedh]j9)}(hj\h](hfor SGP_READ, }(hj\hhhNhNubjz)}(h ***foliop**h]h*foliop}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh is }(hj\hhhNhNubj?)}(h``NULL``h]hNULL}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh and 0 is returned}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMG hj\ubah}(h]h ]h"]h$]h&]uh1j+hj\ubj+)}(h@for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returnedh]j9)}(hj-]h](hfor SGP_NOALLOC, }(hj/]hhhNhNubjz)}(h ***foliop**h]h*foliop}(hj6]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/]ubh is }(hj/]hhhNhNubj?)}(h``NULL``h]hNULL}(hjH]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/]ubh and -ENOENT is returned}(hj/]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMH hj+]ubah}(h]h ]h"]h$]h&]uh1j+hj\ubj+)}(hnfor all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. h]j9)}(hmfor all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**.h](hbfor all other flags a new folio is allocated, inserted into the page cache and returned locked in }(hjk]hhhNhNubjz)}(h **foliop**h]hfoliop}(hjs]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjk]ubh.}(hjk]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMI hjg]ubah}(h]h ]h"]h$]h&]uh1j+hj\ubeh}(h]h ]h"]h$]h&]j%j&uh1jhj$]hMG hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMJ hj\ubah}(h]h ]h"]h$]h&]uh1jhj%[ubj9)}(h **Context**h]jz)}(hj]h]hContext}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chML hj%[ubj9)}(h May sleep.h]h May sleep.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chML hj%[ubj9)}(h **Return**h]jz)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMN hj%[ubj9)}(h,0 if successful, else a negative error code.h]h,0 if successful, else a negative error code.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMM hj%[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$shmem_kernel_file_setup (C function)c.shmem_kernel_file_setuphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hZstruct file * shmem_kernel_file_setup (const char *name, loff_t size, unsigned long flags)h]h)}(hXstruct file *shmem_kernel_file_setup(const char *name, loff_t size, unsigned long flags)h](j!)}(hj$h]hstruct}(hj^hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hj&^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj%^hMubh)}(hhh]h)}(hfileh]hfile}(hj7^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4^ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj9^modnameN classnameNj\j_)}jb]je)}jXshmem_kernel_file_setupsbc.shmem_kernel_file_setupasbuh1hhj^hhhj%^hMubj)}(h h]h }(hjX^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj%^hMubj2 )}(hj5 h]h*}(hjf^hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^hhhj%^hMubh)}(hshmem_kernel_file_setuph]h)}(hjU^h]hshmem_kernel_file_setup}(hjw^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj%^hMubj)}(h4(const char *name, loff_t size, unsigned long flags)h](j)}(hconst char *nameh](j!)}(hjeh]hconst}(hj^hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hcharh]hchar}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj2 )}(hj5 h]h*}(hj^hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj^ubh)}(hnameh]hname}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubj)}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj^modnameN classnameNj\j_)}jb]jS^c.shmem_kernel_file_setupasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hsizeh]hsize}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj7_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubj)}(h h]h }(hjE_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubj)}(hlongh]hlong}(hjS_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubj)}(h h]h }(hja_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubh)}(hflagsh]hflags}(hjo_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhj%^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj%^hMubah}(h]j ^ah ](jjeh"]h$]h&]jj)jhuh1hhj%^hMhj ^hhubj )}(hhh]j9)}(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_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj ^hhhj%^hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const char *name`` name for dentry (to be seen in /proc//maps) ``loff_t size`` size to be set for the file ``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj_ubj)}(hhh](j)}(hF``const char *name`` name for dentry (to be seen in /proc//maps) h](j)}(h``const char *name``h]j?)}(hj_h]hconst char *name}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj_ubj)}(hhh]j9)}(h0name for dentry (to be seen in /proc//maps)h]h0name for dentry (to be seen in /proc//maps)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj_ubj)}(h,``loff_t size`` size to be set for the file h](j)}(h``loff_t size``h]j?)}(hj`h]h loff_t size}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj `ubj)}(hhh]j9)}(hsize to be set for the fileh]hsize to be set for the file}(hj,`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(`hMhj)`ubah}(h]h ]h"]h$]h&]uh1jhj `ubeh}(h]h ]h"]h$]h&]uh1jhj(`hMhj_ubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j?)}(hjL`h]hunsigned long flags}(hjN`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJ`ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjF`ubj)}(hhh]j9)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hje`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjb`ubah}(h]h ]h"]h$]h&]uh1jhjF`ubeh}(h]h ]h"]h$]h&]uh1jhja`hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_file_setup (C function)c.shmem_file_setuphNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSstruct file * shmem_file_setup (const char *name, loff_t size, unsigned long flags)h]h)}(hQstruct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)h](j!)}(hj$h]hstruct}(hj`hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj`hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubh)}(hhh]h)}(hfileh]hfile}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]je)}jXshmem_file_setupsbc.shmem_file_setupasbuh1hhj`hhhj`hMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubj2 )}(hj5 h]h*}(hj`hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj`hhhj`hMubh)}(hshmem_file_setuph]h)}(hj`h]hshmem_file_setup}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhj`hMubj)}(h4(const char *name, loff_t size, unsigned long flags)h](j)}(hconst char *nameh](j!)}(hjeh]hconst}(hj ahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjaubj)}(h h]h }(hj-ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hcharh]hchar}(hj;ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjIahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj2 )}(hj5 h]h*}(hjWahhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjaubh)}(hnameh]hname}(hjdahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubj)}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}aubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]j`c.shmem_file_setupasbuh1hhjyaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyaubh)}(hsizeh]hsize}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hflagsh]hflags}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjaubeh}(h]h ]h"]h$]h&]jj uh1jhj`hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj`hMhj`hhubj )}(hhh]j9)}(h$get an unlinked file living in tmpfsh]h$get an unlinked file living in tmpfs}(hj'bhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj$bhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?bj4j?bj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``const char *name`` name for dentry (to be seen in /proc//maps) ``loff_t size`` size to be set for the file ``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j9)}(h**Parameters**h]jz)}(hjIbh]h Parameters}(hjKbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGbubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjCbubj)}(hhh](j)}(hF``const char *name`` name for dentry (to be seen in /proc//maps) h](j)}(h``const char *name``h]j?)}(hjhbh]hconst char *name}(hjjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfbubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjbbubj)}(hhh]j9)}(h0name for dentry (to be seen in /proc//maps)h]h0name for dentry (to be seen in /proc//maps)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}bhMhj~bubah}(h]h ]h"]h$]h&]uh1jhjbbubeh}(h]h ]h"]h$]h&]uh1jhj}bhMhj_bubj)}(h,``loff_t size`` size to be set for the file h](j)}(h``loff_t size``h]j?)}(hjbh]h loff_t size}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjbubj)}(hhh]j9)}(hsize to be set for the fileh]hsize to be set for the file}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj_bubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j?)}(hjbh]hunsigned long flags}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjbubj)}(hhh]j9)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj_bubeh}(h]h ]h"]h$]h&]uh1jhjCbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&shmem_file_setup_with_mnt (C function)c.shmem_file_setup_with_mnthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hrstruct file * shmem_file_setup_with_mnt (struct vfsmount *mnt, const char *name, loff_t size, unsigned long flags)h]h)}(hpstruct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, const char *name, loff_t size, unsigned long flags)h](j!)}(hj$h]hstruct}(hj4chhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj0chhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hjBchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0chhhjAchMubh)}(hhh]h)}(hfileh]hfile}(hjSchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjUcmodnameN classnameNj\j_)}jb]je)}jXshmem_file_setup_with_mntsbc.shmem_file_setup_with_mntasbuh1hhj0chhhjAchMubj)}(h h]h }(hjtchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0chhhjAchMubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj0chhhjAchMubh)}(hshmem_file_setup_with_mnth]h)}(hjqch]hshmem_file_setup_with_mnt}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0chhhjAchMubj)}(hJ(struct vfsmount *mnt, const char *name, loff_t size, unsigned long flags)h](j)}(hstruct vfsmount *mnth](j!)}(hj$h]hstruct}(hjchhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]h)}(hvfsmounth]hvfsmount}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjcmodnameN classnameNj\j_)}jb]jocc.shmem_file_setup_with_mntasbuh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjcubh)}(hmnth]hmnt}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hconst char *nameh](j!)}(hjeh]hconst}(hjdhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjdubj)}(h h]h }(hj+dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hcharh]hchar}(hj9dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjGdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj2 )}(hj5 h]h*}(hjUdhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjdubh)}(hnameh]hname}(hjbdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hj~dhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{dubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjdmodnameN classnameNj\j_)}jb]jocc.shmem_file_setup_with_mntasbuh1hhjwdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwdubh)}(hsizeh]hsize}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwdubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hflagsh]hflags}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjcubeh}(h]h ]h"]h$]h&]jj uh1jhj0chhhjAchMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj,chhhjAchMubah}(h]j'cah ](jjeh"]h$]h&]jj)jhuh1hhjAchMhj)chhubj )}(hhh]j9)}(h$get an unlinked file living in tmpfsh]h$get an unlinked file living in tmpfs}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj"ehhubah}(h]h ]h"]h$]h&]uh1jhj)chhhjAchMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j=ej4j=ej5j6j7uh1hhhhj qhNhNubjp)}(hX-**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 ``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j9)}(h**Parameters**h]jz)}(hjGeh]h Parameters}(hjIehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEeubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjAeubj)}(hhh](j)}(hH``struct vfsmount *mnt`` the tmpfs mount where the file will be created h](j)}(h``struct vfsmount *mnt``h]j?)}(hjfeh]hstruct vfsmount *mnt}(hjhehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdeubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj`eubj)}(hhh]j9)}(h.the tmpfs mount where the file will be createdh]h.the tmpfs mount where the file will be created}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{ehMhj|eubah}(h]h ]h"]h$]h&]uh1jhj`eubeh}(h]h ]h"]h$]h&]uh1jhj{ehMhj]eubj)}(hF``const char *name`` name for dentry (to be seen in /proc//maps) h](j)}(h``const char *name``h]j?)}(hjeh]hconst char *name}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjeubj)}(hhh]j9)}(h0name for dentry (to be seen in /proc//maps)h]h0name for dentry (to be seen in /proc//maps)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhj]eubj)}(h,``loff_t size`` size to be set for the file h](j)}(h``loff_t size``h]j?)}(hjeh]h loff_t size}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjeubj)}(hhh]j9)}(hsize to be set for the fileh]hsize to be set for the file}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhj]eubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j?)}(hjfh]hunsigned long flags}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj fubj)}(hhh]j9)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hj*fhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj'fubah}(h]h ]h"]h$]h&]uh1jhj fubeh}(h]h ]h"]h$]h&]uh1jhj&fhMhj]eubeh}(h]h ]h"]h$]h&]uh1jhjAeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_zero_setup (C function)c.shmem_zero_setuphNtauh1hhj qhhhNhNubh)}(hhh](h)}(h1int shmem_zero_setup (struct vm_area_struct *vma)h]h)}(h0int shmem_zero_setup(struct vm_area_struct *vma)h](j)}(hinth]hint}(hjkfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgfhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hjzfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgfhhhjyfhMubh)}(hshmem_zero_setuph]h)}(hshmem_zero_setuph]hshmem_zero_setup}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjgfhhhjyfhMubj)}(h(struct vm_area_struct *vma)h]j)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjfhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjfmodnameN classnameNj\j_)}jb]je)}jXjfsbc.shmem_zero_setupasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj2 )}(hj5 h]h*}(hjfhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjfubh)}(hvmah]hvma}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjfubah}(h]h ]h"]h$]h&]jj uh1jhjgfhhhjyfhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjcfhhhjyfhMubah}(h]j^fah ](jjeh"]h$]h&]jj)jhuh1hhjyfhMhj`fhhubj )}(hhh]j9)}(h setup a shared anonymous mappingh]h setup a shared anonymous mapping}(hj+ghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj(ghhubah}(h]h ]h"]h$]h&]uh1jhj`fhhhjyfhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCgj4jCgj5j6j7uh1hhhhj qhNhNubjp)}(h]**Parameters** ``struct vm_area_struct *vma`` the vma to be mmapped is prepared by do_mmaph](j9)}(h**Parameters**h]jz)}(hjMgh]h Parameters}(hjOghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKgubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjGgubj)}(hhh]j)}(hK``struct vm_area_struct *vma`` the vma to be mmapped is prepared by do_mmaph](j)}(h``struct vm_area_struct *vma``h]j?)}(hjlgh]hstruct vm_area_struct *vma}(hjnghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjgubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjfgubj)}(hhh]j9)}(h,the vma to be mmapped is prepared by do_mmaph]h,the vma to be mmapped is prepared by do_mmap}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjgubah}(h]h ]h"]h$]h&]uh1jhjfgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjcgubah}(h]h ]h"]h$]h&]uh1jhjGgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!shmem_read_folio_gfp (C function)c.shmem_read_folio_gfphNtauh1hhj qhhhNhNubh)}(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!)}(hj$h]hstruct}(hjghhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjghhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghMubh)}(hhh]h)}(hfolioh]hfolio}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjgmodnameN classnameNj\j_)}jb]je)}jXshmem_read_folio_gfpsbc.shmem_read_folio_gfpasbuh1hhjghhhjghMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghMubj2 )}(hj5 h]h*}(hjhhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjghhhjghMubh)}(hshmem_read_folio_gfph]h)}(hjhh]hshmem_read_folio_gfp}(hj%hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!hubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMubj)}(h9(struct address_space *mapping, pgoff_t index, gfp_t gfp)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj@hhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ah"]h$]h&]uh1j1 hjread_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](j9)}(h**Parameters**h]jz)}(hjsih]h Parameters}(hjuihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqiubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjmiubj)}(hhh](j)}(h<``struct address_space *mapping`` the folio's address_space h](j)}(h!``struct address_space *mapping``h]j?)}(hjih]hstruct address_space *mapping}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjiubj)}(hhh]j9)}(hthe folio's address_spaceh]hthe folio’s address_space}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubj)}(h"``pgoff_t index`` the folio index h](j)}(h``pgoff_t index``h]j?)}(hjih]h pgoff_t index}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjiubj)}(hhh]j9)}(hthe folio indexh]hthe folio index}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjiubj)}(h<``gfp_t gfp`` the page allocator flags to use if allocating h](j)}(h ``gfp_t gfp``h]j?)}(hjjh]h gfp_t gfp}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjiubj)}(hhh]j9)}(h-the page allocator flags to use if allocatingh]h-the page allocator flags to use if allocating}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjmiubj9)}(h**Description**h]jz)}(hj?jh]h Description}(hjAjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=jubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjmiubj9)}(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.}(hjUjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjmiubj9)}(hi915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.h]hi915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.}(hjdjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjmiubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_vma_setup (C function)c.migrate_vma_setuphNtauh1hhj qhhhNhNubh)}(hhh](h)}(h0int migrate_vma_setup (struct migrate_vma *args)h]h)}(h/int migrate_vma_setup(struct migrate_vma *args)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubh)}(hmigrate_vma_setuph]h)}(hmigrate_vma_setuph]hmigrate_vma_setup}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhjjhMubj)}(h(struct migrate_vma *args)h]j)}(hstruct migrate_vma *argsh](j!)}(hj$h]hstruct}(hjjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]h)}(h migrate_vmah]h migrate_vma}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjjmodnameN classnameNj\j_)}jb]je)}jXjjsbc.migrate_vma_setupasbuh1hhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj2 )}(hj5 h]h*}(hjkhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjjubh)}(hargsh]hargs}(hj)khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjjubah}(h]h ]h"]h$]h&]jj uh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1hhjjhMhjjhhubj )}(hhh]j9)}(h$prepare to migrate a range of memoryh]h$prepare to migrate a range of memory}(hjSkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjPkhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkkj4jkkj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjukh]h Parameters}(hjwkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjskubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj)}(hhh]j)}(hX``struct migrate_vma *args`` contains the vma, start, and pfns arrays for the migration h](j)}(h``struct migrate_vma *args``h]j?)}(hjkh]hstruct migrate_vma *args}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjkubj)}(hhh]j9)}(h:contains the vma, start, and pfns arrays for the migrationh]h:contains the vma, start, and pfns arrays for the migration}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjokubj9)}(h **Return**h]jz)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hRnegative errno on failures, 0 when 0 or more pages were migrated without an error.h]hRnegative errno on failures, 0 when 0 or more pages were migrated without an error.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hXPrepare 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]hXPrepare 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 lhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hXThe 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]hXThe 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().}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hXNote 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]hXNote that the caller does not have to migrate all the pages that are marked with MIGRATE_PFN_MIGRATE flag in src array unless this is a migration from device memory to system memory. If the caller cannot migrate a device page back to system memory, then it must return VM_FAULT_SIGBUS, which has severe consequences for the userspace process, so it must be avoided if at all possible.}(hj*lhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(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.}(hj9lhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hXAfter 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]hXAfter 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.}(hjHlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hAt 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]hAt 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.}(hjWlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(hOnce 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]hOnce 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.}(hjflhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM hjokubj9)}(hIt 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]hIt 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).}(hjulhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubj9)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjokubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!migrate_device_pages (C function)c.migrate_device_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hbvoid migrate_device_pages (unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)h]h)}(havoid migrate_device_pages(unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhjlhMubh)}(hmigrate_device_pagesh]h)}(hmigrate_device_pagesh]hmigrate_device_pages}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhjlhMubj)}(hH(unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)h](j)}(hunsigned long *src_pfnsh](j)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hlongh]hlong}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj2 )}(hj5 h]h*}(hj(mhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjlubh)}(hsrc_pfnsh]hsrc_pfns}(hj5mhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hunsigned long *dst_pfnsh](j)}(hunsignedh]hunsigned}(hjNmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJmubj)}(h h]h }(hj\mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJmubj)}(hlongh]hlong}(hjjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJmubj)}(h h]h }(hjxmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJmubj2 )}(hj5 h]h*}(hjmhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJmubh)}(hdst_pfnsh]hdst_pfns}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hunsigned long npagesh](j)}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hlongh]hlong}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hnpagesh]hnpages}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubeh}(h]h ]h"]h$]h&]jj uh1jhjlhhhjlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjlhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1hhjlhMhjlhhubj )}(hhh]j9)}(h+migrate meta-data from src page to dst pageh]h+migrate meta-data from src page to dst page}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj nhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&nj4j&nj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj0nh]h Parameters}(hj2nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.nubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj*nubj)}(hhh](j)}(hJ``unsigned long *src_pfns`` src_pfns returned from migrate_device_range() h](j)}(h``unsigned long *src_pfns``h]j?)}(hjOnh]hunsigned long *src_pfns}(hjQnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjInubj)}(hhh]j9)}(h-src_pfns returned from migrate_device_range()h]h-src_pfns returned from migrate_device_range()}(hjhnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdnhMhjenubah}(h]h ]h"]h$]h&]uh1jhjInubeh}(h]h ]h"]h$]h&]uh1jhjdnhMhjFnubj)}(hW``unsigned long *dst_pfns`` array of pfns allocated by the driver to migrate memory to h](j)}(h``unsigned long *dst_pfns``h]j?)}(hjnh]hunsigned long *dst_pfns}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjnubj)}(hhh]j9)}(h:array of pfns allocated by the driver to migrate memory toh]h:array of pfns allocated by the driver to migrate memory to}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjFnubj)}(h6``unsigned long npages`` number of pages in the range h](j)}(h``unsigned long npages``h]j?)}(hjnh]hunsigned long npages}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjnubj)}(hhh]j9)}(hnumber of pages in the rangeh]hnumber of pages in the range}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjFnubeh}(h]h ]h"]h$]h&]uh1jhj*nubj9)}(h**Description**h]jz)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj*nubj9)}(hzEquivalent to migrate_vma_pages(). This is called to migrate struct page meta-data from source struct page to destination.h]hzEquivalent to migrate_vma_pages(). This is called to migrate struct page meta-data from source struct page to destination.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj*nubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_vma_pages (C function)c.migrate_vma_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h4void migrate_vma_pages (struct migrate_vma *migrate)h]h)}(h3void migrate_vma_pages(struct migrate_vma *migrate)h](j)}(hvoidh]hvoid}(hjAohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ohhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM(ubj)}(h h]h }(hjPohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ohhhjOohM(ubh)}(hmigrate_vma_pagesh]h)}(hmigrate_vma_pagesh]hmigrate_vma_pages}(hjbohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^oubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=ohhhjOohM(ubj)}(h(struct migrate_vma *migrate)h]j)}(hstruct migrate_vma *migrateh](j!)}(hj$h]hstruct}(hj~ohhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjzoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzoubh)}(hhh]h)}(h migrate_vmah]h migrate_vma}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjomodnameN classnameNj\j_)}jb]je)}jXjdosbc.migrate_vma_pagesasbuh1hhjzoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzoubj2 )}(hj5 h]h*}(hjohhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjzoubh)}(hmigrateh]hmigrate}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzoubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjvoubah}(h]h ]h"]h$]h&]jj uh1jhj=ohhhjOohM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9ohhhjOohM(ubah}(h]j4oah ](jjeh"]h$]h&]jj)jhuh1hhjOohM(hj6ohhubj )}(hhh]j9)}(h+migrate meta-data from src page to dst pageh]h+migrate meta-data from src page to dst page}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM(hjohhubah}(h]h ]h"]h$]h&]uh1jhj6ohhhjOohM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj#ph]h Parameters}(hj%phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!pubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM,hjpubj)}(hhh]j)}(hT``struct migrate_vma *migrate`` migrate struct containing all migration information h](j)}(h``struct migrate_vma *migrate``h]j?)}(hjBph]hstruct migrate_vma *migrate}(hjDphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@pubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM)hj ah"]h$]h&]uh1j1 hjpubh)}(hmigrateh]hmigrate}(hjXqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubah}(h]h ]h"]h$]h&]jj uh1jhjphhhjphM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjphM{ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjphM{hjphhubj )}(hhh]j9)}(hrestore CPU page table entryh]hrestore CPU page table entry}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM{hjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphM{ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjqubj)}(hhh]j)}(hT``struct migrate_vma *migrate`` migrate struct containing all migration information h](j)}(h``struct migrate_vma *migrate``h]j?)}(hjqh]hstruct migrate_vma *migrate}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM|hjqubj)}(hhh]j9)}(h3migrate struct containing all migration informationh]h3migrate struct containing all migration information}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhM|hjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhM|hjqubah}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjqh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM~hjqubj9)}(hThis 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]hThis 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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM~hjqubj9)}(hiThis also unlocks the pages and puts them back on the lru, or drops the extra refcount, for device pages.h]hiThis also unlocks the pages and puts them back on the lru, or drops the extra refcount, for device pages.}(hj#rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!migrate_device_range (C function)c.migrate_device_rangehNtauh1hhj qhhhNhNubh)}(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)}(hinth]hint}(hjRrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNrhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hjarhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNrhhhj`rhMubh)}(hmigrate_device_rangeh]h)}(hmigrate_device_rangeh]hmigrate_device_range}(hjsrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjorubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNrhhhj`rhMubj)}(hD(unsigned long *src_pfns, unsigned long start, unsigned long npages)h](j)}(hunsigned long *src_pfnsh](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hlongh]hlong}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj2 )}(hj5 h]h*}(hjrhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjrubh)}(hsrc_pfnsh]hsrc_pfns}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubj)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hlongh]hlong}(hj shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hstarth]hstart}(hj%shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubj)}(hunsigned long npagesh](j)}(hunsignedh]hunsigned}(hj>shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:subj)}(h h]h }(hjLshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:subj)}(hlongh]hlong}(hjZshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:subj)}(h h]h }(hjhshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:subh)}(hnpagesh]hnpages}(hjvshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:subeh}(h]h ]h"]h$]h&]noemphjj uh1jhjrubeh}(h]h ]h"]h$]h&]jj uh1jhjNrhhhj`rhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJrhhhj`rhMubah}(h]jErah ](jjeh"]h$]h&]jj)jhuh1hhj`rhMhjGrhhubj )}(hhh]j9)}(h-migrate device private pfns to normal memory.h]h-migrate device private pfns to normal memory.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjGrhhhj`rhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``unsigned long *src_pfns`` array large enough to hold migrating source device private pfns. ``unsigned long start`` starting pfn in the range to migrate. ``unsigned long npages`` number of pages to migrate. **Description** migrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead. This is useful when a driver needs to free device memory but doesn't know the virtual mappings of every page that may be in device memory. For example this is often the case when a driver is being unloaded or unbound from a device. Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren't free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().h](j9)}(h**Parameters**h]jz)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubj)}(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]j?)}(hjsh]hunsigned long *src_pfns}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubj)}(hhh]j9)}(h@array large enough to hold migrating source device private pfns.h]h@array large enough to hold migrating source device private pfns.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubj)}(h>``unsigned long start`` starting pfn in the range to migrate. h](j)}(h``unsigned long start``h]j?)}(hjth]hunsigned long start}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjtubj)}(hhh]j9)}(h%starting pfn in the range to migrate.h]h%starting pfn in the range to migrate.}(hj3thhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/thMhj0tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj/thMhjsubj)}(h5``unsigned long npages`` number of pages to migrate. h](j)}(h``unsigned long npages``h]j?)}(hjSth]hunsigned long npages}(hjUthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjMtubj)}(hhh]j9)}(hnumber of pages to migrate.h]hnumber of pages to migrate.}(hjlthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhthMhjitubah}(h]h ]h"]h$]h&]uh1jhjMtubeh}(h]h ]h"]h$]h&]uh1jhjhthMhjsubeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubj9)}(hmigrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead.h]hmigrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubj9)}(hThis is useful when a driver needs to free device memory but doesn't know the virtual mappings of every page that may be in device memory. For example this is often the case when a driver is being unloaded or unbound from a device.h]hThis 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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubj9)}(hX Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren't free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().h]hX Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren’t free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ migrate_device_pfns (C function)c.migrate_device_pfnshNtauh1hhj qhhhNhNubh)}(hhh](h)}(hGint migrate_device_pfns (unsigned long *src_pfns, unsigned long npages)h]h)}(hFint migrate_device_pfns(unsigned long *src_pfns, unsigned long npages)h](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjthMubh)}(hmigrate_device_pfnsh]h)}(hmigrate_device_pfnsh]hmigrate_device_pfns}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjthMubj)}(h/(unsigned long *src_pfns, unsigned long npages)h](j)}(hunsigned long *src_pfnsh](j)}(hunsignedh]hunsigned}(hj.uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*uubj)}(h h]h }(hj ah"]h$]h&]uh1j1 hj*uubh)}(hsrc_pfnsh]hsrc_pfns}(hjsuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*uubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj&uubj)}(hunsigned long npagesh](j)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hlongh]hlong}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hnpagesh]hnpages}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj&uubeh}(h]h ]h"]h$]h&]jj uh1jhjthhhjthMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjthMubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1hhjthMhjthhubj )}(hhh]j9)}(h-migrate device private pfns to normal memory.h]h-migrate device private pfns to normal memory.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jvj4jvj5j6j7uh1hhhhj qhNhNubjp)}(hX#**Parameters** ``unsigned long *src_pfns`` pre-popluated 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-popluated array of device pages to migrate.h](j9)}(h**Parameters**h]jz)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj vubj)}(hhh](j)}(hZ``unsigned long *src_pfns`` pre-popluated array of source device private pfns to migrate. h](j)}(h``unsigned long *src_pfns``h]j?)}(hj/vh]hunsigned long *src_pfns}(hj1vhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-vubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj)vubj)}(hhh]j9)}(h=pre-popluated array of source device private pfns to migrate.h]h=pre-popluated array of source device private pfns to migrate.}(hjHvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDvhMhjEvubah}(h]h ]h"]h$]h&]uh1jhj)vubeh}(h]h ]h"]h$]h&]uh1jhjDvhMhj&vubj)}(h5``unsigned long npages`` number of pages to migrate. h](j)}(h``unsigned long npages``h]j?)}(hjhvh]hunsigned long npages}(hjjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfvubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjbvubj)}(hhh]j9)}(hnumber of pages to migrate.h]hnumber of pages to migrate.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}vhMhj~vubah}(h]h ]h"]h$]h&]uh1jhjbvubeh}(h]h ]h"]h$]h&]uh1jhj}vhMhj&vubeh}(h]h ]h"]h$]h&]uh1jhj vubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj vubj9)}(hmSimilar to migrate_device_range() but supports non-contiguous pre-popluated array of device pages to migrate.h]hmSimilar to migrate_device_range() but supports non-contiguous pre-popluated array of device pages to migrate.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj vubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubj.)}(hA#kernel-doc:: mm/nommu.c (duplicates kernel-doc from other files)h]hA#kernel-doc:: mm/nommu.c (duplicates kernel-doc from other files)}hjvsbah}(h]h ]h"]h$]h&]jj uh1j-hj qhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwp_walk (C struct) c.wp_walkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hwp_walkh]h)}(hstruct wp_walkh](j!)}(hj$h]hstruct}(hjvhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjvhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjwhKubh)}(hwp_walkh]h)}(hjvh]hwp_walk}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjwhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjwhKubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1hhjwhKhjvhhubj )}(hhh]j9)}(h+Private struct for pagetable walk callbacksh]h+Private struct for pagetable walk callbacks}(hj8whhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK hj5whhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjwhKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jPwj4jPwj5j6j7uh1hhhhj qhNhNubjp)}(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 ptesh](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj\whhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXwubh:}(hjXwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjTwubj)}(hstruct wp_walk { struct mmu_notifier_range range; unsigned long tlbflush_start; unsigned long tlbflush_end; unsigned long total; };h]hstruct wp_walk { struct mmu_notifier_range range; unsigned long tlbflush_start; unsigned long tlbflush_end; unsigned long total; };}hjuwsbah}(h]h ]h"]h$]h&]jj uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjTwubj9)}(h **Members**h]jz)}(hjwh]hMembers}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjTwubj)}(hhh](j)}(h"``range`` Range for mmu notifiers h](j)}(h ``range``h]j?)}(hjwh]hrange}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK hjwubj)}(hhh]j9)}(hRange for mmu notifiersh]hRange for mmu notifiers}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhK hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhK hjwubj)}(h1``tlbflush_start`` Address of first modified pte h](j)}(h``tlbflush_start``h]j?)}(hjwh]htlbflush_start}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjwubj)}(hhh]j9)}(hAddress of first modified pteh]hAddress of first modified pte}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhKhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhKhjwubj)}(h2``tlbflush_end`` Address of last modified pte + 1 h](j)}(h``tlbflush_end``h]j?)}(hjxh]h tlbflush_end}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjxubj)}(hhh]j9)}(h Address of last modified pte + 1h]h Address of last modified pte + 1}(hj0xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,xhKhj-xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj,xhKhjwubj)}(h'``total`` Total number of modified ptesh](j)}(h ``total``h]j?)}(hjPxh]htotal}(hjRxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNxubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjJxubj)}(hhh]j9)}(hTotal number of modified ptesh]hTotal number of modified ptes}(hjixhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjfxubah}(h]h ]h"]h$]h&]uh1jhjJxubeh}(h]h ]h"]h$]h&]uh1jhjexhKhjwubeh}(h]h ]h"]h$]h&]uh1jhjTwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwp_pte (C function)c.wp_ptehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hTint wp_pte (pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)h]h)}(hSint wp_pte(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)h](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhKubh)}(hwp_pteh]h)}(hwp_pteh]hwp_pte}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjxhKubj)}(hI(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)h](j)}(h pte_t *pteh](h)}(hhh]h)}(hpte_th]hpte_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjxmodnameN classnameNj\j_)}jb]je)}jXjxsbc.wp_pteasbuh1hhjxubj)}(h h]h }(hj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj2 )}(hj5 h]h*}(hjyhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjxubh)}(hpteh]hpte}(hj%yhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj>yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:yubj)}(h h]h }(hjLyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:yubj)}(hlongh]hlong}(hjZyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:yubj)}(h h]h }(hjhyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:yubh)}(haddrh]haddr}(hjvyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:yubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hlongh]hlong}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hendh]hend}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubj)}(hstruct mm_walk *walkh](j!)}(hj$h]hstruct}(hjyhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]h)}(hmm_walkh]hmm_walk}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjzmodnameN classnameNj\j_)}jb]jyc.wp_pteasbuh1hhjyubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj2 )}(hj5 h]h*}(hj*zhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjyubh)}(hwalkh]hwalk}(hj7zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjxubeh}(h]h ]h"]h$]h&]jj uh1jhjxhhhjxhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjxhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjxhKhjxhhubj )}(hhh]j9)}(hWrite-protect a pteh]hWrite-protect a pte}(hjazhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj^zhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyzj4jyzj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}zubj)}(hhh](j)}(h"``pte_t *pte`` Pointer to the pte h](j)}(h``pte_t *pte``h]j?)}(hjzh]h pte_t *pte}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjzubj)}(hhh]j9)}(hPointer to the pteh]hPointer to the pte}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhKhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhKhjzubj)}(h?``unsigned long addr`` The start of protecting virtual address h](j)}(h``unsigned long addr``h]j?)}(hjzh]hunsigned long addr}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjzubj)}(hhh]j9)}(h'The start of protecting virtual addressh]h'The start of protecting virtual address}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhKhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhKhjzubj)}(h<``unsigned long end`` The end of protecting virtual address h](j)}(h``unsigned long end``h]j?)}(hj{h]hunsigned long end}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj{ubj)}(hhh]j9)}(h%The end of protecting virtual addressh]h%The end of protecting virtual address}(hj-{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj){hKhj*{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj){hKhjzubj)}(h:``struct mm_walk *walk`` pagetable walk callback argument h](j)}(h``struct mm_walk *walk``h]j?)}(hjM{h]hstruct mm_walk *walk}(hjO{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjK{ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjG{ubj)}(hhh]j9)}(h pagetable walk callback argumenth]h pagetable walk callback argument}(hjf{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjb{hKhjc{ubah}(h]h ]h"]h$]h&]uh1jhjG{ubeh}(h]h ]h"]h$]h&]uh1jhjb{hKhjzubeh}(h]h ]h"]h$]h&]uh1jhj}zubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}zubj9)}(hThe function write-protects a pte and records the range in virtual address space of touched ptes for efficient range TLB flushes.h]hThe function write-protects a pte and records the range in virtual address space of touched ptes for efficient range TLB flushes.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}zubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclean_walk (C struct) c.clean_walkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h clean_walkh]h)}(hstruct clean_walkh](j!)}(hj$h]hstruct}(hj{hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj{hhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK%ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hK%ubh)}(h clean_walkh]h)}(hj{h]h clean_walk}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhj{hK%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj{hK%ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhj{hK%hj{hhubj )}(hhh]j9)}(h1Private struct for the clean_record_pte function.h]h1Private struct for the clean_record_pte function.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK7hj |hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hK%ubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j'|j4j'|j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj3|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/|ubh:}(hj/|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK;hj+|ubj)}(hstruct clean_walk { struct wp_walk base; pgoff_t bitmap_pgoff; unsigned long *bitmap; pgoff_t start; pgoff_t end; };h]hstruct clean_walk { struct wp_walk base; pgoff_t bitmap_pgoff; unsigned long *bitmap; pgoff_t start; pgoff_t end; };}hjL|sbah}(h]h ]h"]h$]h&]jj uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK=hj+|ubj9)}(h **Members**h]jz)}(hj]|h]hMembers}(hj_|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[|ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKEhj+|ubj)}(hhh](j)}(h'``base`` struct wp_walk we derive from h](j)}(h``base``h]j?)}(hj||h]hbase}(hj~|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjz|ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK9hjv|ubj)}(hhh]j9)}(hstruct wp_walk we derive fromh]hstruct wp_walk we derive from}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hK9hj|ubah}(h]h ]h"]h$]h&]uh1jhjv|ubeh}(h]h ]h"]h$]h&]uh1jhj|hK9hjs|ubj)}(hJ``bitmap_pgoff`` Address_space Page offset of the first bit in **bitmap** h](j)}(h``bitmap_pgoff``h]j?)}(hj|h]h bitmap_pgoff}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK:hj|ubj)}(hhh]j9)}(h8Address_space Page offset of the first bit in **bitmap**h](h.Address_space Page offset of the first bit in }(hj|hhhNhNubjz)}(h **bitmap**h]hbitmap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubeh}(h]h ]h"]h$]h&]uh1j8hj|hK:hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hK:hjs|ubj)}(hX``bitmap`` Bitmap with one bit for each page offset in the address_space range covered. h](j)}(h ``bitmap``h]j?)}(hj|h]hbitmap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj4}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK>hj0}ubj)}(hhh]j9)}(hLAddress_space page offset of first modified pte relative to **bitmap_pgoff**h](hhjs|ubj)}(hS``end`` Address_space page offset of last modified pte relative to **bitmap_pgoff**h](j)}(h``end``h]j?)}(hj~}h]hend}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK?hjx}ubj)}(hhh]j9)}(hKAddress_space page offset of last modified pte relative to **bitmap_pgoff**h](h;Address_space page offset of last modified pte relative to }(hj}hhhNhNubjz)}(h**bitmap_pgoff**h]h bitmap_pgoff}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubeh}(h]h ]h"]h$]h&]uh1j8hj}hK?hj}ubah}(h]h ]h"]h$]h&]uh1jhjx}ubeh}(h]h ]h"]h$]h&]uh1jhj}hK?hjs|ubeh}(h]h ]h"]h$]h&]uh1jhj+|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclean_record_pte (C function)c.clean_record_ptehNtauh1hhj qhhhNhNubh)}(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)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKLubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hKLubh)}(hclean_record_pteh]h)}(hclean_record_pteh]hclean_record_pte}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhj}hKLubj)}(hI(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)h](j)}(h pte_t *pteh](h)}(hhh]h)}(hpte_th]hpte_t}(hj%~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj'~modnameN classnameNj\j_)}jb]je)}jXj~sbc.clean_record_pteasbuh1hhj~ubj)}(h h]h }(hjE~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj2 )}(hj5 h]h*}(hjS~hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj~ubh)}(hpteh]hpte}(hj`~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjy~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju~ubj)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju~ubh)}(haddrh]haddr}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubj)}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hendh]hend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubj)}(hstruct mm_walk *walkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmm_walkh]hmm_walk}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]jA~c.clean_record_pteasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjehhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hwalkh]hwalk}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubeh}(h]h ]h"]h$]h&]jj uh1jhj}hhhj}hKLubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhj}hKLubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1hhj}hKLhj}hhubj )}(hhh]j9)}(h;Clean a pte and record its address space offset in a bitmaph]h;Clean a pte and record its address space offset in a bitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKLhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hKLubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKPhjubj)}(hhh](j)}(h"``pte_t *pte`` Pointer to the pte h](j)}(h``pte_t *pte``h]j?)}(hjh]h pte_t *pte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKNhjubj)}(hhh]j9)}(hPointer to the pteh]hPointer to the pte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKNhjubj)}(h@``unsigned long addr`` The start of virtual address to be clean h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKOhjubj)}(hhh]j9)}(h(The start of virtual address to be cleanh]h(The start of virtual address to be clean}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hKOhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKOhjubj)}(h=``unsigned long end`` The end of virtual address to be clean h](j)}(h``unsigned long end``h]j?)}(hjOh]hunsigned long end}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKPhjIubj)}(hhh]j9)}(h&The end of virtual address to be cleanh]h&The end of virtual address to be clean}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhKPhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhKPhjubj)}(h:``struct mm_walk *walk`` pagetable walk callback argument h](j)}(h``struct mm_walk *walk``h]j?)}(hjh]hstruct mm_walk *walk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKQhjubj)}(hhh]j9)}(h pagetable walk callback argumenth]h pagetable walk callback argument}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKQhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjÀh]h Description}(hjŀhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKShjubj9)}(hThe 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]hThe 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ـhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKShjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$wp_shared_mapping_range (C function)c.wp_shared_mapping_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hfunsigned long wp_shared_mapping_range (struct address_space *mapping, pgoff_t first_index, pgoff_t nr)h]h)}(heunsigned long wp_shared_mapping_range(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hwp_shared_mapping_rangeh]h)}(hwp_shared_mapping_rangeh]hwp_shared_mapping_range}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h@(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjahhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]h)}(h address_spaceh]h address_space}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjGsbc.wp_shared_mapping_rangeasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj]ubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(hpgoff_t first_indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjցhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӁubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj؁modnameN classnameNj\j_)}jb]jc.wp_shared_mapping_rangeasbuh1hhjρubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjρubh)}(h first_indexh]h first_index}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjρubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubj)}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jc.wp_shared_mapping_rangeasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnrh]hnr}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjYubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h0Write-protect all ptes in an address space rangeh]h0Write-protect all ptes in an address space range}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjubj)}(hhh](j)}(hM``struct address_space *mapping`` The address_space we want to write protect h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjubj)}(hhh]j9)}(h*The address_space we want to write protecth]h*The address_space we want to write protect}(hj΂hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjʂhKhj˂ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʂhKhjubj)}(h;``pgoff_t first_index`` The first page offset in the range h](j)}(h``pgoff_t first_index``h]j?)}(hjh]hpgoff_t first_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjubj)}(hhh]j9)}(h"The first page offset in the rangeh]h"The first page offset in the range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h;``pgoff_t nr`` Number of incremental page offsets to cover h](j)}(h``pgoff_t nr``h]j?)}(hj'h]h pgoff_t nr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj!ubj)}(hhh]j9)}(h+Number of incremental page offsets to coverh]h+Number of incremental page offsets to cover}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Note**h]jz)}(hjbh]hNote}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjubj9)}(hThis 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]hThis 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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjubj9)}(hdThe number of ptes actually write-protected. Note that already write-protected ptes are not counted.h]hdThe number of ptes actually write-protected. Note that already write-protected ptes are not counted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.clean_record_shared_mapping_range (C function)#c.clean_record_shared_mapping_rangehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hunsigned 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)}(hunsigned 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)}(hunsignedh]hunsigned}(hj΃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʃhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMubj)}(h h]h }(hj݃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʃhhhj܃hMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʃhhhj܃hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʃhhhj܃hMubh)}(h!clean_record_shared_mapping_rangeh]h)}(h!clean_record_shared_mapping_rangeh]h!clean_record_shared_mapping_range}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjʃhhhj܃hMubj)}(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)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hj'hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]h)}(h address_spaceh]h address_space}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjGmodnameN classnameNj\j_)}jb]je)}jXj sb#c.clean_record_shared_mapping_rangeasbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj2 )}(hj5 h]h*}(hjshhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj#ubh)}(hmappingh]hmapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgoff_t first_indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]ja#c.clean_record_shared_mapping_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h first_indexh]h first_index}(hjȄhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]ja#c.clean_record_shared_mapping_rangeasbuh1hhj݄ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݄ubh)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj݄ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgoff_t bitmap_pgoffh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj.modnameN classnameNj\j_)}jb]ja#c.clean_record_shared_mapping_rangeasbuh1hhj%ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(h bitmap_pgoffh]h bitmap_pgoff}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long *bitmaph](j)}(hunsignedh]hunsigned}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjmubh)}(hbitmaph]hbitmap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj҅hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjυubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjԅmodnameN classnameNj\j_)}jb]ja#c.clean_record_shared_mapping_rangeasbuh1hhj˅ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˅ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj˅ubh)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˅ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h pgoff_t *endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj)modnameN classnameNj\j_)}jb]ja#c.clean_record_shared_mapping_rangeasbuh1hhj ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hjShhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hendh]hend}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjʃhhhj܃hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƃhhhj܃hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj܃hMhjÃhhubj )}(hhh]j9)}(h3Clean and record all ptes in an address space rangeh]h3Clean and record all ptes in an address space range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjÃhhhj܃hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjubj)}(hhh](j)}(hE``struct address_space *mapping`` The address_space we want to clean h](j)}(h!``struct address_space *mapping``h]j?)}(hjˆh]hstruct address_space *mapping}(hj͆hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjɆubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjņubj)}(hhh]j9)}(h"The address_space we want to cleanh]h"The address_space we want to clean}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjņubeh}(h]h ]h"]h$]h&]uh1jhjhMhj†ubj)}(h;``pgoff_t first_index`` The first page offset in the range h](j)}(h``pgoff_t first_index``h]j?)}(hjh]hpgoff_t first_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjubj)}(hhh]j9)}(h"The first page offset in the rangeh]h"The first page offset in the range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj†ubj)}(h;``pgoff_t nr`` Number of incremental page offsets to cover h](j)}(h``pgoff_t nr``h]j?)}(hj=h]h pgoff_t nr}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj7ubj)}(hhh]j9)}(h+Number of incremental page offsets to coverh]h+Number of incremental page offsets to cover}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj†ubj)}(hH``pgoff_t bitmap_pgoff`` The page offset of the first bit in **bitmap** h](j)}(h``pgoff_t bitmap_pgoff``h]j?)}(hjvh]hpgoff_t bitmap_pgoff}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjpubj)}(hhh]j9)}(h.The page offset of the first bit in **bitmap**h](h$The page offset of the first bit in }(hjhhhNhNubjz)}(h **bitmap**h]hbitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhj†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]j?)}(hjh]hunsigned long *bitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjubj)}(hhh]j9)}(hPointer 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ևhhhNhNubjz)}(h**nr**h]hnr}(hjއhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjևubh1 bits. The bitmap needs to cover the whole range }(hjևhhhNhNubjz)}(h**first_index**h]h first_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjևubh..**first_index** + }(hjևhhhNhNubjz)}(h**nr**h]hnr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjևubh.}(hjևhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjӇubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj҇hMhj†ubj)}(hz``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]j?)}(hj-h]hpgoff_t *start}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj'ubj)}(hhh]j9)}(hfPointer 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 }(hjFhhhNhNubjz)}(h **bitmap**h]hbitmap}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh2. is modified as new bits are set by the function.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj†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]j?)}(hjyh]h pgoff_t *end}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM!hjsubj)}(hhh]j9)}(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 }(hjhhhNhNubjz)}(h **bitmap**h]hbitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhF. none set. The value is modified as new bits are set by the function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM!hj†ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjLjh]h Description}(hjɈhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjňubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM#hjubj9)}(hWhen 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]hWhen 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݈hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM#hjubj)}(hhh](j+)}(hUAll ptes dirty when the function starts executing will end up recorded in the bitmap.h]j9)}(hUAll ptes dirty when the function starts executing will end up recorded in the bitmap.h]hUAll ptes dirty when the function starts executing will end up recorded in the bitmap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM'hjubah}(h]h ]h"]h$]h&]uh1j+hjubj+)}(hYAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both. h]j9)}(hXAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both.h]hXAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM)hjubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]j%j5 uh1jhjhM'hjubj9)}(hX.If a caller needs to make sure all dirty ptes are picked up and none additional are added, it first needs to write-protect the address-space range and make sure new writers are blocked in page_mkwrite() or pfn_mkwrite(). And then after a TLB flush following the write-protection pick up all dirty bits.h]hX.If a caller needs to make sure all dirty ptes are picked up and none additional are added, it first needs to write-protect the address-space range and make sure new writers are blocked in page_mkwrite() or pfn_mkwrite(). And then after a TLB flush following the write-protection pick up all dirty bits.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM,hjubj9)}(hThis 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]hThis 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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM2hjubj9)}(h **Return**h]jz)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM7hjubj9)}(h*The number of dirty ptes actually cleaned.h]h*The number of dirty ptes actually cleaned.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubj.)}(h2#kernel-doc:: mm/memory-failure.c (build warnings)h]h2#kernel-doc:: mm/memory-failure.c (build warnings)}hjssbah}(h]h ]h"]h$]h&]jj uh1j-hj qhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_addr_in_chunk (C function)c.pcpu_addr_in_chunkhNtauh1hhj qhhhNhNubh)}(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]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hpcpu_addr_in_chunkh]h)}(hpcpu_addr_in_chunkh]hpcpu_addr_in_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h&(struct pcpu_chunk *chunk, void *addr)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hj։hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj҉ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҉ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_addr_in_chunkasbuh1hhj҉ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҉ubj2 )}(hj5 h]h*}(hj"hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj҉ubh)}(hchunkh]hchunk}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj҉ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjΉubj)}(h void *addrh](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj2 )}(hj5 h]h*}(hjdhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjDubh)}(haddrh]haddr}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjΉubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h.check if the address is served from this chunkh]h.check if the address is served from this chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``void *addr`` percpu address **Return** True if the address is served from this chunk.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hj܊h]hstruct pcpu_chunk *chunk}(hjފhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjڊubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhj֊ubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj֊ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjӊubj)}(h``void *addr`` percpu address h](j)}(h``void *addr``h]j?)}(hjh]h void *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj)}(hhh]j9)}(hpercpu addressh]hpercpu address}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjӊubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj9)}(h.True if the address is served from this chunk.h]h.True if the address is served from this chunk.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_check_block_hint (C function)c.pcpu_check_block_hinthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hPbool pcpu_check_block_hint (struct pcpu_block_md *block, int bits, size_t align)h]h)}(hObool pcpu_check_block_hint(struct pcpu_block_md *block, int bits, size_t align)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubh)}(hpcpu_check_block_hinth]h)}(hpcpu_check_block_hinth]hpcpu_check_block_hint}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM4ubj)}(h5(struct pcpu_block_md *block, int bits, size_t align)h](j)}(hstruct pcpu_block_md *blockh](j!)}(hj$h]hstruct}(hjыhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj͋ubj)}(h h]h }(hjދhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͋ubh)}(hhh]h)}(h pcpu_block_mdh]h pcpu_block_md}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_check_block_hintasbuh1hhj͋ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͋ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj͋ubh)}(hblockh]hblock}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͋ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjɋubj)}(hint bitsh](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hbitsh]hbits}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjɋubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}modnameN classnameNj\j_)}jb]j c.pcpu_check_block_hintasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(halignh]halign}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjɋubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM4hjhhubj )}(hhh]j9)}(hcheck against the contig hinth]hcheck against the contig hint}(hjьhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM4hjΌhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM8hjubj)}(hhh](j)}(h2``struct pcpu_block_md *block`` block of interest h](j)}(h``struct pcpu_block_md *block``h]j?)}(hjh]hstruct pcpu_block_md *block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5hj ubj)}(hhh]j9)}(hblock of interesth]hblock of interest}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hM5hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM5hj ubj)}(h ``int bits`` size of allocation h](j)}(h ``int bits``h]j?)}(hjKh]hint bits}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM6hjEubj)}(hhh]j9)}(hsize of allocationh]hsize of allocation}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hM6hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM6hj ubj)}(h3``size_t align`` alignment of area (max PAGE_SIZE) h](j)}(h``size_t align``h]j?)}(hjh]h size_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM7hj~ubj)}(hhh]j9)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM7hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM7hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjubj9)}(hCheck 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]hCheck 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ՍhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%pcpu_next_md_free_region (C function)c.pcpu_next_md_free_regionhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hQvoid pcpu_next_md_free_region (struct pcpu_chunk *chunk, int *bit_off, int *bits)h]h)}(hPvoid pcpu_next_md_free_region(struct pcpu_chunk *chunk, int *bit_off, int *bits)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMcubh)}(hpcpu_next_md_free_regionh]h)}(hpcpu_next_md_free_regionh]hpcpu_next_md_free_region}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMcubj)}(h3(struct pcpu_chunk *chunk, int *bit_off, int *bits)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]je)}jXj'sbc.pcpu_next_md_free_regionasbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=ubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(h int *bit_offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjώhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hbit_offh]hbit_off}(hj܎hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(h int *bitsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hbitsh]hbits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMcubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMchjhhubj )}(hhh]j9)}(hfinds the next hint free areah]hfinds the next hint free area}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMchjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMcubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j`j4j`j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMghjdubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjh]hstruct pcpu_chunk *chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMdhjubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h``int *bit_off`` chunk offset h](j)}(h``int *bit_off``h]j?)}(hjh]h int *bit_off}(hjďhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMehjubj)}(hhh]j9)}(h chunk offseth]h chunk offset}(hjۏhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj׏hMehj؏ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׏hMehjubj)}(h ``int *bits`` size of free area h](j)}(h ``int *bits``h]j?)}(hjh]h int *bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMfhjubj)}(hhh]j9)}(hsize of free areah]hsize of free area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjdubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhhjdubj9)}(hHelper 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]hHelper 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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_next_fit_region (C function)c.pcpu_next_fit_regionhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hhvoid pcpu_next_fit_region (struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)h]h)}(hgvoid pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhMubh)}(hpcpu_next_fit_regionh]h)}(hpcpu_next_fit_regionh]hpcpu_next_fit_region}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhMubj)}(hN(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjŐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj֐hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӐubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjؐmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_next_fit_regionasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint alloc_bitsh](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(h alloc_bitsh]h alloc_bits}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int alignh](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(halignh]halign}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int *bit_offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hbit_offh]hbit_off}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int *bitsh](j)}(hinth]hint}(hj֑hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjґubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjґubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjґubh)}(hbitsh]hbits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjґubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjhMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjphhubj )}(hhh]j9)}(h.finds fit areas for a given allocation requesth]h.finds fit areas for a given allocation request}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjEubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjjh]hstruct pcpu_chunk *chunk}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjdubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h&``int alloc_bits`` size of allocation h](j)}(h``int alloc_bits``h]j?)}(hjh]hint alloc_bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hsize of allocationh]hsize of allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h0``int align`` alignment of area (max PAGE_SIZE) h](j)}(h ``int align``h]j?)}(hjܒh]h int align}(hjޒhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjڒubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj֒ubj)}(hhh]j9)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֒ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h``int *bit_off`` chunk offset h](j)}(h``int *bit_off``h]j?)}(hjh]h int *bit_off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(h chunk offseth]h chunk offset}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjaubj)}(h ``int *bits`` size of free area h](j)}(h ``int *bits``h]j?)}(hjNh]h int *bits}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjHubj)}(hhh]j9)}(hsize of free areah]hsize of free area}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjEubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_mem_zalloc (C function)c.pcpu_mem_zallochNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjΓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʓhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjݓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʓhhhjܓhMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjʓhhhjܓhMubh)}(hpcpu_mem_zalloch]h)}(hpcpu_mem_zalloch]hpcpu_mem_zalloc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjʓhhhjܓhMubj)}(h(size_t size, gfp_t gfp)h](j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_mem_zallocasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjgmodnameN classnameNj\j_)}jb]j7c.pcpu_mem_zallocasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjʓhhhjܓhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƓhhhjܓhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjܓhMhjÓhhubj )}(hhh]j9)}(hallocate memoryh]hallocate memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjÓhhhjܓhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jӔj4jӔj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjݔh]h Parameters}(hjߔhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj۔ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjהubj)}(hhh](j)}(h"``size_t size`` bytes to allocate h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hbytes to allocateh]hbytes to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j?)}(hj5h]h gfp_t gfp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj/ubj)}(hhh]j9)}(hallocation flagsh]hallocation flags}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjהubj9)}(h**Description**h]jz)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjהubj9)}(hAllocate **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 }(hjhhhNhNubjz)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh bytes. If }(hjhhhNhNubjz)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjהubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjהubj9)}(h:Pointer to the allocated area on success, NULL on failure.h]h:Pointer to the allocated area on success, NULL on failure.}(hjѕhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjהubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_mem_free (C function)c.pcpu_mem_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid pcpu_mem_free (void *ptr)h]h)}(hvoid pcpu_mem_free(void *ptr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h pcpu_mem_freeh]h)}(h pcpu_mem_freeh]h pcpu_mem_free}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h (void *ptr)h]j)}(h void *ptrh](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj2 )}(hj5 h]h*}(hjYhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj9ubh)}(hptrh]hptr}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj5ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h free memoryh]h free memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``void *ptr`` memory to free **Description** Free **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h``void *ptr`` memory to free h](j)}(h ``void *ptr``h]j?)}(hjіh]h void *ptr}(hjӖhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjϖubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj˖ubj)}(hhh]j9)}(hmemory to freeh]hmemory to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˖ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjȖubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hJFree **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().h](hFree }(hj"hhhNhNubjz)}(h**ptr**h]hptr}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh. }(hj"hhhNhNubjz)}(h**ptr**h]hptr}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh4 should have been allocated using pcpu_mem_zalloc().}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_chunk_relocate (C function)c.pcpu_chunk_relocatehNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubh)}(hpcpu_chunk_relocateh]h)}(hpcpu_chunk_relocateh]hpcpu_chunk_relocate}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMubj)}(h%(struct pcpu_chunk *chunk, int oslot)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjЗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͗ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjҗmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_chunk_relocateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hchunkh]hchunk}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int osloth](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hosloth]hoslot}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjjhhubj )}(hhh]j9)}(h'put chunk in the appropriate chunk sloth]h'put chunk in the appropriate chunk slot}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjh]hstruct pcpu_chunk *chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjĘhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``int oslot`` the previous slot it was on h](j)}(h ``int oslot``h]j?)}(hjh]h int oslot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM!hjޘubj)}(hhh]j9)}(hthe previous slot it was onh]hthe previous slot it was on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjޘubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjubj9)}(hThis 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 ah"]h$]h&]uh1j1 hjubh)}(hblockh]hblock}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int starth](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hstarth]hstart}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint endh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMmhjhhubj )}(hhh]j9)}(h!updates a block given a free areah]h!updates a block given a free area}(hjٚhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMmhj֚hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMmubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMqhjubj)}(hhh](j)}(h2``struct pcpu_block_md *block`` block of interest h](j)}(h``struct pcpu_block_md *block``h]j?)}(hjh]hstruct pcpu_block_md *block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMnhjubj)}(hhh]j9)}(hblock of interesth]hblock of interest}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMnhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMnhjubj)}(h$``int start`` start offset in block h](j)}(h ``int start``h]j?)}(hjSh]h int start}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMohjMubj)}(hhh]j9)}(hstart offset in blockh]hstart offset in block}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMohjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMohjubj)}(h ``int end`` end offset in block h](j)}(h ``int end``h]j?)}(hjh]hint end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMphjubj)}(hhh]j9)}(hend offset in blockh]hend offset in block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjǛh]h Description}(hjɛhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjśubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMrhjubj9)}(hUpdates 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]hUpdates 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ݛhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$pcpu_chunk_refresh_hint (C function)c.pcpu_chunk_refresh_hinthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hGvoid pcpu_chunk_refresh_hint (struct pcpu_chunk *chunk, bool full_scan)h]h)}(hFvoid pcpu_chunk_refresh_hint(struct pcpu_chunk *chunk, bool full_scan)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_chunk_refresh_hinth]h)}(hpcpu_chunk_refresh_hinth]hpcpu_chunk_refresh_hint}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h*(struct pcpu_chunk *chunk, bool full_scan)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjIhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjimodnameN classnameNj\j_)}jb]je)}jXj/sbc.pcpu_chunk_refresh_hintasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjEubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjAubj)}(hbool full_scanh](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjȜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h full_scanh]h full_scan}(hj֜hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjAubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hupdates metadata about a chunkh]hupdates metadata about a chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjAh]hstruct pcpu_chunk *chunk}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj;ubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubj)}(h8``bool full_scan`` if we should scan from the beginning h](j)}(h``bool full_scan``h]j?)}(hjzh]hbool full_scan}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjtubj)}(hhh]j9)}(h$if we should scan from the beginningh]h$if we should scan from the beginning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhj8ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(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˝hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$pcpu_block_refresh_hint (C function)c.pcpu_block_refresh_hinthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hBvoid pcpu_block_refresh_hint (struct pcpu_chunk *chunk, int index)h]h)}(hAvoid pcpu_block_refresh_hint(struct pcpu_chunk *chunk, int index)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_block_refresh_hinth]h)}(hpcpu_block_refresh_hinth]hpcpu_block_refresh_hint}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h%(struct pcpu_chunk *chunk, int index)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hj7hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjWmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_block_refresh_hintasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj3ubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubj)}(h int indexh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hjŞhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj/ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hj!h]hstruct pcpu_chunk *chunk}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h*``int index`` index of the metadata block h](j)}(h ``int index``h]j?)}(hjZh]h int index}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjTubj)}(hhh]j9)}(hindex of the metadata blockh]hindex of the metadata block}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hXScans over the block beginning at first_free and updates the block metadata accordingly.h]hXScans over the block beginning at first_free and updates the block metadata accordingly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)pcpu_block_update_hint_alloc (C function)c.pcpu_block_update_hint_allochNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSvoid pcpu_block_update_hint_alloc (struct pcpu_chunk *chunk, int bit_off, int bits)h]h)}(hRvoid pcpu_block_update_hint_alloc(struct pcpu_chunk *chunk, int bit_off, int bits)h](j)}(hvoidh]hvoid}(hjڟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֟hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֟hhhjhMubh)}(hpcpu_block_update_hint_alloch]h)}(hpcpu_block_update_hint_alloch]hpcpu_block_update_hint_alloc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj֟hhhjhMubj)}(h1(struct pcpu_chunk *chunk, int bit_off, int bits)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_block_update_hint_allocasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hchunkh]hchunk}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int bit_offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbit_offh]hbit_off}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint bitsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj̠hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbitsh]hbits}(hjڠhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj֟hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjҟhhhjhMubah}(h]j͟ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjϟhhubj )}(hhh]j9)}(hupdate hint on allocation pathh]hupdate hint on allocation path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjϟhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hj ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjEh]hstruct pcpu_chunk *chunk}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj?ubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhM hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM hj<ubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j?)}(hj~h]h int bit_off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM!hjxubj)}(hhh]j9)}(h chunk offseth]h chunk offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM!hj<ubj)}(h``int bits`` size of request h](j)}(h ``int bits``h]j?)}(hjh]hint bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM"hjubj)}(hhh]j9)}(hsize of requesth]hsize of request}(hjСhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj̡hM"hj͡ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̡hM"hj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$hj ubj9)}(hUpdates 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]hUpdates 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(pcpu_block_update_hint_free (C function)c.pcpu_block_update_hint_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRvoid pcpu_block_update_hint_free (struct pcpu_chunk *chunk, int bit_off, int bits)h]h)}(hQvoid pcpu_block_update_hint_free(struct pcpu_chunk *chunk, int bit_off, int bits)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhMubh)}(hpcpu_block_update_hint_freeh]h)}(hpcpu_block_update_hint_freeh]hpcpu_block_update_hint_free}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjEhMubj)}(h1(struct pcpu_chunk *chunk, int bit_off, int bits)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjthhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjZsbc.pcpu_block_update_hint_freeasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjpubh)}(hchunkh]hchunk}(hj͢hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(h int bit_offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbit_offh]hbit_off}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubj)}(hint bitsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbitsh]hbits}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjlubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjEhMubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhjEhMhj,hhubj )}(hhh]j9)}(h(updates the block hints on the free pathh]h(updates the block hints on the free path}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyj4jyj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj}ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjh]hstruct pcpu_chunk *chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j?)}(hjۣh]h int bit_off}(hjݣhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj٣ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjգubj)}(hhh]j9)}(h chunk offseth]h chunk offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjգubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int bits`` size of request h](j)}(h ``int bits``h]j?)}(hjh]hint bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hsize of requesth]hsize of request}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj}ubj9)}(hUpdates 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]hUpdates 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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj}ubj9)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_is_populated (C function)c.pcpu_is_populatedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hWbool pcpu_is_populated (struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)h]h)}(hVbool pcpu_is_populated(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM%ubh)}(hpcpu_is_populatedh]h)}(hpcpu_is_populatedh]hpcpu_is_populated}(hjähhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM%ubj)}(h@(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjߤhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjۤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjŤsbc.pcpu_is_populatedasbuh1hhjۤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjۤubh)}(hchunkh]hchunk}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۤubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjפubj)}(h int bit_offh](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hbit_offh]hbit_off}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjפubj)}(hint bitsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbitsh]hbits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjפubj)}(h int *next_offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjɥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjץhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hnext_offh]hnext_off}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjפubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM%ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM%hjhhubj )}(hhh]j9)}(h%determines if the region is populatedh]h%determines if the region is populated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM%hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM%ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM)hj*ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjOh]hstruct pcpu_chunk *chunk}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM&hjIubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhM&hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM&hjFubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j?)}(hjh]h int bit_off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM'hjubj)}(hhh]j9)}(h chunk offseth]h chunk offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjFubj)}(h``int bits`` size of area h](j)}(h ``int bits``h]j?)}(hjh]hint bits}(hjæhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM(hjubj)}(hhh]j9)}(h size of areah]h size of area}(hjڦhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj֦hM(hjצubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֦hM(hjFubj)}(hF``int *next_off`` return value for the next offset to start searching h](j)}(h``int *next_off``h]j?)}(hjh]h int *next_off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM)hjubj)}(hhh]j9)}(h3return value for the next offset to start searchingh]h3return value for the next offset to start searching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hj*ubj9)}(hAFor atomic allocations, check if the backing pages are populated.h]hAFor atomic allocations, check if the backing pages are populated.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hj*ubj9)}(h **Return**h]jz)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM-hj*ubj9)}(hnBool if the backing pages are populated. next_index is to skip over unpopulated blocks in pcpu_find_block_fit.h]hnBool if the backing pages are populated. next_index is to skip over unpopulated blocks in pcpu_find_block_fit.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM-hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_find_block_fit (C function)c.pcpu_find_block_fithNtauh1hhj qhhhNhNubh)}(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)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMDubh)}(hpcpu_find_block_fith]h)}(hpcpu_find_block_fith]hpcpu_find_block_fit}(hj§hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMDubj)}(hG(struct pcpu_chunk *chunk, int alloc_bits, size_t align, bool pop_only)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjާhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjڧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڧubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjħsbc.pcpu_find_block_fitasbuh1hhjڧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڧubj2 )}(hj5 h]h*}(hj*hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjڧubh)}(hchunkh]hchunk}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڧubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֧ubj)}(hint alloc_bitsh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(h alloc_bitsh]h alloc_bits}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֧ubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.pcpu_find_block_fitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֧ubj)}(h bool pop_onlyh](j)}(hj)h]hbool}(hjͨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɨubj)}(h h]h }(hjڨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɨubh)}(hpop_onlyh]hpop_only}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɨubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj֧ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMDhjhhubj )}(hhh]j9)}(h(finds the block index to start searchingh]h(finds the block index to start searching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMDhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMHhj.ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjSh]hstruct pcpu_chunk *chunk}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMEhjMubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMEhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMEhjJubj)}(h7``int alloc_bits`` size of request in allocation units h](j)}(h``int alloc_bits``h]j?)}(hjh]hint alloc_bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMFhjubj)}(hhh]j9)}(h#size of request in allocation unitsh]h#size of request in allocation units}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjJubj)}(h9``size_t align`` alignment of area (max PAGE_SIZE bytes) h](j)}(h``size_t align``h]j?)}(hjũh]h size_t align}(hjǩhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjéubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMGhjubj)}(hhh]j9)}(h'alignment of area (max PAGE_SIZE bytes)h]h'alignment of area (max PAGE_SIZE bytes)}(hjީhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjکhMGhj۩ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjکhMGhjJubj)}(h-``bool pop_only`` use populated regions only h](j)}(h``bool pop_only``h]j?)}(hjh]h bool pop_only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMHhjubj)}(hhh]j9)}(huse populated regions onlyh]huse populated regions only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMJhj.ubj9)}(hXGiven 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]hXGiven 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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMJhj.ubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMRhj.ubj9)}(hFThe offset in the bitmap to begin searching. -1 if no offset is found.h]hFThe offset in the bitmap to begin searching. -1 if no offset is found.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMRhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_alloc_area (C function)c.pcpu_alloc_areahNtauh1hhj qhhhNhNubh)}(hhh](h)}(hWint pcpu_alloc_area (struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)h]h)}(hVint pcpu_alloc_area(struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_alloc_areah]h)}(hpcpu_alloc_areah]hpcpu_alloc_area}(hjƪhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjªubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(hC(struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjުubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjުubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjȪsbc.pcpu_alloc_areaasbuh1hhjުubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjުubj2 )}(hj5 h]h*}(hj.hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjުubh)}(hchunkh]hchunk}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjުubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjڪubj)}(hint alloc_bitsh](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(h alloc_bitsh]h alloc_bits}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjڪubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.pcpu_alloc_areaasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjڪubj)}(h int starth](j)}(hinth]hint}(hjѫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͫubj)}(h h]h }(hj߫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͫubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjͫubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjڪubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h#allocates an area from a pcpu_chunkh]h#allocates an area from a pcpu_chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj3ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjXh]hstruct pcpu_chunk *chunk}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjRubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(h7``int alloc_bits`` size of request in allocation units h](j)}(h``int alloc_bits``h]j?)}(hjh]hint alloc_bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(h#size of request in allocation unitsh]h#size of request in allocation units}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubj)}(h3``size_t align`` alignment of area (max PAGE_SIZE) h](j)}(h``size_t align``h]j?)}(hjʬh]h size_t align}(hj̬hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjȬubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjĬubj)}(hhh]j9)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj߬hMhjubah}(h]h ]h"]h$]h&]uh1jhjĬubeh}(h]h ]h"]h$]h&]uh1jhj߬hMhjOubj)}(h)``int start`` bit_off to start searching h](j)}(h ``int start``h]j?)}(hjh]h int start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hbit_off to start searchingh]hbit_off to start searching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj3ubj9)}(hXThis 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](hThis function takes in a }(hjThhhNhNubjz)}(h **start**h]hstart}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh3 offset to begin searching to fit an allocation of }(hjThhhNhNubjz)}(h**alloc_bits**h]h alloc_bits}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh with alignment }(hjThhhNhNubjz)}(h **align**h]halign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh\. It needs to scan the allocation map because if it fits within the block’s contig hint, }(hjThhhNhNubjz)}(h **start**h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh 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.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj3ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj3ubj9)}(hOAllocated addr offset in **chunk** on success. -1 if no matching area is found.h](hAllocated addr offset in }(hjíhhhNhNubjz)}(h **chunk**h]hchunk}(hj˭hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjíubh- on success. -1 if no matching area is found.}(hjíhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_free_area (C function)c.pcpu_free_areahNtauh1hhj qhhhNhNubh)}(hhh](h)}(h6int pcpu_free_area (struct pcpu_chunk *chunk, int off)h]h)}(h5int pcpu_free_area(struct pcpu_chunk *chunk, int off)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_free_areah]h)}(hpcpu_free_areah]hpcpu_free_area}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h#(struct pcpu_chunk *chunk, int off)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjAhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjamodnameN classnameNj\j_)}jb]je)}jXj'sbc.pcpu_free_areaasbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj=ubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubj)}(hint offh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoffh]hoff}(hjϮhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj9ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hfrees the corresponding offseth]hfrees the corresponding offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hj:h]hstruct pcpu_chunk *chunk}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj4ubj)}(hhh]j9)}(hchunk of interesth]hchunk of interest}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h#``int off`` addr offset into chunk h](j)}(h ``int off``h]j?)}(hjsh]hint off}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjmubj)}(hhh]j9)}(haddr offset into chunkh]haddr offset into chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hsThis function determines the size of an allocation to free using the boundary bitmap and clears the allocation map.h]hsThis function determines the size of an allocation to free using the boundary bitmap and clears the allocation map.}(hjįhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h **Return**h]jz)}(hjկh]hReturn}(hjׯhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӯubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hNumber of freed bytes.h]hNumber of freed bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_alloc_first_chunk (C function)c.pcpu_alloc_first_chunkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hQstruct pcpu_chunk * pcpu_alloc_first_chunk (unsigned long tmp_addr, int map_size)h]h)}(hOstruct pcpu_chunk *pcpu_alloc_first_chunk(unsigned long tmp_addr, int map_size)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hM5ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]je)}jXpcpu_alloc_first_chunksbc.pcpu_alloc_first_chunkasbuh1hhjhhhj'hM5ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hM5ubj2 )}(hj5 h]h*}(hjhhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhj'hM5ubh)}(hpcpu_alloc_first_chunkh]h)}(hjWh]hpcpu_alloc_first_chunk}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hM5ubj)}(h&(unsigned long tmp_addr, int map_size)h](j)}(hunsigned long tmp_addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htmp_addrh]htmp_addr}(hj̰hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int map_sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmap_sizeh]hmap_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj'hM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hM5ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj'hM5hjhhubj )}(hhh]j9)}(h)creates chunks that serve the first chunkh]h)creates chunks that serve the first chunk}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5hj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjGubj)}(hhh](j)}(h:``unsigned long tmp_addr`` the start of the region served h](j)}(h``unsigned long tmp_addr``h]j?)}(hjlh]hunsigned long tmp_addr}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM6hjfubj)}(hhh]j9)}(hthe start of the region servedh]hthe start of the region served}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjcubj)}(h+``int map_size`` size of the region served h](j)}(h``int map_size``h]j?)}(hjh]h int map_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM7hjubj)}(hhh]j9)}(hsize of the region servedh]hsize of the region served}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjޱubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjGubj9)}(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](hoThis is responsible for creating the chunks that serve the first chunk. The base_addr is page aligned down of }(hjhhhNhNubjz)}(h **tmp_addr**h]htmp_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjGubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM>hjGubj9)}(h9Chunk serving the region at **tmp_addr** of **map_size**.h](hChunk serving the region at }(hj/hhhNhNubjz)}(h **tmp_addr**h]htmp_addr}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh of }(hj/hhhNhNubjz)}(h **map_size**h]hmap_size}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM>hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_chunk_populated (C function)c.pcpu_chunk_populatedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRvoid pcpu_chunk_populated (struct pcpu_chunk *chunk, int page_start, int page_end)h]h)}(hQvoid pcpu_chunk_populated(struct pcpu_chunk *chunk, int page_start, int page_end)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubh)}(hpcpu_chunk_populatedh]h)}(hpcpu_chunk_populatedh]hpcpu_chunk_populated}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhjhMubj)}(h8(struct pcpu_chunk *chunk, int page_start, int page_end)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj̲hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjݲhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڲubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj߲modnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_chunk_populatedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hint page_starth](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(h page_starth]h page_start}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int page_endh](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hpage_endh]hpage_end}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjwhhubj )}(hhh]j9)}(hpost-population bookkeepingh]hpost-population bookkeeping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jijj4jijj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjγh]h Parameters}(hjгhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̳ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjȳubj)}(hhh](j)}(h<``struct pcpu_chunk *chunk`` pcpu_chunk which got populated h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjh]hstruct pcpu_chunk *chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hpcpu_chunk which got populatedh]hpcpu_chunk which got populated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``int page_start`` the start page h](j)}(h``int page_start``h]j?)}(hj&h]hint page_start}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubj)}(hhh]j9)}(hthe start pageh]hthe start page}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h``int page_end`` the end page h](j)}(h``int page_end``h]j?)}(hj_h]h int page_end}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjYubj)}(hhh]j9)}(h the end pageh]h the end page}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjȳubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjȳubj9)}(hPages 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 [}(hjhhhNhNubjz)}(h**page_start**h]h page_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh&,**page_end**) have been populated to }(hjhhhNhNubjz)}(h **chunk**h]hchunk}(hjʴhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhd. Update the bookkeeping information accordingly. Must be called after each successful population.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjȳubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_chunk_depopulated (C function)c.pcpu_chunk_depopulatedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hTvoid pcpu_chunk_depopulated (struct pcpu_chunk *chunk, int page_start, int page_end)h]h)}(hSvoid pcpu_chunk_depopulated(struct pcpu_chunk *chunk, int page_start, int page_end)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_chunk_depopulatedh]h)}(hpcpu_chunk_depopulatedh]hpcpu_chunk_depopulated}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h8(struct pcpu_chunk *chunk, int page_start, int page_end)h](j)}(hstruct pcpu_chunk *chunkh](j!)}(hj$h]hstruct}(hj@hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]je)}jXj&sbc.pcpu_chunk_depopulatedasbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj<ubh)}(hchunkh]hchunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj8ubj)}(hint page_starth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h page_starth]h page_start}(hjεhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj8ubj)}(h int page_endh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpage_endh]hpage_end}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj8ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hpost-depopulation bookkeepingh]hpost-depopulation bookkeeping}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjIubj)}(hhh](j)}(h>``struct pcpu_chunk *chunk`` pcpu_chunk which got depopulated h](j)}(h``struct pcpu_chunk *chunk``h]j?)}(hjnh]hstruct pcpu_chunk *chunk}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhubj)}(hhh]j9)}(h pcpu_chunk which got depopulatedh]h pcpu_chunk which got depopulated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h"``int page_start`` the start page h](j)}(h``int page_start``h]j?)}(hjh]hint page_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hthe start pageh]hthe start page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h``int page_end`` the end page h](j)}(h``int page_end``h]j?)}(hjh]h int page_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj޶ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjڶubj)}(hhh]j9)}(h the end pageh]h the end page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڶubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjIubj9)}(hPages 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 [}(hj1hhhNhNubjz)}(h**page_start**h]h page_start}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh*,**page_end**) have been depopulated from }(hj1hhhNhNubjz)}(h **chunk**h]hchunk}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubhe. Update the bookkeeping information accordingly. Must be called after each successful depopulation.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_chunk_addr_search (C function)c.pcpu_chunk_addr_searchhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h7struct pcpu_chunk * pcpu_chunk_addr_search (void *addr)h]h)}(h5struct pcpu_chunk *pcpu_chunk_addr_search(void *addr)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXpcpu_chunk_addr_searchsbc.pcpu_chunk_addr_searchasbuh1hhjhhhjhM+ubj)}(h h]h }(hjķhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubj2 )}(hj5 h]h*}(hjҷhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhM+ubh)}(hpcpu_chunk_addr_searchh]h)}(hjh]hpcpu_chunk_addr_search}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߷ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM+ubj)}(h (void *addr)h]j)}(h void *addrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(haddrh]haddr}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhjhM+ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjhM+hjyhhubj )}(hhh]j9)}(h,determine chunk containing specified addressh]h,determine chunk containing specified address}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hjNhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jij4jij5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM/hjmubj)}(hhh]j)}(hC``void *addr`` address for which the chunk needs to be determined. h](j)}(h``void *addr``h]j?)}(hjh]h void *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM,hjubj)}(hhh]j9)}(h3address for which the chunk needs to be determined.h]h3address for which the chunk needs to be determined.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjmubj9)}(h**Description**h]jz)}(hj͸h]h Description}(hjϸhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj˸ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM.hjmubj9)}(hThis is an internal function that handles all but static allocations. Static percpu address values should never be passed into the allocator.h]hThis is an internal function that handles all but static allocations. Static percpu address values should never be passed into the allocator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM.hjmubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM1hjmubj9)}(hThe address of the found chunk.h]hThe address of the found chunk.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM1hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_alloc (C function) c.pcpu_allochNtauh1hhj qhhhNhNubh)}(hhh](h)}(hPvoid __percpu * pcpu_alloc (size_t size, size_t align, bool reserved, gfp_t gfp)h]h)}(hNvoid __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjGhMubh__percpu}(hj5hhhNhNubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjGhMubj2 )}(hj5 h]h*}(hjhhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj5hhhjGhMubh)}(h pcpu_alloch]h)}(h pcpu_alloch]h pcpu_alloc}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhjGhMubj)}(h5(size_t size, size_t align, bool reserved, gfp_t gfp)h](j)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj{sb c.pcpu_allocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjƹhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߹ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.pcpu_allocasbuh1hhj۹ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۹ubh)}(halignh]halign}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj۹ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h bool reservedh](j)}(hj)h]hbool}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hreservedh]hreserved}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]j c.pcpu_allocasbuh1hhjWubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhjGhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhjGhMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhjGhMhj.hhubj )}(hhh]j9)}(hthe percpu allocatorh]hthe percpu allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j̺j4j̺j5j6j7uh1hhhhj qhNhNubjp)}(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 contain ``GFP_KERNEL``, 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](j9)}(h**Parameters**h]jz)}(hjֺh]h Parameters}(hjغhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԺubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjкubj)}(hhh](j)}(h2``size_t size`` size of area to allocate in bytes h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(h!size of area to allocate in bytesh]h!size of area to allocate in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h3``size_t align`` alignment of area (max PAGE_SIZE) h](j)}(h``size_t align``h]j?)}(hj.h]h size_t align}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj(ubj)}(hhh]j9)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubj)}(h@``bool reserved`` allocate from the reserved chunk if available h](j)}(h``bool reserved``h]j?)}(hjgh]h bool reserved}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjaubj)}(hhh]j9)}(h-allocate from the reserved chunk if availableh]h-allocate from the reserved chunk if available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjкubj9)}(h**Description**h]jz)}(hjۻh]h Description}(hjݻhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٻubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjкubj9)}(hAllocate percpu area of **size** bytes aligned at **align**. If **gfp** doesn't contain ``GFP_KERNEL``, the allocation is atomic. If **gfp** has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.h](hAllocate percpu area of }(hjhhhNhNubjz)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh bytes aligned at }(hjhhhNhNubjz)}(h **align**h]halign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. If }(hjhhhNhNubjz)}(h**gfp**h]hgfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh doesn’t contain }(hjhhhNhNubj?)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, the allocation is atomic. If }(hjhhhNhNubjz)}(h**gfp**h]hgfp}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh] has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjкubj9)}(h **Return**h]jz)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjкubj9)}(hAPercpu pointer to the allocated area on success, NULL on failure.h]hAPercpu pointer to the allocated area on success, NULL on failure.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjкubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_balance_free (C function)c.pcpu_balance_freehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h(void pcpu_balance_free (bool empty_only)h]h)}(h'void pcpu_balance_free(bool empty_only)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_balance_freeh]h)}(hpcpu_balance_freeh]hpcpu_balance_free}(hj¼hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(bool empty_only)h]j)}(hbool empty_onlyh](j)}(hj)h]hbool}(hj޼hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڼubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڼubh)}(h empty_onlyh]h empty_only}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڼubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjּubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h manage the amount of free chunksh]h manage the amount of free chunks}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj?ubj)}(hhh]j)}(hE``bool empty_only`` free chunks only if there are no populated pages h](j)}(h``bool empty_only``h]j?)}(hjdh]hbool empty_only}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj^ubj)}(hhh]j9)}(h0free chunks only if there are no populated pagesh]h0free chunks only if there are no populated pages}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj?ubj9)}(hIf 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](hIf empty_only is }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, reclaim all fully free chunks regardless of the number of populated pages. Otherwise, only reclaim chunks that have no populated pages.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj?ubj9)}(h **Context**h]jz)}(hjؽh]hContext}(hjڽhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjֽubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj?ubj9)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_balance_populated (C function)c.pcpu_balance_populatedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h"void pcpu_balance_populated (void)h]h)}(h!void pcpu_balance_populated(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hMubh)}(hpcpu_balance_populatedh]h)}(hpcpu_balance_populatedh]hpcpu_balance_populated}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]noemphjj uh1jhjRubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj+hMhjhhubj )}(hhh]j9)}(h$manage the amount of populated pagesh]h$manage the amount of populated pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjžh]hvoid}(hjǾhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjþubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj޾hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjھhKhj۾ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjھhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h **Context**h]jz)}(hj'h]hContext}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_reclaim_populated (C function)c.pcpu_reclaim_populatedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h"void pcpu_reclaim_populated (void)h]h)}(h!void pcpu_reclaim_populated(void)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjzhMubh)}(hpcpu_reclaim_populatedh]h)}(hpcpu_reclaim_populatedh]hpcpu_reclaim_populated}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhjzhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjzhMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1hhjzhMhjahhubj )}(hhh]j9)}(h3scan over to_depopulate chunks and free empty pagesh]h3scan over to_depopulate chunks and free empty pages}(hjӿhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjпhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjzhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjubj9)}(hXScan 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]hXScan 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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h **Context**h]jz)}(hjvh]hContext}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjubj9)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_balance_workfn (C function)c.pcpu_balance_workfnhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h3void pcpu_balance_workfn (struct work_struct *work)h]h)}(h2void pcpu_balance_workfn(struct work_struct *work)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_balance_workfnh]h)}(hpcpu_balance_workfnh]hpcpu_balance_workfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(struct work_struct *work)h]j)}(hstruct work_struct *workh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h work_structh]h work_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_balance_workfnasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjDhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hworkh]hwork}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h4manage the amount of free chunks and populated pagesh]h4manage the amount of free chunks and populated pages}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h$``struct work_struct *work`` unused h](j)}(h``struct work_struct *work``h]j?)}(hjh]hstruct work_struct *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hunusedh]hunused}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hFor 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]hFor 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfree_percpu (C function) c.free_percpuhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h%void free_percpu (void __percpu *ptr)h]h)}(h$void free_percpu(void __percpu *ptr)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhMubh)}(h free_percpuh]h)}(h free_percpuh]h free_percpu}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjJhMubj)}(h(void __percpu *ptr)h]j)}(hvoid __percpu *ptrh](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh__percpu}(hjuhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjuubh)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjqubah}(h]h ]h"]h$]h&]jj uh1jhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjJhMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhj1hhubj )}(hhh]j9)}(hfree percpu areah]hfree percpu area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``void __percpu *ptr`` pointer to area to free **Description** Free percpu area **ptr**. **Context** Can be called from atomic context.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h/``void __percpu *ptr`` pointer to area to free h](j)}(h``void __percpu *ptr``h]j?)}(hjh]hvoid __percpu *ptr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(hpointer to area to freeh]hpointer to area to free}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hFree percpu area **ptr**.h](hFree percpu area }(hjphhhNhNubjz)}(h**ptr**h]hptr}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h"Can be called from atomic context.h]h"Can be called from atomic context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%is_kernel_percpu_address (C function)c.is_kernel_percpu_addresshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h2bool is_kernel_percpu_address (unsigned long addr)h]h)}(h1bool is_kernel_percpu_address(unsigned long addr)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(his_kernel_percpu_addressh]h)}(his_kernel_percpu_addressh]his_kernel_percpu_address}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(unsigned long addr)h]j)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h/test whether address is from static percpu areah]h/test whether address is from static percpu area}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(h'``unsigned long addr`` address to test h](j)}(h``unsigned long addr``h]j?)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j9)}(haddress to testh]haddress to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(hTest 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 }(hjhhhNhNubjz)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj9)}(h **Return**h]jz)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hO``true`` if **addr** is from in-kernel static percpu area, ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubh if }(hjAhhhNhNubjz)}(h**addr**h]haddr}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh' is from in-kernel static percpu area, }(hjAhhhNhNubj?)}(h ``false``h]hfalse}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubh otherwise.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ per_cpu_ptr_to_phys (C function)c.per_cpu_ptr_to_physhNtauh1hhj qhhhNhNubh)}(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]h)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXper_cpu_ptr_to_physsbc.per_cpu_ptr_to_physasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hper_cpu_ptr_to_physh]h)}(hjh]hper_cpu_ptr_to_phys}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h (void *addr)h]j)}(h void *addrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h5convert translated percpu address to physical addressh]h5convert translated percpu address to physical address}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjDhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj)}(hhh]j)}(h?``void *addr`` the address to be converted to physical address h](j)}(h``void *addr``h]j?)}(hjh]h void *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h/the address to be converted to physical addressh]h/the address to be converted to physical address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjcubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj9)}(hGiven **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](hGiven }(hjhhhNhNubjz)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh 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 }(hjhhhNhNubjz)}(h**addr**h]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh* stays valid until this function finishes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj9)}(hpercpu 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]hpercpu 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj9)}(h **Return**h]jz)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubj9)}(h"The physical address for **addr**.h](hThe physical address for }(hjBhhhNhNubjz)}(h**addr**h]haddr}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_alloc_alloc_info (C function)c.pcpu_alloc_alloc_infohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hLstruct pcpu_alloc_info * pcpu_alloc_alloc_info (int nr_groups, int nr_units)h]h)}(hJstruct pcpu_alloc_info *pcpu_alloc_alloc_info(int nr_groups, int nr_units)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMN ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMN ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXpcpu_alloc_alloc_infosbc.pcpu_alloc_alloc_infoasbuh1hhjhhhjhMN ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMN ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMN ubh)}(hpcpu_alloc_alloc_infoh]h)}(hjh]hpcpu_alloc_alloc_info}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMN ubj)}(h(int nr_groups, int nr_units)h](j)}(h int nr_groupsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h nr_groupsh]h nr_groups}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h int nr_unitsh](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hnr_unitsh]hnr_units}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMN ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhjhMN ubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1hhjhMN hjxhhubj )}(hhh]j9)}(hallocate percpu allocation infoh]hallocate percpu allocation info}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMN hjuhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMN ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMR hjubj)}(hhh](j)}(h'``int nr_groups`` the number of groups h](j)}(h``int nr_groups``h]j?)}(hjh]h int nr_groups}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMO hjubj)}(hhh]j9)}(hthe number of groupsh]hthe number of groups}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMO hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMO hjubj)}(h%``int nr_units`` the number of units h](j)}(h``int nr_units``h]j?)}(hjh]h int nr_units}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMP hjubj)}(hhh]j9)}(hthe number of unitsh]hthe number of units}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMP hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMP hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMR hjubj9)}(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 }(hjChhhNhNubjz)}(h **nr_groups**h]h nr_groups}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh groups containing }(hjChhhNhNubjz)}(h **nr_units**h]hnr_units}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhd units. The returned ai’s groups[0].cpu_map points to the cpu_map array which is long enough for }(hjChhhNhNubjz)}(h **nr_units**h]hnr_units}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhn and filled with NR_CPUS. It’s the caller’s responsibility to initialize cpu_map pointer of other groups.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMR hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMX hjubj9)}(hEPointer to the allocated pcpu_alloc_info on success, NULL on failure.h]hEPointer to the allocated pcpu_alloc_info on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMX hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_free_alloc_info (C function)c.pcpu_free_alloc_infohNtauh1hhj qhhhNhNubh)}(hhh](h)}(h6void pcpu_free_alloc_info (struct pcpu_alloc_info *ai)h]h)}(h5void pcpu_free_alloc_info(struct pcpu_alloc_info *ai)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMz ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMz ubh)}(hpcpu_free_alloc_infoh]h)}(hpcpu_free_alloc_infoh]hpcpu_free_alloc_info}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMz ubj)}(h(struct pcpu_alloc_info *ai)h]j)}(hstruct pcpu_alloc_info *aih](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj,modnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_free_alloc_infoasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjXhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(haih]hai}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMz ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMz ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMz hjhhubj )}(hhh]j9)}(hfree percpu allocation infoh]hfree percpu allocation info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMz hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMz ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(h**Parameters** ``struct pcpu_alloc_info *ai`` pcpu_alloc_info to free **Description** Free **ai** which was allocated by pcpu_alloc_alloc_info().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM~ hjubj)}(hhh]j)}(h7``struct pcpu_alloc_info *ai`` pcpu_alloc_info to free h](j)}(h``struct pcpu_alloc_info *ai``h]j?)}(hjh]hstruct pcpu_alloc_info *ai}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM{ hjubj)}(hhh]j9)}(hpcpu_alloc_info to freeh]hpcpu_alloc_info to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM{ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{ hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM} hjubj9)}(h;Free **ai** which was allocated by pcpu_alloc_alloc_info().h](hFree }(hj!hhhNhNubjz)}(h**ai**h]hai}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh0 which was allocated by pcpu_alloc_alloc_info().}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM} hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_dump_alloc_info (C function)c.pcpu_dump_alloc_infohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hMvoid pcpu_dump_alloc_info (const char *lvl, const struct pcpu_alloc_info *ai)h]h)}(hLvoid pcpu_dump_alloc_info(const char *lvl, const struct pcpu_alloc_info *ai)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjphM ubh)}(hpcpu_dump_alloc_infoh]h)}(hpcpu_dump_alloc_infoh]hpcpu_dump_alloc_info}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhjphM ubj)}(h3(const char *lvl, const struct pcpu_alloc_info *ai)h](j)}(hconst char *lvlh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hlvlh]hlvl}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h const struct pcpu_alloc_info *aih](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_dump_alloc_infoasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjchhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(haih]hai}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhjphM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjphM ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1hhjphM hjWhhubj )}(hhh]j9)}(h+print out information about pcpu_alloc_infoh]h+print out information about pcpu_alloc_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh](j)}(h``const char *lvl`` loglevel h](j)}(h``const char *lvl``h]j?)}(hjh]hconst char *lvl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(hloglevelh]hloglevel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h=``const struct pcpu_alloc_info *ai`` allocation info to dump h](j)}(h$``const struct pcpu_alloc_info *ai``h]j?)}(hjh]h const struct pcpu_alloc_info *ai}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(hallocation info to dumph]hallocation info to dump}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hM hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h:Print out information about **ai** using loglevel **lvl**.h](hPrint out information about }(hjehhhNhNubjz)}(h**ai**h]hai}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh using loglevel }(hjehhhNhNubjz)}(h**lvl**h]hlvl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_setup_first_chunk (C function)c.pcpu_setup_first_chunkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hOvoid pcpu_setup_first_chunk (const struct pcpu_alloc_info *ai, void *base_addr)h]h)}(hNvoid pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, void *base_addr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hpcpu_setup_first_chunkh]h)}(hpcpu_setup_first_chunkh]hpcpu_setup_first_chunk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(h3(const struct pcpu_alloc_info *ai, void *base_addr)h](j)}(h const struct pcpu_alloc_info *aih](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj0modnameN classnameNj\j_)}jb]je)}jXjsbc.pcpu_setup_first_chunkasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj\hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(haih]hai}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hvoid *base_addrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj~ubh)}(h base_addrh]h base_addr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h!initialize the first percpu chunkh]h!initialize the first percpu chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(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]j?)}(hjh]h const struct pcpu_alloc_info *ai}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h7pcpu_alloc_info describing how to percpu area is shapedh]h7pcpu_alloc_info describing how to percpu area is shaped}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM hj ubj)}(h#``void *base_addr`` mapped address h](j)}(h``void *base_addr``h]j?)}(hjOh]hvoid *base_addr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjIubj)}(hhh]j9)}(hmapped addressh]hmapped address}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hInitialize the first percpu chunk which contains the kernel static percpu area. This function is to be called from arch percpu area setup path.h]hInitialize the first percpu chunk which contains the kernel static percpu area. This function is to be called from arch percpu area setup path.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(ho**ai** contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.h](jz)}(h**ai**h]hai}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhi contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h6**ai->static_size** is the size of static percpu area.h](jz)}(h**ai->static_size**h]hai->static_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# is the size of static percpu area.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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](jz)}(h**ai->reserved_size**h]hai->reserved_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX, 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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](jz)}(h**ai->dyn_size**h]h ai->dyn_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhg determines the number of bytes available for dynamic allocation in the first chunk. The area between }(hjhhhNhNubjz)}(h**ai->static_size**h]hai->static_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**ai->reserved_size**h]hai->reserved_size}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**ai->dyn_size**h]h ai->dyn_size}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and }(hjhhhNhNubjz)}(h**ai->unit_size**h]h ai->unit_size}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is unused.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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](jz)}(h**ai->unit_size**h]h ai->unit_size}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubhR specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than }(hjkhhhNhNubjz)}(h**ai->static_size**h]hai->static_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh + }(hjkhhhNhNubjz)}(h**ai->reserved_size**h]hai->reserved_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh + }(hjkhhhNhNubjz)}(h**ai->dyn_size**h]h ai->dyn_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hQ**ai->atom_size** is the allocation atom size and used as alignment for vm areas.h](jz)}(h**ai->atom_size**h]h ai->atom_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh@ is the allocation atom size and used as alignment for vm areas.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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](jz)}(h**ai->alloc_size**h]hai->alloc_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh/ is the allocation size and always multiple of }(hjhhhNhNubjz)}(h**ai->atom_size**h]h ai->atom_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. This is larger than }(hjhhhNhNubjz)}(h**ai->atom_size**h]h ai->atom_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**ai->unit_size**h]h ai->unit_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is larger than }(hjhhhNhNubjz)}(h**ai->atom_size**h]h ai->atom_size}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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](jz)}(h**ai->nr_groups**h]h ai->nr_groups}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh and }(hj@hhhNhNubjz)}(h**ai->groups**h]h ai->groups}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh describe virtual memory layout of percpu areas. Units which should be colocated are put into the same group. Dynamic VM areas will be allocated according to these groupings. If }(hj@hhhNhNubjz)}(h**ai->nr_groups**h]h ai->nr_groups}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh9 is zero, a single group containing all units is assumed.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hcThe caller should have mapped the first chunk at **base_addr** and copied static data to each unit.h](h1The caller should have mapped the first chunk at }(hjhhhNhNubjz)}(h **base_addr**h]h base_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% and copied static data to each unit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hXThe 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]hXThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_build_alloc_info (C function)c.pcpu_build_alloc_infohNtauh1hhj qhhhNhNubh)}(hhh](h)}(hstruct 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)}(hstruct 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!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXpcpu_build_alloc_infosbc.pcpu_build_alloc_infoasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhM ubh)}(hpcpu_build_alloc_infoh]h)}(hjh]hpcpu_build_alloc_info}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj)}(hd(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn)h](j)}(hsize_t reserved_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjPmodnameN classnameNj\j_)}jb]j c.pcpu_build_alloc_infoasbuh1hhjGubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(h reserved_sizeh]h reserved_size}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjCubj)}(hsize_t dyn_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.pcpu_build_alloc_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdyn_sizeh]hdyn_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjCubj)}(hsize_t atom_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]j c.pcpu_build_alloc_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h atom_sizeh]h atom_size}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjCubj)}(h)pcpu_fc_cpu_distance_fn_t cpu_distance_fnh](h)}(hhh]h)}(hpcpu_fc_cpu_distance_fn_th]hpcpu_fc_cpu_distance_fn_t}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj(modnameN classnameNj\j_)}jb]j c.pcpu_build_alloc_infoasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcpu_distance_fnh]hcpu_distance_fn}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjCubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h3build alloc_info considering distances between CPUsh]h3build alloc_info considering distances between CPUs}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh](j)}(hC``size_t reserved_size`` the size of reserved percpu area in bytes h](j)}(h``size_t reserved_size``h]j?)}(hjh]hsize_t reserved_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hF``size_t dyn_size`` minimum free size for dynamic allocation in bytes h](j)}(h``size_t dyn_size``h]j?)}(hjh]hsize_t dyn_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h1minimum free size for dynamic allocation in bytesh]h1minimum free size for dynamic allocation in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h*``size_t atom_size`` allocation atom size h](j)}(h``size_t atom_size``h]j?)}(hj/h]hsize_t atom_size}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj)ubj)}(hhh]j9)}(hallocation atom sizeh]hallocation atom size}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhM hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjubj)}(hd``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]j?)}(hjhh]h)pcpu_fc_cpu_distance_fn_t cpu_distance_fn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjbubj)}(hhh]j9)}(h5callback to determine distance between cpus, optionalh]h5callback to determine distance between cpus, optional}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hM hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hThis function determines grouping of units, their mappings to cpus and other parameters considering needed percpu size, allocation atom size and distances between CPUs.h]hThis function determines grouping of units, their mappings to cpus and other parameters considering needed percpu size, allocation atom size and distances between CPUs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hcOn success, pointer to the new allocation_info is returned. On failure, ERR_PTR value is returned.h]hcOn success, pointer to the new allocation_info is returned. On failure, ERR_PTR value is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_embed_first_chunk (C function)c.pcpu_embed_first_chunkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hint 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)}(hint 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)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj,hM ubh)}(hpcpu_embed_first_chunkh]h)}(hpcpu_embed_first_chunkh]hpcpu_embed_first_chunk}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hM ubj)}(h(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)h](j)}(hsize_t reserved_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj`modnameN classnameNj\j_)}jb]je)}jXjAsbc.pcpu_embed_first_chunkasbuh1hhjWubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(h reserved_sizeh]h reserved_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hsize_t dyn_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jzc.pcpu_embed_first_chunkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdyn_sizeh]hdyn_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(hsize_t atom_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jzc.pcpu_embed_first_chunkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h atom_sizeh]h atom_size}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(h)pcpu_fc_cpu_distance_fn_t cpu_distance_fnh](h)}(hhh]h)}(hpcpu_fc_cpu_distance_fn_th]hpcpu_fc_cpu_distance_fn_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj:modnameN classnameNj\j_)}jb]jzc.pcpu_embed_first_chunkasbuh1hhj1ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hcpu_distance_fnh]hcpu_distance_fn}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubj)}(h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fnh](h)}(hhh]h)}(hpcpu_fc_cpu_to_node_fn_th]hpcpu_fc_cpu_to_node_fn_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jzc.pcpu_embed_first_chunkasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(h cpu_to_nd_fnh]h cpu_to_nd_fn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjSubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj,hM hjhhubj )}(hhh]j9)}(h)embed the first percpu chunk into bootmemh]h)embed the first percpu chunk into bootmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh](j)}(hC``size_t reserved_size`` the size of reserved percpu area in bytes h](j)}(h``size_t reserved_size``h]j?)}(hjh]hsize_t reserved_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjubj)}(hF``size_t dyn_size`` minimum free size for dynamic allocation in bytes h](j)}(h``size_t dyn_size``h]j?)}(hjPh]hsize_t dyn_size}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjJubj)}(hhh]j9)}(h1minimum free size for dynamic allocation in bytesh]h1minimum free size for dynamic allocation in bytes}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjubj)}(h*``size_t atom_size`` allocation atom size h](j)}(h``size_t atom_size``h]j?)}(hjh]hsize_t atom_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(hallocation atom sizeh]hallocation atom size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hd``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]j?)}(hjh]h)pcpu_fc_cpu_distance_fn_t cpu_distance_fn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h5callback to determine distance between cpus, optionalh]h5callback to determine distance between cpus, optional}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hY``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]j?)}(hjh]h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj)}(hhh]j9)}(h.callback to convert cpu to it's node, optionalh]h0callback to convert cpu to it’s node, optional}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hIf 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](hIf this function is used to setup the first chunk, it is allocated by calling pcpu_fc_alloc and used as-is without being mapped into vmalloc area. Allocations are always whole multiples of }(hj[hhhNhNubjz)}(h **atom_size**h]h atom_size}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh aligned to }(hj[hhhNhNubjz)}(h **atom_size**h]h atom_size}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hXThis 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]hXThis 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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h5**dyn_size** specifies the minimum dynamic area size.h](jz)}(h **dyn_size**h]hdyn_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) specifies the minimum dynamic area size.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(hsIf the needed size is smaller than the minimum or specified unit size, the leftover is returned using pcpu_fc_free.h]hsIf the needed size is smaller than the minimum or specified unit size, the leftover is returned using pcpu_fc_free.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj9)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_page_first_chunk (C function)c.pcpu_page_first_chunkhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hWint pcpu_page_first_chunk (size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)h]h)}(hVint pcpu_page_first_chunk(size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM\ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM\ ubh)}(hpcpu_page_first_chunkh]h)}(hpcpu_page_first_chunkh]hpcpu_page_first_chunk}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhM\ ubj)}(h=(size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)h](j)}(hsize_t reserved_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjRmodnameN classnameNj\j_)}jb]je)}jXj3sbc.pcpu_page_first_chunkasbuh1hhjIubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(h reserved_sizeh]h reserved_size}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubj)}(h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fnh](h)}(hhh]h)}(hpcpu_fc_cpu_to_node_fn_th]hpcpu_fc_cpu_to_node_fn_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jlc.pcpu_page_first_chunkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h cpu_to_nd_fnh]h cpu_to_nd_fn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjEubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhM\ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM\ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM\ hjhhubj )}(hhh]j9)}(h)map the first chunk using PAGE_SIZE pagesh]h)map the first chunk using PAGE_SIZE pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM\ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM\ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM` hj ubj)}(hhh](j)}(hC``size_t reserved_size`` the size of reserved percpu area in bytes h](j)}(h``size_t reserved_size``h]j?)}(hj1h]hsize_t reserved_size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM] hj+ubj)}(hhh]j9)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhM] hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM] hj(ubj)}(hY``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]j?)}(hjjh]h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM^ hjdubj)}(hhh]j9)}(h.callback to convert cpu to it's node, optionalh]h0callback to convert cpu to it’s node, optional}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM^ hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhM^ hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM` hj ubj9)}(hThis is a helper to ease setting up page-remapped first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.h]hThis is a helper to ease setting up page-remapped first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM` hj ubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMc hj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMf hj ubj9)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMf hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#copy_from_user_nofault (C function)c.copy_from_user_nofaulthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hLlong copy_from_user_nofault (void *dst, const void __user *src, size_t size)h]h)}(hKlong copy_from_user_nofault(void *dst, const void __user *src, size_t size)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKqubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hKqubh)}(hcopy_from_user_nofaulth]h)}(hcopy_from_user_nofaulth]hcopy_from_user_nofault}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj.hKqubj)}(h0(void *dst, const void __user *src, size_t size)h](j)}(h void *dsth](j)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjyhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjUubj)}(hconst void __user *srch](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjUubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjCsbc.copy_from_user_nofaultasbuh1hhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hsizeh]hsize}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjUubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj.hKqubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj.hKqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj.hKqhjhhubj )}(hhh]j9)}(h1safely attempt to read from a user-space locationh]h1safely attempt to read from a user-space location}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKqhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKqubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKuhjubj)}(hhh](j)}(h=``void *dst`` pointer to the buffer that shall take the data h](j)}(h ``void *dst``h]j?)}(hjh]h void *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKrhjubj)}(hhh]j9)}(h.pointer to the buffer that shall take the datah]h.pointer to the buffer that shall take the data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKrhjubj)}(hN``const void __user *src`` address to read from. This must be a user address. h](j)}(h``const void __user *src``h]j?)}(hjh]hconst void __user *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKshjubj)}(hhh]j9)}(h2address to read from. This must be a user address.h]h2address to read from. This must be a user address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjubj)}(h'``size_t size`` size of the data chunk h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKthjubj)}(hhh]j9)}(hsize of the data chunkh]hsize of the data chunk}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hKthj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKthjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKvhjubj9)}(hzSafely read from user address **src** to the buffer at **dst**. If a kernel fault happens, handle that and return -EFAULT.h](hSafely read from user address }(hjmhhhNhNubjz)}(h**src**h]hsrc}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh to the buffer at }(hjmhhhNhNubjz)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh<. If a kernel fault happens, handle that and return -EFAULT.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!copy_to_user_nofault (C function)c.copy_to_user_nofaulthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hJlong copy_to_user_nofault (void __user *dst, const void *src, size_t size)h]h)}(hIlong copy_to_user_nofault(void __user *dst, const void *src, size_t size)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hcopy_to_user_nofaulth]h)}(hcopy_to_user_nofaulth]hcopy_to_user_nofault}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h0(void __user *dst, const void *src, size_t size)h](j)}(hvoid __user *dsth](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj+hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdsth]hdst}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hconst void *srch](j!)}(hjeh]hconst}(hjQhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjMubh)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.copy_to_user_nofaultasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h0safely attempt to write to a user-space locationh]h0safely attempt to write to a user-space location}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!j4j!j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj%ubj)}(hhh](j)}(h)``void __user *dst`` address to write to h](j)}(h``void __user *dst``h]j?)}(hjJh]hvoid __user *dst}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjDubj)}(hhh]j9)}(haddress to write toh]haddress to write to}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjAubj)}(h>``const void *src`` pointer to the data that shall be written h](j)}(h``const void *src``h]j?)}(hjh]hconst void *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj}ubj)}(hhh]j9)}(h)pointer to the data that shall be writtenh]h)pointer to the data that shall be written}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjAubj)}(h'``size_t size`` size of the data chunk h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh]j9)}(hsize of the data chunkh]hsize of the data chunk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj%ubj9)}(hwSafely write to address **dst** from the buffer at **src**. If a kernel fault happens, handle that and return -EFAULT.h](hSafely write to address }(hj hhhNhNubjz)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh from the buffer at }(hj hhhNhNubjz)}(h**src**h]hsrc}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh=. If a kernel fault happens, handle that and return -EFAULT.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&strncpy_from_user_nofault (C function)c.strncpy_from_user_nofaulthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hVlong strncpy_from_user_nofault (char *dst, const void __user *unsafe_addr, long count)h]h)}(hUlong strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, long count)h](j)}(hlongh]hlong}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjnhKubh)}(hstrncpy_from_user_nofaulth]h)}(hstrncpy_from_user_nofaulth]hstrncpy_from_user_nofault}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjnhKubj)}(h7(char *dst, const void __user *unsafe_addr, long count)h](j)}(h char *dsth](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hconst void __user *unsafe_addrh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj(hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h unsafe_addrh]h unsafe_addr}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h long counth](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hcounth]hcount}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj\hhhjnhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjnhKubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjnhKhjUhhubj )}(hhh]j)}(hhh]j+)}(h6Copy a NUL terminated string from unsafe user address.h]j9)}(hjh]h6Copy a NUL terminated string from unsafe user address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubah}(h]h ]h"]h$]h&]uh1j+hjhhhjhNubah}(h]h ]h"]h$]h&]j%j&uh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjnhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh](j)}(hh``char *dst`` Destination address, in kernel space. This buffer must be at least **count** bytes long. h](j)}(h ``char *dst``h]j?)}(hjh]h char *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh]j9)}(hYDestination address, in kernel space. This buffer must be at least **count** bytes long.h](hDDestination address, in kernel space. This buffer must be at least }(hjhhhNhNubjz)}(h **count**h]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh bytes long.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``const void __user *unsafe_addr`` Unsafe user address. h](j)}(h"``const void __user *unsafe_addr``h]j?)}(hj3h]hconst void __user *unsafe_addr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj-ubj)}(hhh]j9)}(hUnsafe user address.h]hUnsafe user address.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjubj)}(hL``long count`` Maximum number of bytes to copy, including the trailing NUL. h](j)}(h``long count``h]j?)}(hjlh]h long count}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjfubj)}(hhh]j9)}(h ah"]h$]h&]uh1j1 hjubh)}(h unsafe_addrh]h unsafe_addr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h long counth](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hcounth]hcount}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhj]hhhjohKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohKubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1hhjohKhjVhhubj )}(hhh]j)}(hhh]j+)}(h2Get the size of a user string INCLUDING final NUL.h]j9)}(hjXh]h2Get the size of a user string INCLUDING final NUL.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjVubah}(h]h ]h"]h$]h&]uh1j+hjShhhjghNubah}(h]h ]h"]h$]h&]j%j&uh1jhjghKhjPhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j}j4j}j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh](j)}(h:``const void __user *unsafe_addr`` The string to measure. h](j)}(h"``const void __user *unsafe_addr``h]j?)}(hjh]hconst void __user *unsafe_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh]j9)}(hThe string to measure.h]hThe string to measure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h-``long count`` Maximum count (including NUL) h](j)}(h``long count``h]j?)}(hjh]h long count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh]j9)}(hMaximum count (including NUL)h]hMaximum count (including NUL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj9)}(hHGet the size of a NUL-terminated string in user space without pagefault.h]hHGet the size of a NUL-terminated string in user space without pagefault.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj9)}(h=Returns the size of the string INCLUDING the terminating NUL.h]h=Returns the size of the string INCLUDING the terminating NUL.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj9)}(hIf 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](h8If the string is too long, returns a number larger than }(hjNhhhNhNubjz)}(h **count**h]hcount}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubhg. User has to check the return value against “> count”. On exception (or invalid count), returns 0.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj9)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&writeback_throttling_sane (C function)c.writeback_throttling_sanehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h8bool writeback_throttling_sane (struct scan_control *sc)h]h)}(h7bool writeback_throttling_sane(struct scan_control *sc)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hwriteback_throttling_saneh]h)}(hwriteback_throttling_saneh]hwriteback_throttling_sane}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h(struct scan_control *sc)h]j)}(hstruct scan_control *sch](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h scan_controlh]h scan_control}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.writeback_throttling_saneasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj&hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hsch]hsc}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h2is the usual dirty throttling mechanism available?h]h2is the usual dirty throttling mechanism available?}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjyubj)}(hhh]j)}(h5``struct scan_control *sc`` scan_control in question h](j)}(h``struct scan_control *sc``h]j?)}(hjh]hstruct scan_control *sc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjubj)}(hhh]j9)}(hscan_control in questionh]hscan_control in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjyubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjyubj9)}(hThis function tests whether the vmscan currently in progress can assume that the normal dirty throttling mechanism is operational.h]hThis function tests whether the vmscan currently in progress can assume that the normal dirty throttling mechanism is operational.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌlruvec_lru_size (C function)c.lruvec_lru_sizehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hVunsigned long lruvec_lru_size (struct lruvec *lruvec, enum lru_list lru, int zone_idx)h]h)}(hUunsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, int zone_idx)h](j)}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hMubj)}(hlongh]hlong}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hMubh)}(hlruvec_lru_sizeh]h)}(hlruvec_lru_sizeh]hlruvec_lru_size}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hMubj)}(h8(struct lruvec *lruvec, enum lru_list lru, int zone_idx)h](j)}(hstruct lruvec *lruvech](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjlsbc.lruvec_lru_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hlruvech]hlruvec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubj)}(henum lru_list lruh](j!)}(hjh]henum}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlru_listh]hlru_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.lruvec_lru_sizeasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlruh]hlru}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubj)}(h int zone_idxh](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hzone_idxh]hzone_idx}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj~ubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj"hhubj )}(hhh]j9)}(h2Returns the number of pages on the given LRU list.h]h2Returns the number of pages on the given LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjubj)}(hhh](j)}(h%``struct lruvec *lruvec`` lru vector h](j)}(h``struct lruvec *lruvec``h]j?)}(hjh]hstruct lruvec *lruvec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjubj)}(hhh]j9)}(h lru vectorh]h lru vector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``enum lru_list lru`` lru to use h](j)}(h``enum lru_list lru``h]j?)}(hjh]henum lru_list lru}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjubj)}(hhh]j9)}(h lru to useh]h lru to use}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(hP``int zone_idx`` zones to consider (use MAX_NR_ZONES - 1 for the whole LRU list)h](j)}(h``int zone_idx``h]j?)}(hjTh]h int zone_idx}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjNubj)}(hhh]j9)}(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)}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌremove_mapping (C function)c.remove_mappinghNtauh1hhj qhhhNhNubh)}(hhh](h)}(hHlong remove_mapping (struct address_space *mapping, struct folio *folio)h]h)}(hGlong remove_mapping(struct address_space *mapping, struct folio *folio)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMJubh)}(hremove_mappingh]h)}(hremove_mappingh]hremove_mapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMJubj)}(h4(struct address_space *mapping, struct folio *folio)h](j)}(hstruct address_space *mappingh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjsbc.remove_mappingasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj7hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmappingh]hmapping}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hj]hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]h)}(hfolioh]hfolio}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj}modnameN classnameNj\j_)}jb]j%c.remove_mappingasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjYubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMJhjhhubj )}(hhh]j9)}(h+Attempt to remove a folio from its mapping.h]h+Attempt to remove a folio from its mapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMNhjubj)}(hhh](j)}(h5``struct address_space *mapping`` The address space. h](j)}(h!``struct address_space *mapping``h]j?)}(hjh]hstruct address_space *mapping}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMKhjubj)}(hhh]j9)}(hThe address space.h]hThe address space.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMKhjubj)}(h-``struct folio *folio`` The folio to remove. h](j)}(h``struct folio *folio``h]j?)}(hjXh]hstruct folio *folio}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMLhjRubj)}(hhh]j9)}(hThe folio to remove.h]hThe folio to remove.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMLhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMLhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMNhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMNhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMQhjubj9)}(hSThe number of pages removed from the mapping. 0 if the folio could not be removed.h]hSThe number of pages removed from the mapping. 0 if the folio could not be removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMPhjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMShjubj9)}(hHThe caller should have a single refcount on the folio and hold its lock.h]hHThe caller should have a single refcount on the folio and hold its lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_putback_lru (C function)c.folio_putback_lruhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h,void folio_putback_lru (struct folio *folio)h]h)}(h+void folio_putback_lru(struct folio *folio)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMdubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hMdubh)}(hfolio_putback_lruh]h)}(hfolio_putback_lruh]hfolio_putback_lru}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMdubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjchhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjIsbc.folio_putback_lruasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj_ubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj[ubah}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj4hMdhjhhubj )}(hhh]j9)}(h8Put previously isolated folio onto appropriate LRU list.h]h8Put previously isolated folio onto appropriate LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhhjubj)}(hhh]j)}(h=``struct folio *folio`` Folio to be returned to an LRU list. h](j)}(h``struct folio *folio``h]j?)}(hj'h]hstruct folio *folio}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMehj!ubj)}(hhh]j9)}(h$Folio to be returned to an LRU list.h]h$Folio to be returned to an LRU list.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMehj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMehjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMghjubj9)}(hpAdd previously isolated **folio** to appropriate LRU list. The folio may still be unevictable for other reasons.h](hAdd previously isolated }(hjxhhhNhNubjz)}(h **folio**h]hfolio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubhO to appropriate LRU list. The folio may still be unevictable for other reasons.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMghjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMjhjubj9)}(h6lru_lock must not be held, interrupts must be enabled.h]h6lru_lock must not be held, interrupts must be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_isolate_lru (C function)c.folio_isolate_lruhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h,bool folio_isolate_lru (struct folio *folio)h]h)}(h+bool folio_isolate_lru(struct folio *folio)h](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM&ubh)}(hfolio_isolate_lruh]h)}(hfolio_isolate_lruh]hfolio_isolate_lru}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM&ubj)}(h(struct folio *folio)h]j)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj<modnameN classnameNj\j_)}jb]je)}jXjsbc.folio_isolate_lruasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hfolioh]hfolio}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM&ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM&hjhhubj )}(hhh]j9)}(h)Try to isolate a folio from its LRU list.h]h)Try to isolate a folio from its LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM&hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM&ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hXQ**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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM*hjubj)}(hhh]j)}(h<``struct folio *folio`` Folio to isolate from its LRU list. h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM'hjubj)}(hhh]j9)}(h#Folio to isolate from its LRU list.h]h#Folio to isolate from its LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM)hjubj9)}(hyIsolate a **folio** from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.h](h Isolate a }(hj1hhhNhNubjz)}(h **folio**h]hfolio}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubhf from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM)hjubj9)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM,hjubj+)}(hhh](j+)}(hMust 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]j9)}(hMust 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]hMust 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).}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM1hjdubah}(h]h ]h"]h$]h&]uh1j+hjaubj+)}(hThe lru_lock must not be held.h]j9)}(hjh]hThe lru_lock must not be held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM4hj}ubah}(h]h ]h"]h$]h&]uh1j+hjaubj+)}(hInterrupts must be enabled. h]j9)}(hInterrupts must be enabled.h]hInterrupts must be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM5hjubah}(h]h ]h"]h$]h&]uh1j+hjaubeh}(h]h ]h"]h$]h&]j0,j1,j2,jk j3,j uh1j+hjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM7hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM3hjubj9)}(hZtrue if the folio was removed from an LRU list. false if the folio was not on an LRU list.h]hZtrue if the folio was removed from an LRU list. false if the folio was not on an LRU list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*check_move_unevictable_folios (C function)c.check_move_unevictable_folioshNtauh1hhj qhhhNhNubh)}(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)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hM!ubh)}(hcheck_move_unevictable_foliosh]h)}(hcheck_move_unevictable_foliosh]hcheck_move_unevictable_folios}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hM!ubj)}(h(struct folio_batch *fbatch)h]j)}(hstruct folio_batch *fbatchh](j!)}(hj$h]hstruct}(hjPhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjpmodnameN classnameNj\j_)}jb]je)}jXj6sbc.check_move_unevictable_foliosasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjLubh)}(hfbatchh]hfbatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjHubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj!hM!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj!hM!hjhhubj )}(hhh]j9)}(h2Move evictable folios to appropriate zone lru listh]h2Move evictable folios to appropriate zone lru list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM!ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM%hjubj)}(hhh]j)}(h=``struct folio_batch *fbatch`` Batch of lru folios to check. h](j)}(h``struct folio_batch *fbatch``h]j?)}(hjh]hstruct folio_batch *fbatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM#hjubj)}(hhh]j9)}(hBatch of lru folios to check.h]hBatch of lru folios to check.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hM#hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM#hj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM%hjubj9)}(hChecks 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]hChecks 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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__remove_pages (C function)c.__remove_pageshNtauh1hhj qhhhNhNubh)}(hhh](h)}(h[void __remove_pages (unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap)h]h)}(hZvoid __remove_pages(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMFubh)}(h__remove_pagesh]h)}(h__remove_pagesh]h__remove_pages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMFubj)}(hG(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap)h](j)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct vmem_altmap *altmaph](j!)}(hj$h]hstruct}(hjshhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]h)}(h vmem_altmaph]h vmem_altmap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.__remove_pagesasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjoubh)}(haltmaph]haltmap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMFhjhhubj )}(hhh]j9)}(hremove sections of pagesh]hremove sections of pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMFhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX**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 **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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMJhjubj)}(hhh](j)}(hQ``unsigned long pfn`` starting pageframe (must be aligned to start of a section) h](j)}(h``unsigned long pfn``h]j?)}(hj7h]hunsigned long pfn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMGhj1ubj)}(hhh]j9)}(h:starting pageframe (must be aligned to start of a section)h]h:starting pageframe (must be aligned to start of a section)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMGhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMGhj.ubj)}(hX``unsigned long nr_pages`` number of pages to remove (must be multiple of section size) h](j)}(h``unsigned long nr_pages``h]j?)}(hjph]hunsigned long nr_pages}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMHhjjubj)}(hhh]j9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMIhjubj)}(hhh]j9)}(hAalternative device page map or ``NULL`` if default memmap is usedh](halternative device page map or }(hjhhhNhNubj?)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if default memmap is used}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMKhjubj9)}(hGeneric 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]hGeneric 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().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtry_offline_node (C function)c.try_offline_nodehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hvoid try_offline_node (int nid)h]h)}(hvoid try_offline_node(int nid)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjIhMubh)}(htry_offline_nodeh]h)}(htry_offline_nodeh]htry_offline_node}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhMubj)}(h (int nid)h]j)}(hint nidh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubah}(h]h ]h"]h$]h&]jj uh1jhj7hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjIhMhj0hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubj)}(hhh]j)}(h``int nid`` the node ID h](j)}(h ``int nid``h]j?)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubj)}(hhh]j9)}(h the node IDh]h the node ID}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubj9)}(hGOffline a node if all memory sections and cpus of the node are removed.h]hGOffline a node if all memory sections and cpus of the node are removed.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubj9)}(h**NOTE**h]jz)}(hjRh]hNOTE}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubj9)}(hoThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call.h]hoThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__remove_memory (C function)c.__remove_memoryhNtauh1hhj qhhhNhNubh)}(hhh](h)}(h*void __remove_memory (u64 start, u64 size)h]h)}(h)void __remove_memory(u64 start, u64 size)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h__remove_memoryh]h)}(h__remove_memoryh]h__remove_memory}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h(u64 start, u64 size)h](j)}(h u64 starth](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.__remove_memoryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hu64 sizeh](h)}(hhh]h)}(hu64h]hu64}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj#modnameN classnameNj\j_)}jb]jc.__remove_memoryasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h.Remove memory if every memory block is offlineh]h.Remove memory if every memory block is offline}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chMhjthhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM hjubj)}(hhh](j)}(h7``u64 start`` physical address of the region to remove h](j)}(h ``u64 start``h]j?)}(hjh]h u64 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM hjubj)}(hhh]j9)}(h(physical address of the region to removeh]h(physical address of the region to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``u64 size`` size of the region to remove h](j)}(h ``u64 size``h]j?)}(hjh]hu64 size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM hjubj)}(hhh]j9)}(hsize of the region to removeh]hsize of the region to remove}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**NOTE**h]jz)}(hj,h]hNOTE}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM hjubj9)}(hThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call, as required by try_offline_node().h]hThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call, as required by try_offline_node().}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mmu_interval_read_begin (C function)c.mmu_interval_read_beginhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hRunsigned long mmu_interval_read_begin (struct mmu_interval_notifier *interval_sub)h]h)}(hQunsigned long mmu_interval_read_begin(struct mmu_interval_notifier *interval_sub)h](j)}(hunsignedh]hunsigned}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhKubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhKubh)}(hmmu_interval_read_beginh]h)}(hmmu_interval_read_beginh]hmmu_interval_read_begin}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhjhKubj)}(h,(struct mmu_interval_notifier *interval_sub)h]j)}(h*struct mmu_interval_notifier *interval_subh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_interval_notifierh]hmmu_interval_notifier}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.mmu_interval_read_beginasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h interval_subh]h interval_sub}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhjmhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjhKubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjfhhubj )}(hhh]j9)}(h5Begin a read side critical section against a VA rangeh]h5Begin a read side critical section against a VA range}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubj)}(hhh]j)}(hI``struct mmu_interval_notifier *interval_sub`` The interval subscription h](j)}(h.``struct mmu_interval_notifier *interval_sub``h]j?)}(hjh]h*struct mmu_interval_notifier *interval_sub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjubj)}(hhh]j9)}(hThe interval subscriptionh]hThe interval subscription}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubj9)}(hmmu_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]hmmu_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubj9)}(hUThe caller is required to provide a 'user_lock' to serialize both teardown and setup.h]hYThe caller is required to provide a ‘user_lock’ to serialize both teardown and setup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubj9)}(h?The return value should be passed to mmu_interval_read_retry().h]h?The return value should be passed to mmu_interval_read_retry().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"mmu_notifier_register (C function)c.mmu_notifier_registerhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hSint mmu_notifier_register (struct mmu_notifier *subscription, struct mm_struct *mm)h]h)}(hRint mmu_notifier_register(struct mmu_notifier *subscription, struct mm_struct *mm)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjIhMubh)}(hmmu_notifier_registerh]h)}(hmmu_notifier_registerh]hmmu_notifier_register}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhMubj)}(h9(struct mmu_notifier *subscription, struct mm_struct *mm)h](j)}(h!struct mmu_notifier *subscriptionh](j!)}(hj$h]hstruct}(hjxhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(h mmu_notifierh]h mmu_notifier}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj^sbc.mmu_notifier_registerasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjtubh)}(h subscriptionh]h subscription}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubj)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jc.mmu_notifier_registerasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hj4hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmmh]hmm}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjpubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjIhMhj0hhubj )}(hhh]j9)}(hRegister a notifier on a mmh]hRegister a notifier on a mm}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh](j)}(h=``struct mmu_notifier *subscription`` The notifier to attach h](j)}(h%``struct mmu_notifier *subscription``h]j?)}(hjh]h!struct mmu_notifier *subscription}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh]j9)}(hThe notifier to attachh]hThe notifier to attach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``struct mm_struct *mm`` The mm to attach the notifier to h](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh]j9)}(h The mm to attach the notifier toh]h The mm to attach the notifier to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj9)}(hXMust 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]hXMust 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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj9)}(hammu_notifier_unregister() or mmu_notifier_put() must be always called to unregister the notifier.h]hammu_notifier_unregister() or mmu_notifier_put() must be always called to unregister the notifier.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj9)}(hWhile 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]hWhile 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().}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mmu_notifier_get_locked (C function)c.mmu_notifier_get_lockedhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hhstruct mmu_notifier * mmu_notifier_get_locked (const struct mmu_notifier_ops *ops, struct mm_struct *mm)h]h)}(hfstruct mmu_notifier *mmu_notifier_get_locked(const struct mmu_notifier_ops *ops, struct mm_struct *mm)h](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(h mmu_notifierh]h mmu_notifier}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXmmu_notifier_get_lockedsbc.mmu_notifier_get_lockedasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjhhhjhMubh)}(hmmu_notifier_get_lockedh]h)}(hjh]hmmu_notifier_get_locked}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(h:(const struct mmu_notifier_ops *ops, struct mm_struct *mm)h](j)}(h"const struct mmu_notifier_ops *opsh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_notifier_opsh]hmmu_notifier_ops}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj8modnameN classnameNj\j_)}jb]jc.mmu_notifier_get_lockedasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjbhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hopsh]hops}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.mmu_notifier_get_lockedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjxhhubj )}(hhh]j9)}(h6Return the single struct mmu_notifier for the mm & opsh]h6Return the single struct mmu_notifier for the mm & ops}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!j4j!j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj%ubj)}(hhh](j)}(hR``const struct mmu_notifier_ops *ops`` The operations struct being subscribe with h](j)}(h&``const struct mmu_notifier_ops *ops``h]j?)}(hjJh]h"const struct mmu_notifier_ops *ops}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjDubj)}(hhh]j9)}(h*The operations struct being subscribe withh]h*The operations struct being subscribe with}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h8``struct mm_struct *mm`` The mm to attach notifiers too h](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj}ubj)}(hhh]j9)}(hThe mm to attach notifiers tooh]hThe mm to attach notifiers too}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj%ubj9)}(hThis 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]hThis 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj%ubj9)}(hEach 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]hEach 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj%ubj9)}(hWhile 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]hWhile 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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmmu_notifier_put (C function)c.mmu_notifier_puthNtauh1hhj qhhhNhNubh)}(hhh](h)}(h9void mmu_notifier_put (struct mmu_notifier *subscription)h]h)}(h8void mmu_notifier_put(struct mmu_notifier *subscription)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMSubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMSubh)}(hmmu_notifier_puth]h)}(hmmu_notifier_puth]hmmu_notifier_put}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj/hMSubj)}(h#(struct mmu_notifier *subscription)h]j)}(h!struct mmu_notifier *subscriptionh](j!)}(hj$h]hstruct}(hj^hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]h)}(h mmu_notifierh]h mmu_notifier}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj~modnameN classnameNj\j_)}jb]je)}jXjDsbc.mmu_notifier_putasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjZubh)}(h subscriptionh]h subscription}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjVubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj/hMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj/hMSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj/hMShjhhubj )}(hhh]j9)}(h%Release the reference on the notifierh]h%Release the reference on the notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMShjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMSubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMWhjubj)}(hhh]j)}(h=``struct mmu_notifier *subscription`` The notifier to act on h](j)}(h%``struct mmu_notifier *subscription``h]j?)}(hj"h]h!struct mmu_notifier *subscription}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMThjubj)}(hhh]j9)}(hThe notifier to act onh]hThe notifier to act on}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMThj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMThjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMVhjubj9)}(hThis 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]hThis 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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMVhjubj9)}(hUnlike 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]hUnlike 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMZhjubj9)}(hAs 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]hAs 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM^hjubj9)}(hThis function can be called from the ops->release callback, however the caller must still ensure it is called pairwise with mmu_notifier_get().h]hThis function can be called from the ops->release callback, however the caller must still ensure it is called pairwise with mmu_notifier_get().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMbhjubj9)}(hModules calling this function must call mmu_notifier_synchronize() in their __exit functions to ensure the async work is completed.h]hModules calling this function must call mmu_notifier_synchronize() in their __exit functions to ensure the async work is completed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMehjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mmu_interval_notifier_insert (C function)c.mmu_interval_notifier_inserthNtauh1hhj qhhhNhNubh)}(hhh](h)}(hint 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)}(hint 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)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hmmu_interval_notifier_inserth]h)}(hmmu_interval_notifier_inserth]hmmu_interval_notifier_insert}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj)}(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_subh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_interval_notifierh]hmmu_interval_notifier}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj;modnameN classnameNj\j_)}jb]je)}jXjsbc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjghhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h interval_subh]h interval_sub}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct mm_struct *mmh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jUc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long lengthh](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hlongh]hlong}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h+const struct mmu_interval_notifier_ops *opsh](j!)}(hjeh]hconst}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jUc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hopsh]hops}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hInsert an interval notifierh]hInsert an interval notifier}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjWubj)}(hhh](j)}(hQ``struct mmu_interval_notifier *interval_sub`` Interval subscription to register h](j)}(h.``struct mmu_interval_notifier *interval_sub``h]j?)}(hj|h]h*struct mmu_interval_notifier *interval_sub}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjvubj)}(hhh]j9)}(h!Interval subscription to registerh]h!Interval subscription to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h0``struct mm_struct *mm`` mm_struct to attach to h](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh]j9)}(hmm_struct to attach toh]hmm_struct to attach to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h<``unsigned long start`` Starting virtual address to monitor h](j)}(h``unsigned long start``h]j?)}(hjh]hunsigned long start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh]j9)}(h#Starting virtual address to monitorh]h#Starting virtual address to monitor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h8``unsigned long length`` Length of the range to monitor h](j)}(h``unsigned long length``h]j?)}(hj'h]hunsigned long length}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj!ubj)}(hhh]j9)}(hLength of the range to monitorh]hLength of the range to monitor}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjsubj)}(hm``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]j?)}(hj`h]h+const struct mmu_interval_notifier_ops *ops}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjZubj)}(hhh]j9)}(h ah"]h$]h&]uh1j1 hj(ubh)}(h interval_subh]h interval_sub}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj$ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hRemove a interval notifierh]hRemove a interval notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM hjubj)}(hhh]j)}(hS``struct mmu_interval_notifier *interval_sub`` Interval subscription to unregister h](j)}(h.``struct mmu_interval_notifier *interval_sub``h]j?)}(hjh]h*struct mmu_interval_notifier *interval_sub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh]j9)}(h#Interval subscription to unregisterh]h#Interval subscription to unregister}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj9)}(hlThis function must be paired with mmu_interval_notifier_insert(). It cannot be called from any ops callback.h]hlThis function must be paired with mmu_interval_notifier_insert(). It cannot be called from any ops callback.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj9)}(heOnce this returns ops callbacks are no longer running on other CPUs and will not be called in future.h]heOnce this returns ops callbacks are no longer running on other CPUs and will not be called in future.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mmu_notifier_synchronize (C function)c.mmu_notifier_synchronizehNtauh1hhj qhhhNhNubh)}(hhh](h)}(h$void mmu_notifier_synchronize (void)h]h)}(h#void mmu_notifier_synchronize(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhM;ubh)}(hmmu_notifier_synchronizeh]h)}(hmmu_notifier_synchronizeh]hmmu_notifier_synchronize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhM;ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1jhjubah}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhM;ubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjhM;hjthhubj )}(hhh]j9)}(h"Ensure all mmu_notifiers are freedh]h"Ensure all mmu_notifiers are freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM?hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj'h]hvoid}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhj!ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chKhjubj9)}(hThis 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]hThis 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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM<hjubj9)}(hrBefore using the caller must ensure that all of its mmu_notifiers have been fully released via mmu_notifier_put().h]hrBefore using the caller must ensure that all of its mmu_notifiers have been fully released via mmu_notifier_put().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM@hjubj9)}(hsModules using the mmu_notifier_put() API should call this in their __exit function to avoid module unloading races.h]hsModules using the mmu_notifier_put() API should call this in their __exit function to avoid module unloading races.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMChjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&balloon_page_list_enqueue (C function)c.balloon_page_list_enqueuehNtauh1hhj qhhhNhNubh)}(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]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXballoon_page_list_enqueuesbc.balloon_page_list_enqueueasbuh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hballoon_page_list_enqueueh]h)}(hjh]hballoon_page_list_enqueue}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj)}(h>(struct balloon_dev_info *b_dev_info, struct list_head *pages)h](j)}(h#struct balloon_dev_info *b_dev_infoh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hballoon_dev_infoh]hballoon_dev_info}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj7modnameN classnameNj\j_)}jb]jc.balloon_page_list_enqueueasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjahhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(h b_dev_infoh]h b_dev_info}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct list_head *pagesh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.balloon_page_list_enqueueasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h3inserts a list of pages into the balloon page list.h]h3inserts a list of pages into the balloon page list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK#hj$ubj)}(hhh](j)}(he``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]j?)}(hjIh]h#struct balloon_dev_info *b_dev_info}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK!hjCubj)}(hhh]j9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK"hj|ubj)}(hhh]j9)}(h6pages to enqueue - allocated using balloon_page_alloc.h]h6pages to enqueue - allocated using balloon_page_alloc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK"hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhK"hj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK$hj$ubj9)}(hyDriver must call this function to properly enqueue balloon pages before definitively removing them from the guest system.h]hyDriver must call this function to properly enqueue balloon pages before definitively removing them from the guest system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK$hj$ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK'hj$ubj9)}(h#number of pages that were enqueued.h]h#number of pages that were enqueued.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK'hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&balloon_page_list_dequeue (C function)c.balloon_page_list_dequeuehNtauh1hhj qhhhNhNubh)}(hhh](h)}(hssize_t balloon_page_list_dequeue (struct balloon_dev_info *b_dev_info, struct list_head *pages, size_t n_req_pages)h]h)}(hrsize_t balloon_page_list_dequeue(struct balloon_dev_info *b_dev_info, struct list_head *pages, size_t n_req_pages)h](h)}(hhh]h)}(hsize_th]hsize_t}(hj, hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj) ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj. modnameN classnameNj\j_)}jb]je)}jXballoon_page_list_dequeuesbc.balloon_page_list_dequeueasbuh1hhj% hhhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK ah"]h$]h&]uh1j1 hjw ubh)}(h b_dev_infoh]h b_dev_info}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjs ubj)}(hstruct list_head *pagesh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h list_headh]h list_head}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jH c.balloon_page_list_dequeueasbuh1hhj ubj)}(h h]h }(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj5 hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hpagesh]hpages}(hjB hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjs ubj)}(hsize_t n_req_pagesh](h)}(hhh]h)}(hsize_th]hsize_t}(hj^ hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj` modnameN classnameNj\j_)}jb]jH c.balloon_page_list_dequeueasbuh1hhjW ubj)}(h h]h }(hj| hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubh)}(h n_req_pagesh]h n_req_pages}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjs ubeh}(h]h ]h"]h$]h&]jj uh1jhj% hhhjM hKhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK>hj ubj)}(hhh]j9)}(h9balloon device descriptor where we will grab a page from.h]h9balloon device descriptor where we will grab a page from.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hK>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK>hj ubj)}(h_``struct list_head *pages`` pointer to the list of pages that would be returned to the caller. h](j)}(h``struct list_head *pages``h]j?)}(hj. h]hstruct list_head *pages}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj, ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK?hj( ubj)}(hhh]j9)}(hBpointer to the list of pages that would be returned to the caller.h]hBpointer to the list of pages that would be returned to the caller.}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjC hK?hjD ubah}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jhjC hK?hj ubj)}(h2``size_t n_req_pages`` number of requested pages. h](j)}(h``size_t n_req_pages``h]j?)}(hjg h]hsize_t n_req_pages}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hje ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK@hja ubj)}(hhh]j9)}(hnumber of requested pages.h]hnumber of requested pages.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj| hK@hj} ubah}(h]h ]h"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]uh1jhj| hK@hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKBhj ubj9)}(hXDriver must call this function to properly de-allocate a previous enlisted balloon pages before definitively releasing it back to the guest system. This function tries to remove **n_req_pages** from the ballooned pages and return them to the caller in the **pages** list.h](hDriver must call this function to properly de-allocate a previous enlisted balloon pages before definitively releasing it back to the guest system. This function tries to remove }(hj hhhNhNubjz)}(h**n_req_pages**h]h n_req_pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh? from the ballooned pages and return them to the caller in the }(hj hhhNhNubjz)}(h **pages**h]hpages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh list.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKBhj ubj9)}(hNote that this function may fail to dequeue some pages even if the balloon isn't empty - since the page list can be temporarily empty due to compaction of isolated pages.h]hNote that this function may fail to dequeue some pages even if the balloon isn’t empty - since the page list can be temporarily empty due to compaction of isolated pages.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKGhj ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKKhj ubj9)}(h6number of pages that were added to the **pages** list.h](h'number of pages that were added to the }(hj hhhNhNubjz)}(h **pages**h]hpages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh list.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn_pmd (C function)c.vmf_insert_pfn_pmdhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hKvm_fault_t vmf_insert_pfn_pmd (struct vm_fault *vmf, pfn_t pfn, bool write)h]h)}(hJvm_fault_t vmf_insert_pfn_pmd(struct vm_fault *vmf, pfn_t pfn, bool write)h](h)}(hhh]h)}(h vm_fault_th]h vm_fault_t}(hjV hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjX modnameN classnameNj\j_)}jb]je)}jXvmf_insert_pfn_pmdsbc.vmf_insert_pfn_pmdasbuh1hhjO hhhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMubj)}(h h]h }(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO hhhjw hMubh)}(hvmf_insert_pfn_pmdh]h)}(hjt h]hvmf_insert_pfn_pmd}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjO hhhjw hMubj)}(h-(struct vm_fault *vmf, pfn_t pfn, bool write)h](j)}(hstruct vm_fault *vmfh](j!)}(hj$h]hstruct}(hj hhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jr c.vmf_insert_pfn_pmdasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2 )}(hj5 h]h*}(hj hhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hj ubh)}(hvmfh]hvmf}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(h pfn_t pfnh](h)}(hhh]h)}(hpfn_th]hpfn_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetj modnameN classnameNj\j_)}jb]jr c.vmf_insert_pfn_pmdasbuh1hhj ubj)}(h h]h }(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hpfnh]hpfn}(hjD hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubj)}(h bool writeh](j)}(hj)h]hbool}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubj)}(h h]h }(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubh)}(hwriteh]hwrite}(hjx hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhj ubeh}(h]h ]h"]h$]h&]jj uh1jhjO hhhjw hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjK hhhjw hMubah}(h]jF ah ](jjeh"]h$]h&]jj)jhuh1hhjw hMhjH hhubj )}(hhh]j9)}(hinsert a pmd size pfnh]hinsert a pmd size pfn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjH hhhjw hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct vm_fault *vmf`` Structure describing the fault ``pfn_t 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](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubj)}(hhh](j)}(h8``struct vm_fault *vmf`` Structure describing the fault h](j)}(h``struct vm_fault *vmf``h]j?)}(hj h]hstruct vm_fault *vmf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubj)}(hhh]j9)}(hStructure describing the faulth]hStructure describing the fault}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``pfn_t pfn`` pfn to insert h](j)}(h ``pfn_t pfn``h]j?)}(hjh]h pfn_t pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj)}(hhh]j9)}(h pfn to inserth]h pfn to insert}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj ubj)}(h*``bool write`` whether it's a write fault h](j)}(h``bool write``h]j?)}(hjUh]h bool write}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjOubj)}(hhh]j9)}(hwhether it's a write faulth]hwhether it’s a write fault}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubj9)}(hvm_fault_t value.h]hvm_fault_t value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn_pud (C function)c.vmf_insert_pfn_pudhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hKvm_fault_t vmf_insert_pfn_pud (struct vm_fault *vmf, pfn_t pfn, bool write)h]h)}(hJvm_fault_t vmf_insert_pfn_pud(struct vm_fault *vmf, pfn_t pfn, bool write)h](h)}(hhh]h)}(h vm_fault_th]h vm_fault_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXvmf_insert_pfn_pudsbc.vmf_insert_pfn_pudasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(hvmf_insert_pfn_pudh]h)}(hjh]hvmf_insert_pfn_pud}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj)}(h-(struct vm_fault *vmf, pfn_t pfn, bool write)h](j)}(hstruct vm_fault *vmfh](j!)}(hj$h]hstruct}(hjNhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjnmodnameN classnameNj\j_)}jb]jc.vmf_insert_pfn_pudasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjJubh)}(hvmfh]hvmf}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubj)}(h pfn_t pfnh](h)}(hhh]h)}(hpfn_th]hpfn_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.vmf_insert_pfn_pudasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubj)}(h bool writeh](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwriteh]hwrite}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjFubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(hinsert a pud size pfnh]hinsert a pud size pfn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jcj4jcj5j6j7uh1hhhhj qhNhNubjp)}(hX**Parameters** ``struct vm_fault *vmf`` Structure describing the fault ``pfn_t 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](j9)}(h**Parameters**h]jz)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjgubj)}(hhh](j)}(h8``struct vm_fault *vmf`` Structure describing the fault h](j)}(h``struct vm_fault *vmf``h]j?)}(hjh]hstruct vm_fault *vmf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj)}(hhh]j9)}(hStructure describing the faulth]hStructure describing the fault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``pfn_t pfn`` pfn to insert h](j)}(h ``pfn_t pfn``h]j?)}(hjh]h pfn_t pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj)}(hhh]j9)}(h pfn to inserth]h pfn to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``bool write`` whether it's a write fault h](j)}(h``bool write``h]j?)}(hjh]h bool write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj)}(hhh]j9)}(hwhether it's a write faulth]hwhether it’s a write fault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h**Description**h]jz)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjgubj9)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjgubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjgubj9)}(hvm_fault_t value.h]hvm_fault_t value.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!vmf_insert_folio_pud (C function)c.vmf_insert_folio_pudhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hWvm_fault_t vmf_insert_folio_pud (struct vm_fault *vmf, struct folio *folio, bool write)h]h)}(hVvm_fault_t vmf_insert_folio_pud(struct vm_fault *vmf, struct folio *folio, bool write)h](h)}(hhh]h)}(h vm_fault_th]h vm_fault_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXvmf_insert_folio_pudsbc.vmf_insert_folio_pudasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM8ubh)}(hvmf_insert_folio_pudh]h)}(hjh]hvmf_insert_folio_pud}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM8ubj)}(h7(struct vm_fault *vmf, struct folio *folio, bool write)h](j)}(hstruct vm_fault *vmfh](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.vmf_insert_folio_pudasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjAhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmfh]hvmf}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct folio *folioh](j!)}(hj$h]hstruct}(hjghhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]h)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.vmf_insert_folio_pudasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjcubh)}(hfolioh]hfolio}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(h bool writeh](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwriteh]hwrite}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM8hjhhubj )}(hhh]j9)}(h-insert a pud size folio mapped by a pud entryh]h-insert a pud size folio mapped by a pud entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhj qhNhNubjp)}(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](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM<hj8ubj)}(hhh](j)}(h8``struct vm_fault *vmf`` Structure describing the fault h](j)}(h``struct vm_fault *vmf``h]j?)}(hj]h]hstruct vm_fault *vmf}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM9hjWubj)}(hhh]j9)}(hStructure describing the faulth]hStructure describing the fault}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhM9hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM9hjTubj)}(h(``struct folio *folio`` folio to insert h](j)}(h``struct folio *folio``h]j?)}(hjh]hstruct folio *folio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM:hjubj)}(hhh]j9)}(hfolio to inserth]hfolio to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjTubj)}(h*``bool write`` whether it's a write fault h](j)}(h``bool write``h]j?)}(hjh]h bool write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM;hjubj)}(hhh]j9)}(hwhether it's a write faulth]hwhether it’s a write fault}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM=hj8ubj9)}(hvm_fault_t value.h]hvm_fault_t value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chM=hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ io_mapping_map_user (C function)c.io_mapping_map_userhNtauh1hhj qhhhNhNubh)}(hhh](h)}(hint io_mapping_map_user (struct io_mapping *iomap, struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size)h]h)}(hint io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj]hKubh)}(hio_mapping_map_userh]h)}(hio_mapping_map_userh]hio_mapping_map_user}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj]hKubj)}(hq(struct io_mapping *iomap, struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size)h](j)}(hstruct io_mapping *iomaph](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h io_mappingh]h io_mapping}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjrsbc.io_mapping_map_userasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hiomaph]hiomap}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hstruct vm_area_struct *vmah](j!)}(hj$h]hstruct}(hjhhhNhNubah}(h]h ]j-ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.io_mapping_map_userasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2 )}(hj5 h]h*}(hjHhhhNhNubah}(h]h ]j> ah"]h$]h&]uh1j1 hjubh)}(hvmah]hvma}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubj)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hsizeh]hsize}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1jhjubeh}(h]h ]h"]h$]h&]jj uh1jhjKhhhj]hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhj]hKubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhj]hKhjDhhubj )}(hhh]j9)}(h!remap an I/O mapping to userspaceh]h!remap an I/O mapping to userspace}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjohhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj qhNhNubjp)}(hX_**Parameters** ``struct io_mapping *iomap`` the source io_mapping ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target user address to start at ``unsigned long pfn`` physical address of kernel memory ``unsigned long size`` size of map area **Note** this is only safe if the mm semaphore is held when called.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjubj)}(hhh](j)}(h3``struct io_mapping *iomap`` the source io_mapping h](j)}(h``struct io_mapping *iomap``h]j?)}(hjh]hstruct io_mapping *iomap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjubj)}(hhh]j9)}(hthe source io_mappingh]hthe source io_mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j?)}(hjh]hstruct vm_area_struct *vma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjubj)}(hhh]j9)}(huser vma to map toh]huser vma to map to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(h7``unsigned long addr`` target user address to start at h](j)}(h``unsigned long addr``h]j?)}(hj%h]hunsigned long addr}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjubj)}(hhh]j9)}(htarget user address to start ath]htarget user address to start at}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hK hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hK hjubj)}(h8``unsigned long pfn`` physical address of kernel memory h](j)}(h``unsigned long pfn``h]j?)}(hj^h]hunsigned long pfn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjXubj)}(hhh]j9)}(h!physical address of kernel memoryh]h!physical address of kernel memory}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshK hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshK hjubj)}(h(``unsigned long size`` size of map area h](j)}(h``unsigned long size``h]j?)}(hjh]hunsigned long size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjubj)}(hhh]j9)}(hsize of map areah]hsize of map area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Note**h]jz)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjubj9)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj qhhhNhNubeh}(h] more-memory-management-functionsah ]h"] more memory management functionsah$]h&]uh1hhhhhhhhKeubeh}(h]memory-management-apisah ]h"]memory management apisah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj1error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j,]j!asnameids}(j jj2j/jNj,jMjJj6j3jjj1j.jEjBjRjRjEejBejVjVjjjj~jjjVjVj_j_j qjqjju nametypes}(j j2jNjMj6jj1jEjRjEejVjjjjVj_j qjuh}(jhj/hhhjjjjjjjjj j j j j,j5jJj5j3jFjj9j.jjBj4jRjUjrjwjYj^jjjVj[jj jjjW#j\#j&j&j'j'j)j)jo,jt,jR1jW1j3j3j6j6j7j7j9j9j7;j<;j3=j8=j>j>jD@jI@j3Bj8BjFjFjKj KjLjLjvNj{Nj>PjCPjfQjkQjBejRjRjSj3Tj8TjVjVjXjXjZjZj4\j9\j_j_jbjbjVjHejjYejvej{ejgjgjjjjjCljHlj ojojqjqjWtj\tjwjwjxjxj{j{ju}jz}j]jbjjj>jCjSjXjjjdjij:j?jjj=jBjjjjjjjjjjjljqjQjVjjj jj$j)jjjjjjjjûjMjRjjj~jjjjjjjjjjjjjj+j0jjj^jcjjjjjjjhjmj7j<jVjjjjjjLjQjjj)j.jjjjjPjUjajfjjjjjjjjjjj<jAjjjjjv j{ j j jV j[ j!j&jj"jMjRjjj)j.jjjj"jjjT jY j"j"j%j%j(j(j(+j-+j,j,j /j%/jH1jM1j 4j4j5j5j`7je7j9j9j:j:j<j<jW?j\?j AjAjDjDjHjHjJjJjPLjULjMjMj,Oj1OjPjPjRjRjNTjSTj_jVjWjWjXjXj(Zj-ZjB\jG\j]j]jqj_j_j_jdjdjVfj[fjij ijkjkjojojj qj*qj/qjsjsjWwj\wj|zjzj}j}jjjjjjjjŋjjjjjjjjj6j;jۛjjjjjj{jjcjhjܪjjjjjj|jjPjUjjj[j`jzjjjjǽj̽j9j>jkjpjjjjjjjj jjjjjjjJjOjjjjjj jjjzjjjjjj>jCjjjWj\jjjjjjj!j&jjjjjAjFjjjjj; j@ j+ j0 j j j=jBjjj[j`jjjjjjjjjjjjjj j!j!jU#jZ#j$j$j0'j5'j6)j;)j +j+j-j-j/j/j2j2j3j3j5j5j7j7j:j :j;j;j.=j3=j>j>j?j!?j)Bj.BjEEjJEj3Gj8GjHjHjJjJj^LjcLj NjNjQjQjTjTjXjXjr\jw\j^j^jajajejejqijvij^mjcmjpjpjtj tjvjvjyjyj}j}jjj܂jj j%j=jBjjj%j*jjj]jbjj jujzjWj\jjjj j/j4jðjȰjsjxjjjjjjjjjjjjjgjljjjhjmjjj-j2jjjIjNj|jjjjjj\jajjjjjOjTjjjEjJjjj;j@j#j(jjjjjjjrjwjjj+j0j jjj j!j&jjjjjxj}j3j8j"j'jjj`jejjjl jq j( j- jg jl jjjjjjjj jjjjjEjJj>!jC!j"j"j6%j;%j&j&j)j )j+j#+j-j-jW/j\/jg3jl3j5j 5j6j6j8j9j ;j;jG>jL>j@j@jCjCjEjEjGjGjJjJjKjKj^MjcMj`OjeOjpQjuQjSjSjVjVjXjXj ^j^j`j`j'cj,cj^fjcfjgjgjjjjjljlj4oj9ojpjpjErjJrjtjtjvjvjxjxj{j{j}j}jjjjƃjjjjjjjnjsjjƓjjjhjmjjjjjjj͟jҟj*j/jjjjjjjjj jjujzjjjwj|j,j1jjjjj_jdjjj/j4jjjjjvj{jjjUjZjjjjjjjjjjjjjSjXjTjYjjj j%jjjjjjjj jjj.j3jjjdjij.j3jvj{jjjjjjjrjwjjj j! jF jK jjjjjBjGu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]j9)}(hhh]h6Hyperlink target "mm-api-gfp-flags" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1juba transformerN include_log] decorationNhhub.