)sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/core-api/mm-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/core-api/mm-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(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}(hhhhhhhNhNubah}(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}(hhhhhhhNhNubah}(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}(hhhhhhhNhNubah}(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.hhKmubah}(h]h ]h"]h$]h&]jj  add_permalinkuh1hsphinx_line_type declaratorhhhhhj hKmubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multilineuh1hh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKlhhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhhhhhj hKmubeh}(h]h ](cmacroeh"]h$]h&]domainj,objtypej-desctypej-noindexuh1hhhhhhNhNubh paragraph)}(h``get_user (x, ptr)``h]hliteral)}(hj9h]hget_user (x, ptr)}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKnhhhhubh block_quote)}(hhh]j6)}(h&Get a simple variable from user space.h]h&Get a simple variable from user space.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK[hjSubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubh 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](j6)}(h**Parameters**h]hstrong)}(hjsh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjmubhdefinition_list)}(hhh](hdefinition_list_item)}(h ``x`` Variable to store result. h](hterm)}(h``x``h]j<)}(hjh]hx}(hhhjhhhNhNubah}(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]j6)}(hVariable to store result.h]hVariable to store result.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK\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}(hhhjhhhNhNubah}(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]j6)}(hSource address, in user space.h]hSource address, in user space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjmubj6)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK_hjmubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKbhjmubj6)}(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.}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKahjmubj6)}(h**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.h](jv)}(h**ptr**h]hptr}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubhL must have pointer-to-simple-variable type, and the result of dereferencing }(hL must have pointer-to-simple-variable type, and the result of dereferencing hj\hhhNhNubjv)}(h**ptr**h]hptr}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh must be assignable to }(h must be assignable to hj\hhhNhNubjv)}(h**x**h]hx}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubh without a cast.}(h without a cast.hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKehjmubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhjmubj6)}(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 }(h=zero on success, or -EFAULT on error. On error, the variable hjhhhNhNubjv)}(h**x**h]hx}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is set to zero.}(h is set to zero.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKihjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(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&]juh1hh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j,j3j,j4uh1hhhhhhNhNubj6)}(h``__get_user (x, ptr)``h]j<)}(hj2h]h__get_user (x, ptr)}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhhhubjR)}(hhh]j6)}(h:Get a simple variable from user space, with less checking.h]h:Get a simple variable from user space, with less checking.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKohjHubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5h]/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}(hhhjhhhNhNubah}(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.hhKphjubj)}(hhh]j6)}(hVariable to store result.h]hVariable to store result.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKphj|ubj)}(h'``ptr`` Source address, in user space. h](j)}(h``ptr``h]j<)}(hjh]hptr}(hhhjhhhNhNubah}(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]j6)}(hSource address, in user space.h]hSource address, in user space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKshj`ubj6)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKshj`ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKvhj`ubj6)}(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.}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKuhj`ubj6)}(h**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.h](jv)}(h**ptr**h]hptr}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubhL must have pointer-to-simple-variable type, and the result of dereferencing }(hL must have pointer-to-simple-variable type, and the result of dereferencing hjEhhhNhNubjv)}(h**ptr**h]hptr}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh must be assignable to }(h must be assignable to hjEhhhNhNubjv)}(h**x**h]hx}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubh without a cast.}(h without a cast.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKyhj`ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhK|hj`ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj`ubj6)}(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 }(h=zero on success, or -EFAULT on error. On error, the variable hjhhhNhNubjv)}(h**x**h]hx}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is set to zero.}(h is set to zero.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(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 juh1hjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]juh1hh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j$j3j$j4uh1hhhhhhNhNubj6)}(h``put_user (x, ptr)``h]j<)}(hj*h]hput_user (x, ptr)}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj(ubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhhhubjR)}(hhh]j6)}(h%Write a simple value into user space.h]h%Write a simple value into user space.}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj)}(hhh](j)}(h#``x`` Value to copy to user space. h](j)}(h``x``h]j<)}(hj}h]hx}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjwubj)}(hhh]j6)}(hValue to copy to user space.h]hValue to copy to user space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubj)}(h,``ptr`` Destination address, in user space. h](j)}(h``ptr``h]j<)}(hjh]hptr}(hhhjhhhNhNubah}(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]j6)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(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.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(hw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.h](jv)}(h**ptr**h]hptr}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh0 must have pointer-to-simple-variable type, and }(h0 must have pointer-to-simple-variable type, and hj=hhhNhNubjv)}(h**x**h]hx}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh3 must be assignable to the result of dereferencing }(h3 must be assignable to the result of dereferencing hj=hhhNhNubjv)}(h**ptr**h]hptr}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubh.}(h.hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubj6)}(h%zero on success, or -EFAULT on error.h]h%zero on success, or -EFAULT on error.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(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&]juh1hh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhhhNhNubj6)}(h``__put_user (x, ptr)``h]j<)}(hjh]h__put_user (x, ptr)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhhhhubjR)}(hhh]j6)}(h9Write a simple value into user space, with less checking.h]h9Write a simple value into user space, with less checking.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjubah}(h]h ]h"]h$]h&]uh1jQhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5h]/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<)}(hjRh]hx}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhjLubj)}(hhh]j6)}(hValue to copy to user space.h]hValue to copy to user space.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKhjIubj)}(h,``ptr`` Destination address, in user space. h](j)}(h``ptr``h]j<)}(hjh]hptr}(hhhjhhhNhNubah}(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]j6)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(hEUser context only. This function may sleep if pagefaults are enabled.h]hEUser context only. This function may sleep if pagefaults are enabled.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(hw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.h](jv)}(h**ptr**h]hptr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh0 must have pointer-to-simple-variable type, and }(h0 must have pointer-to-simple-variable type, and hjhhhNhNubjv)}(h**x**h]hx}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh3 must be assignable to the result of dereferencing }(h3 must be assignable to the result of dereferencing hjhhhNhNubjv)}(h**ptr**h]hptr}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(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.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(h **Return**h]jv)}(hjfh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubj6)}(h%zero on success, or -EFAULT on error.h]h%zero on success, or -EFAULT on error.}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.hhKhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK5ubhdesc_sig_space)}(h h]h }(hhhjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhK5ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK5ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK5ubh)}(h clear_userh]h)}(h clear_userh]h clear_user}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK5ubhdesc_parameterlist)}(h"(void __user *to, unsigned long n)h](hdesc_parameter)}(hvoid __user *toh](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh__user}(hhhj hhhNhNubj)}(h h]h }(hhhj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubhdesc_sig_punctuation)}(h*h]h*}(hhhj> hhhNhNubah}(h]h ]pah"]h$]h&]uh1j< hj ubh)}(htoh]hto}(hhhjM hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned long nh](j)}(hunsignedh]hunsigned}(hhhjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubj)}(h h]h }(hhhjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb ubh)}(hhh]hn}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhK5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK5ubah}(h]jah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK=hjhhubj)}(hhh]j6)}(h%Zero a block of memory in user space.h]h%Zero a block of memory in user space.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK4hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hZ/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}(hhhj 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]j6)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hj$ hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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<)}(hjB h]hunsigned long n}(hhhjD 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.chK6hj< ubj)}(hhh]j6)}(hNumber of bytes to zero.h]hNumber of bytes to zero.}(hj] hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjW hK6hjX ubah}(h]h ]h"]h$]h&]uh1jhj< ubeh}(h]h ]h"]h$]h&]uh1jhjW hK6hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj} h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK8hj ubj6)}(h%Zero a block of memory in user space.h]h%Zero a block of memory in user space.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK8hj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK:hj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chK:hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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 ubj)}(h h]h }(hhhjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj> ubh__user}(hhhj> hhhNhNubj)}(h h]h }(hhhjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj> ubj= )}(hj@ h]h*}(hhhjp hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj> ubh)}(htoh]hto}(hhhj} hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj> ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj: ubj )}(hunsigned long nh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]hn}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj: ubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj hKIubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hKIubah}(h]j ah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKRhj hhubj)}(hhh]j6)}(h9Zero a block of memory in user space, with less checking.h]h9Zero a block of memory in user space, with less checking.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/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 hKIubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hZ/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<)}(hj9 h]hvoid __user *to}(hhhj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKIhj3 ubj)}(hhh]j6)}(h#Destination address, in user space.h]h#Destination address, in user space.}(hjT hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjN hKIhjO ubah}(h]h ]h"]h$]h&]uh1jhj3 ubeh}(h]h ]h"]h$]h&]uh1jhjN hKIhj0 ubj)}(h-``unsigned long n`` Number of bytes to zero. h](j)}(h``unsigned long n``h]j<)}(hjr h]hunsigned long n}(hhhjt hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjp ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKJhjl ubj)}(hhh]j6)}(hNumber of bytes to zero.h]hNumber of bytes to zero.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKJhj ubah}(h]h ]h"]h$]h&]uh1jhjl ubeh}(h]h ]h"]h$]h&]uh1jhj hKJhj0 ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKLhj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKLhj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKOhj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.chKOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM ubj)}(h h]h }(hhhj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj' hM ubh)}(hget_user_pages_fasth]h)}(hget_user_pages_fasth]hget_user_pages_fast}(hhhj: hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6 ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj' hM ubj )}(hP(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)h](j )}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hhhjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(h h]h }(hhhjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(hlongh]hlong}(hhhjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubh)}(hstarth]hstart}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjN ubj )}(h int nr_pagesh](j)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hnr_pagesh]hnr_pages}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjN ubj )}(hunsigned int gup_flagsh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(h gup_flagsh]h gup_flags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjN ubj )}(hstruct page **pagesh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhj/hhhNhNubah}(h]h ]kah"]h$]h&]uh1j-hj)ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hpageh]hpage}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj,reftype identifier reftargetjQmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jj ASTIdentifier)}jej< sbc.get_user_pages_fastasbuh1hhj)ubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)ubh)}(hpagesh]hpages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjN ubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj' hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj' hM ubah}(h]j ah ](jjeh"]h$]h&]juh1hhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hj hhubj)}(hhh]j6)}(hpin user pages in memoryh]hpin user pages in memory}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj' hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hH/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<)}(hj h]hunsigned long start}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjubj)}(hhh]j6)}(hstarting user addressh]hstarting user address}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h3``int nr_pages`` number of pages from start to pin h](j)}(h``int nr_pages``h]j<)}(hjDh]h int nr_pages}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hj>ubj)}(hhh]j6)}(h!number of pages from start to pinh]h!number of pages from start to pin}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhM hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjubj)}(h9``unsigned int gup_flags`` flags modifying pin behaviour h](j)}(h``unsigned int gup_flags``h]j<)}(hj}h]hunsigned int gup_flags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{ubah}(h]h ]h"]h$]h&]uh1jhH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjwubj)}(hhh]j6)}(hflags modifying pin behaviourh]hflags modifying pin behaviour}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM 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}(hhhjhhhNhNubah}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hH/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&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjubj6)}(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().}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhhhhhNhNubhtarget)}(h.. _mm-api-gfp-flags:h]h}(h]h ]h"]h$]h&]refidmm-api-gfp-flagsuh1j-hKhhhhhhubeh}(h]user-space-memory-accessah ]h"]user space memory accessah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMemory Allocation Controlsh]hMemory Allocation Controls}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChhhhhKubh)}(hhh](h)}(h!Page mobility and placement hintsh]h!Page mobility and placement hints}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThNhNubj6)}(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.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhK}hjTubj6)}(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}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubh| (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.}(h| (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(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}(hhhjhhhNhNubah}(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.}(hk is used for slab allocations that specify SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(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}(hhhjhhhNhNubah}(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).}(h 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(h@``__GFP_HARDWALL`` enforces the cpuset memory allocation policy.h](j<)}(h``__GFP_HARDWALL``h]h__GFP_HARDWALL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh. enforces the cpuset memory allocation policy.}(h. enforces the cpuset memory allocation policy.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhr forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.}(hr forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(hB``__GFP_ACCOUNT`` causes the allocation to be accounted to kmemcg.h](j<)}(h``__GFP_ACCOUNT``h]h __GFP_ACCOUNT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubh1 causes the allocation to be accounted to kmemcg.}(h1 causes the allocation to be accounted to kmemcg.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubj6)}(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}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj(ubh4 causes slab allocation to have no object extension.}(h4 causes slab allocation to have no object extension.hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.hhKhjTubeh}(h]!page-mobility-and-placement-hintsah ]h"]!page mobility and placement hintsah$]h&]uh1hhjChhhNhNubh)}(hhh](h)}(h ``PAGE_ALLOC_COSTLY_ORDER``). !costly allocations are too essential to fail so they are implicitly non-failing by default (with some exceptions like OOM victims might fail so the caller still has to check for failures) while costly requests try to be not disruptive and back off even without invoking the OOM killer. The following three modifiers might be used to override some of these implicit rules.h](h|The default allocator behavior depends on the request size. We have a concept of so-called costly allocations (with order > }(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhXw). !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.}(hXw). !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.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj6)}(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}(hhhjhhhNhNubah}(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.}(hX: 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj6)}(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}(hhhjhhhNhNubah}(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 }(hX: 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}(hhhj hhhNhNubah}(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.}(hX. 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubj6)}(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. 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. Using this flag for costly allocations is _highly_ discouraged.h](j<)}(h``__GFP_NOFAIL``h]h __GFP_NOFAIL}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj#ubhX: 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. 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. Using this flag for costly allocations is _highly_ discouraged.}(hX: 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. 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. Using this flag for costly allocations is _highly_ discouraged.hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.hhKhjubeh}(h]reclaim-modifiersah ]h"]reclaim modifiersah$]h&]uh1hhjChhhNhNubh)}(hhh](h)}(hUseful GFP flag combinationsh]hUseful GFP flag combinations}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhNhNubj6)}(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 }(hUseful GFP flag combinations that are commonly used. It is recommended that subsystems start with one of these combinations and then set/clear hjZhhhNhNubj<)}(h ``__GFP_FOO``h]h __GFP_FOO}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubh flags as necessary.}(h flags as necessary.hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM3hjIubj6)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubhX users can not sleep and need the allocation to succeed. A lower watermark is applied to allow access to “atomic reserves”. The current implementation doesn’t support NMI and few other strict non-preemptive contexts (e.g. raw_spin_lock). The same applies to }(hX 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 hj}hhhNhNubj<)}(h``GFP_NOWAIT``h]h GFP_NOWAIT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj}ubh.}(hjyhj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM7hjIubj6)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhA is typical for kernel-internal allocations. The caller requires }(hA is typical for kernel-internal allocations. The caller requires hjhhhNhNubj<)}(h``ZONE_NORMAL``h]h ZONE_NORMAL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh: or a lower zone for direct access but can direct reclaim.}(h: or a lower zone for direct access but can direct reclaim.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM<hjIubj6)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhI is the same as GFP_KERNEL, except the allocation is accounted to kmemcg.}(hI is the same as GFP_KERNEL, except the allocation is accounted to kmemcg.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM?hjIubj6)}(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}(hhhjhhhNhNubah}(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.}(h 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMBhjIubj6)}(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}(hhhjhhhNhNubah}(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.}(hXX 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMFhjIubj6)}(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}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubhXA 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.}(hX? 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.hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMMhjIubj6)}(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}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubhX 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.}(hX 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.hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMShjIubj6)}(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}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubh exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (}(h exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (hjthhhNhNubj<)}(h ``ZONE_DMA``h]hZONE_DMA}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubh 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 }(h 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 hjthhhNhNubj<)}(h ``ZONE_DMA``h]hZONE_DMA}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubh: and treat the lowest zone as a type of emergency reserve.}(h: and treat the lowest zone as a type of emergency reserve.hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMXhjIubj6)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh is similar to }(h is similar to hjhhhNhNubj<)}(h ``GFP_DMA``h]hGFP_DMA}(hhhjhhhNhNubah}(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).}(h 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhM_hjIubj6)}(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}(hhhjhhhNhNubah}(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.}(hX 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&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMdhjIubj6)}(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}(hhhj hhhNhNubah}(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 }(h 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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMihjIubj6)}(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}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubh and }(h and hj7hhhNhNubj<)}(h``GFP_TRANSHUGE_LIGHT``h]hGFP_TRANSHUGE_LIGHT}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubhX; 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.}(hX; 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.hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.hhMnhjIubeh}(h]useful-gfp-flag-combinationsah ]h"]useful gfp flag combinationsah$]h&]uh1hhjChhhNhNubeh}(h](memory-allocation-controlsj:eh ]h"](memory allocation controlsmm-api-gfp-flagseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jvj/sexpect_referenced_by_id}j:j/subh)}(hhh](h)}(hThe Slab Cacheh]hThe Slab Cache}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌksize (C function)c.ksizehNtauh1hhj}hhhNhNubh)}(hhh](h)}(hsize_t ksize (const void *objp)h]h)}(hsize_t ksize(const void *objp)h](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jeksizesbc.ksizeasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hksizeh]h)}(hjh]hksize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(const void *objp)h]j )}(hconst void *objph](j.)}(hconsth]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj1hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hobjph]hobjp}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM(hjhhubj)}(hhh]j6)}(h2Report actual allocation size of associated objecth]h2Report actual allocation size of associated object}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM!hjubj)}(hhh]j)}(hP``const void *objp`` Pointer returned from a prior kmalloc()-family allocation. h](j)}(h``const void *objp``h]j<)}(hjh]hconst void *objp}(hhhjhhhNhNubah}(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]j6)}(h:Pointer returned from a prior kmalloc()-family allocation.h]h:Pointer returned from a prior kmalloc()-family allocation.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM!hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_alloc (C function)c.kmem_cache_allochNtauh1hhj}hhhNhNubh)}(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}(hhhj*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 }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hMubj= )}(hj@ h]h*}(hhhjGhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj&hhhj8hMubh)}(hkmem_cache_alloch]h)}(hkmem_cache_alloch]hkmem_cache_alloc}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj8hMubj )}(h((struct kmem_cache *cachep, gfp_t flags)h](j )}(hstruct kmem_cache *cacheph](j.)}(hj1h]hstruct}(hhhjthhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjpubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejZsbc.kmem_cache_allocasbuh1hhjpubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjpubh)}(hcacheph]hcachep}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.kmem_cache_allocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubeh}(h]h ]h"]h$]h&]jj uh1j hj&hhhj8hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj8hMubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM hjhhubj)}(hhh]j6)}(hAllocate an objecth]hAllocate an object}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jXj3jXj4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjbh]h Parameters}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hT/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<)}(hjh]hstruct kmem_cache *cachep}(hhhjhhhNhNubah}(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.hhMhj{ubj)}(hhh]j6)}(hThe cache to allocate from.h]hThe cache to allocate from.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubj)}(h``gfp_t flags`` See kmalloc(). h](j)}(h``gfp_t flags``h]j<)}(hjh]h gfp_t flags}(hhhjhhhNhNubah}(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]j6)}(hSee kmalloc().h]hSee kmalloc().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj\ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj\ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj\ubj6)}(h6pointer to the new object or ``NULL`` in case of errorh](hpointer to the new object or }(hpointer to the new object or hj2hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh in case of error}(h in case of errorhj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmalloc (C function) c.kmallochNtauh1hhj}hhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMWubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMWubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjqhhhjhMWubh)}(hkmalloch]h)}(hkmalloch]hkmalloc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMWubj )}(h(size_t size, gfp_t flags)h](j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.kmallocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.kmallocasbuh1hhjubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjqhhhjhMWubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMWubah}(h]jhah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjjhhubj)}(hhh]j6)}(hallocate kernel memoryh]hallocate kernel memory}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMVhj`hhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMWubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j{j3j{j4uh1hhhhj}hNhNubjl)}(hXB**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. 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMZhjubj)}(hhh](j)}(h7``size_t size`` how many bytes of memory are required. h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(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.hhMWhjubj)}(hhh]j6)}(h&how many bytes of memory are required.h]h&how many bytes of memory are required.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubj)}(h0``gfp_t flags`` describe the allocation context h](j)}(h``gfp_t flags``h]j<)}(hjh]h gfp_t flags}(hhhjhhhNhNubah}(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.hhMXhjubj)}(hhh]j6)}(hdescribe the allocation contexth]hdescribe the allocation context}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMZhjubj6)}(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.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMZhjubj6)}(hThe 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.h](hUThe allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For }(hUThe allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For hj=hhhNhNubjv)}(h**size**h]hsize}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubhT of power of two bytes, the alignment is also guaranteed to be at least to the size.}(hT of power of two bytes, the alignment is also guaranteed to be at least to the size.hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM]hjubj6)}(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 }(hThe hj`hhhNhNubjv)}(h **flags**h]hflags}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh\ argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at }(h\ argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at hj`hhhNhNubh)}(h;:ref:`Documentation/core-api/mm-api.rst `h]hinline)}(hj~h]h!Documentation/core-api/mm-api.rst}(hhhjhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdoccore-api/mm-api refdomainjreftyperef refexplicitrefwarn reftargetmm-api-gfp-flagsuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMahj`ubeh}(h]h ]h"]h$]h&]uh1j5hjhMahjubj6)}(h~The recommended usage of the **flags** is described at :ref:`Documentation/core-api/memory-allocation.rst `h](hThe recommended usage of the }(hThe recommended usage of the hjhhhNhNubjv)}(h **flags**h]hflags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh is described at }(h is described at hjhhhNhNubh)}(hG:ref:`Documentation/core-api/memory-allocation.rst `h]j)}(hjh]h,Documentation/core-api/memory-allocation.rst}(hhhjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjmemory_allocationuh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMehjubeh}(h]h ]h"]h$]h&]uh1j5hjhMehjubj6)}(h5Below is a brief outline of the most useful GFP flagsh]h5Below is a brief outline of the most useful GFP flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhhjubj)}(hhh](j)}(h6``GFP_KERNEL`` Allocate normal kernel ram. May sleep. h](j)}(h``GFP_KERNEL``h]j<)}(hjh]h GFP_KERNEL}(hhhjhhhNhNubah}(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.hhMkhjubj)}(hhh]j6)}(h&Allocate normal kernel ram. May sleep.h]h&Allocate normal kernel ram. May sleep.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubj)}(h*``GFP_NOWAIT`` Allocation will not sleep. h](j)}(h``GFP_NOWAIT``h]j<)}(hj<h]h GFP_NOWAIT}(hhhj>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.hhMnhj6ubj)}(hhh]j6)}(hAllocation will not sleep.h]hAllocation will not sleep.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQhMnhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMnhjubj)}(hD``GFP_ATOMIC`` Allocation will not sleep. May use emergency pools. h](j)}(h``GFP_ATOMIC``h]j<)}(hjuh]h GFP_ATOMIC}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMqhjoubj)}(hhh]j6)}(h4Allocation will not sleep. May use emergency pools.h]h4Allocation will not sleep. May use emergency pools.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(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 }(h`Also it is possible to set different flags by OR'ing in one or more of the following additional hjhhhNhNubjv)}(h **flags**h]hflags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(h:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMshjubj)}(hhh](j)}(hO``__GFP_ZERO`` Zero the allocated memory before returning. Also see kzalloc(). h](j)}(h``__GFP_ZERO``h]j<)}(hjh]h __GFP_ZERO}(hhhjhhhNhNubah}(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.hhMwhjubj)}(hhh]j6)}(h?Zero the allocated memory before returning. Also see kzalloc().h]h?Zero the allocated memory before returning. Also see kzalloc().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(hN``__GFP_HIGH`` This allocation has high priority and may use emergency pools. h](j)}(h``__GFP_HIGH``h]j<)}(hjh]h __GFP_HIGH}(hhhjhhhNhNubah}(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.hhMzhj ubj)}(hhh]j6)}(h>This allocation has high priority and may use emergency pools.h]h>This allocation has high priority and may use emergency pools.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMzhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMzhjubj)}(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<)}(hjLh]h __GFP_NOFAIL}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM~hjFubj)}(hhh]j6)}(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).}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM}hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM~hjubj)}(hP``__GFP_NORETRY`` If memory is not immediately available, then give up at once. h](j)}(h``__GFP_NORETRY``h]j<)}(hjh]h __GFP_NORETRY}(hhhjhhhNhNubah}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``__GFP_NOWARN`` If allocation fails, don't issue any warnings. h](j)}(h``__GFP_NOWARN``h]j<)}(hjh]h __GFP_NOWARN}(hhhjhhhNhNubah}(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]j6)}(h.If allocation fails, don't issue any warnings.h]h0If allocation fails, don’t issue any warnings.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``__GFP_RETRY_MAYFAIL`` Try really hard to succeed the allocation but fail eventually.h](j)}(h``__GFP_RETRY_MAYFAIL``h]j<)}(hjh]h__GFP_RETRY_MAYFAIL}(hhhjhhhNhNubah}(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]j6)}(h>Try really hard to succeed the allocation but fail eventually.h]h>Try really hard to succeed the allocation but fail eventually.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmalloc_array (C function)c.kmalloc_arrayhNtauh1hhj}hhhNhNubh)}(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}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hMubj= )}(hj@ h]h*}(hhhjohhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjNhhhj`hMubh)}(h kmalloc_arrayh]h)}(h kmalloc_arrayh]h kmalloc_array}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hMubj )}(h$(size_t n, size_t size, gfp_t flags)h](j )}(hsize_t nh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.kmalloc_arrayasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]hn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.kmalloc_arrayasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj2modnameN classnameNjijl)}jo]jc.kmalloc_arrayasbuh1hhj)ubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hflagsh]hflags}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjNhhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjGhhubj)}(hhh]j6)}(hallocate memory for an array.h]hallocate memory for an array.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjubj)}(hhh](j)}(h!``size_t n`` number of elements. h](j)}(h ``size_t n``h]j<)}(hjh]hsize_t n}(hhhjhhhNhNubah}(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]j6)}(hnumber of elements.h]hnumber of elements.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``size_t size`` element size. h](j)}(h``size_t size``h]j<)}(hj h]h size_t size}(hhhj hhhNhNubah}(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]j6)}(h element size.h]h element size.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h=``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j)}(h``gfp_t flags``h]j<)}(hj: h]h gfp_t flags}(hhhj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8 ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj4 ubj)}(hhh]j6)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hjU hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubeh}(h]h ]h"]h$]h&]uh1jhjO hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkrealloc_array (C function)c.krealloc_arrayhNtauh1hhj}hhhNhNubh)}(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}(hhhj 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 }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj hhhj hMubh)}(hkrealloc_arrayh]h)}(hkrealloc_arrayh]hkrealloc_array}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj )}(h5(void *p, size_t new_n, size_t new_size, gfp_t flags)h](j )}(hvoid *ph](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hjI h]hp}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemph jj uh1j hj ubj )}(h size_t new_nh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj"!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$!modnameN classnameNjijl)}jo]jr)}jej sbc.krealloc_arrayasbuh1hhj!ubj)}(h h]h }(hhhjB!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hnew_nh]hnew_n}(hhhjP!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hsize_t new_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjl!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjn!modnameN classnameNjijl)}jo]j>!c.krealloc_arrayasbuh1hhje!ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje!ubh)}(hnew_sizeh]hnew_size}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]j>!c.krealloc_arrayasbuh1hhj!ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hflagsh]hflags}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj hhubj)}(hhh]j6)}(hreallocate memory for an array.h]hreallocate memory for an array.}(hj "hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/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&]j1j,j2j#"j3j#"j4uh1hhhhj}hNhNubjl)}(h**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)h](j6)}(h**Parameters**h]jv)}(hj-"h]h Parameters}(hhhj/"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+"ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj'"ubj)}(hhh](j)}(h6``void *p`` pointer to the memory chunk to reallocate h](j)}(h ``void *p``h]j<)}(hjL"h]hvoid *p}(hhhjN"hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJ"ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjF"ubj)}(hhh]j6)}(h)pointer to the memory chunk to reallocateh]h)pointer to the memory chunk to reallocate}(hjg"hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hja"hMhjb"ubah}(h]h ]h"]h$]h&]uh1jhjF"ubeh}(h]h ]h"]h$]h&]uh1jhja"hMhjC"ubj)}(h1``size_t new_n`` new number of elements to alloc h](j)}(h``size_t new_n``h]j<)}(hj"h]h size_t new_n}(hhhj"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]j6)}(hnew number of elements to alloch]hnew number of elements to alloc}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjC"ubj)}(h=``size_t new_size`` new size of a single member of the array h](j)}(h``size_t new_size``h]j<)}(hj"h]hsize_t new_size}(hhhj"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]j6)}(h(new size of a single member of the arrayh]h(new size of a single member of the array}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjC"ubj)}(h<``gfp_t flags`` the type of memory to allocate (see kmalloc)h](j)}(h``gfp_t flags``h]j<)}(hj"h]h gfp_t flags}(hhhj"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]j6)}(h,the type of memory to allocate (see kmalloc)h]h,the type of memory to allocate (see kmalloc)}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj #ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj #hMhjC"ubeh}(h]h ]h"]h$]h&]uh1jhj'"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkcalloc (C macro) c.kcallochNtauh1hhj}hhhNhNubh)}(hhh](h)}(hkcalloch]h)}(hkcalloch]h)}(hkcalloch]h)}(hjK#h]hkcalloc}(hhhjU#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjM#hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjI#hhhjh#hMubah}(h]jD#ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjF#hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjF#hhhjh#hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhj}hNhNubj6)}(h``kcalloc (n, size, flags)``h]j<)}(hj#h]hkcalloc (n, size, flags)}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj#ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj}hhubjR)}(hhh]j6)}(h8allocate memory for an array. The memory is set to zero.h]h8allocate memory for an array. The memory is set to zero.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubah}(h]h ]h"]h$]h&]uh1jQhj}hhhNhNubjl)}(h**Parameters** ``n`` number of elements. ``size`` element size. ``flags`` the type of memory to allocate (see kmalloc).h](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj#ubj)}(hhh](j)}(h``n`` number of elements. h](j)}(h``n``h]j<)}(hj#h]hn}(hhhj#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]j6)}(hnumber of elements.h]hnumber of elements.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubj)}(h``size`` element size. h](j)}(h``size``h]j<)}(hj$h]hsize}(hhhj$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]j6)}(h element size.h]h element size.}(hj/$hj-$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)$hMhj*$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj)$hMhj#ubj)}(h7``flags`` the type of memory to allocate (see kmalloc).h](j)}(h ``flags``h]j<)}(hjM$h]hflags}(hhhjO$hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjK$ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjG$ubj)}(hhh]j6)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hjh$hjf$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhjc$ubah}(h]h ]h"]h$]h&]uh1jhjG$ubeh}(h]h ]h"]h$]h&]uh1jhjb$hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkzalloc (C function) c.kzallochNtauh1hhj}hhhNhNubh)}(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}(hhhj$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 }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hMubj= )}(hj@ h]h*}(hhhj$hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj$hhhj$hMubh)}(hkzalloch]h)}(hkzalloch]hkzalloc}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj$hMubj )}(h(size_t size, gfp_t flags)h](j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$modnameN classnameNjijl)}jo]jr)}jej$sb c.kzallocasbuh1hhj$ubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hsizeh]hsize}(hhhj"%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj$ubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj>%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;%ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj@%modnameN classnameNjijl)}jo]j% c.kzallocasbuh1hhj7%ubj)}(h h]h }(hhhj\%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7%ubh)}(hflagsh]hflags}(hhhjj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj$ubeh}(h]h ]h"]h$]h&]jj uh1j hj$hhhj$hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj$hMubah}(h]j$ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj$hhubj)}(hhh]j6)}(h+allocate memory. The memory is set to zero.h]h+allocate memory. The memory is set to zero.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/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&]j1j,j2j%j3j%j4uh1hhhhj}hNhNubjl)}(h**Parameters** ``size_t size`` how many bytes of memory are required. ``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j6)}(h**Parameters**h]jv)}(hj%h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMhj%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}(hhhj%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]j6)}(h&how many bytes of memory are required.h]h&how many bytes of memory are required.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(h=``gfp_t flags`` the type of memory to allocate (see kmalloc).h](j)}(h``gfp_t flags``h]j<)}(hj&h]h gfp_t flags}(hhhj&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]j6)}(h-the type of memory to allocate (see kmalloc).h]h-the type of memory to allocate (see kmalloc).}(hj*&hj(&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.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&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmalloc_size_roundup (C function)c.kmalloc_size_rounduphNtauh1hhj}hhhNhNubh)}(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}(hhhjl&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjn&modnameN classnameNjijl)}jo]jr)}jekmalloc_size_roundupsbc.kmalloc_size_roundupasbuh1hhje&hhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM8ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje&hhhj&hM8ubh)}(hkmalloc_size_rounduph]h)}(hj&h]hkmalloc_size_roundup}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhje&hhhj&hM8ubj )}(h (size_t size)h]j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj&modnameN classnameNjijl)}jo]j&c.kmalloc_size_roundupasbuh1hhj&ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hsizeh]hsize}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj&ubah}(h]h ]h"]h$]h&]jj uh1j hje&hhhj&hM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhja&hhhj&hM8ubah}(h]j\&ah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMDhj^&hhubj)}(hhh]j6)}(h0Report allocation bucket size for the given sizeh]h0Report allocation bucket size for the given size}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM7hj'hhubah}(h]h ]h"]h$]h&]uh1jhj^&hhhj&hM8ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j-'j3j-'j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7'h]h Parameters}(hhhj9'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5'ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM;hj1'ubj)}(hhh]j)}(h2``size_t size`` Number of bytes to round up from. h](j)}(h``size_t size``h]j<)}(hjV'h]h size_t size}(hhhjX'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjT'ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM9hjP'ubj)}(hhh]j6)}(h!Number of bytes to round up from.h]h!Number of bytes to round up from.}(hjq'hjo'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjk'hM9hjl'ubah}(h]h ]h"]h$]h&]uh1jhjP'ubeh}(h]h ]h"]h$]h&]uh1jhjk'hM9hjM'ubah}(h]h ]h"]h$]h&]uh1jhj1'ubj6)}(h**Description**h]jv)}(hj'h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM;hj1'ubj6)}(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 }(hVThis returns the number of bytes that would be available in a kmalloc() allocation of hj'hhhNhNubjv)}(h**size**h]hsize}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'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.)}(h 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&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhM;hj1'ubj6)}(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'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.hhMAhj1'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_free (C function)c.kmem_cache_freehNtauh1hhj}hhhNhNubh)}(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}(hhhj'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 }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj(hMubh)}(hkmem_cache_freeh]h)}(hkmem_cache_freeh]hkmem_cache_free}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj(hMubj )}(h(struct kmem_cache *s, void *x)h](j )}(hstruct kmem_cache *sh](j.)}(hj1h]hstruct}(hhhj6(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2(ubj)}(h h]h }(hhhjC(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2(ubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hhhjT(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ(ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjV(modnameN classnameNjijl)}jo]jr)}jej(sbc.kmem_cache_freeasbuh1hhj2(ubj)}(h h]h }(hhhjt(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2(ubj= )}(hj@ h]h*}(hhhj(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj2(ubh)}(hsh]hs}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.(ubj )}(hvoid *xh](j)}(hvoidh]hvoid}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj= )}(hj@ h]h*}(hhhj(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj(ubh)}(hxh]hx}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.(ubeh}(h]h ]h"]h$]h&]jj uh1j hj'hhhj(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj(hMubah}(h]j'ah ](jjeh"]h$]h&]juh1hhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj'hhubj)}(hhh]j6)}(hDeallocate an objecth]hDeallocate an object}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj(hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j)j3j)j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj)h]h Parameters}(hhhj )hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj)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}(hhhj?)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.chMhj7)ubj)}(hhh]j6)}(h"The cache the allocation was from.h]h"The cache the allocation was from.}(hjX)hjV)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjR)hMhjS)ubah}(h]h ]h"]h$]h&]uh1jhj7)ubeh}(h]h ]h"]h$]h&]uh1jhjR)hMhj4)ubj)}(h-``void *x`` The previously allocated object. h](j)}(h ``void *x``h]j<)}(hjv)h]hvoid *x}(hhhjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjt)ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhjp)ubj)}(hhh]j6)}(h The previously allocated object.h]h The previously allocated object.}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhjp)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj4)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h**Description**h]jv)}(hj)h]h Description}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj)ubj6)}(h>Free an object which was previously allocated from this cache.h]h>Free an object which was previously allocated from this cache.}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree (C function)c.kfreehNtauh1hhj}hhhNhNubh)}(hhh](h)}(hvoid kfree (const void *object)h]h)}(hvoid kfree(const void *object)h](j)}(hvoidh]hvoid}(hhhj)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 }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj*hMubh)}(hkfreeh]h)}(hkfreeh]hkfree}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj*hMubj )}(h(const void *object)h]j )}(hconst void *objecth](j.)}(hjh]hconst}(hhhj3*hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj/*ubj)}(h h]h }(hhhj@*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/*ubj)}(hvoidh]hvoid}(hhhjN*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/*ubj)}(h h]h }(hhhj\*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/*ubj= )}(hj@ h]h*}(hhhjj*hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj/*ubh)}(hobjecth]hobject}(hhhjw*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+*ubah}(h]h ]h"]h$]h&]jj uh1j hj)hhhj*hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj*hMubah}(h]j)ah ](jjeh"]h$]h&]juh1hhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj)hhubj)}(hhh]j6)}(h free previously allocated memoryh]h free previously allocated memory}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj*hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j*j3j*j4uh1hhhhj}hNhNubjl)}(h**Parameters** ``const void *object`` pointer returned by kmalloc() or kmem_cache_alloc() **Description** If **object** is NULL, no operation is performed.h](j6)}(h**Parameters**h]jv)}(hj*h]h Parameters}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hI/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}(hhhj*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]j6)}(h3pointer returned by kmalloc() or kmem_cache_alloc()h]h3pointer returned by kmalloc() or kmem_cache_alloc()}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj +hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj*ubj6)}(h1If **object** is NULL, no operation is performed.h](hIf }(hIf hj4+hhhNhNubjv)}(h **object**h]hobject}(hhhj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4+ubh$ is NULL, no operation is performed.}(h$ is NULL, no operation is performed.hj4+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'kmem_cache_create_usercopy (C function)c.kmem_cache_create_usercopyhNtauh1hhj}hhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjw+hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjs+hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs+hhhj+hKubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]jr)}jekmem_cache_create_usercopysbc.kmem_cache_create_usercopyasbuh1hhjs+hhhj+hKubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs+hhhj+hKubj= )}(hj@ h]h*}(hhhj+hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjs+hhhj+hKubh)}(hkmem_cache_create_usercopyh]h)}(hj+h]hkmem_cache_create_usercopy}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjs+hhhj+hKubj )}(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.)}(hjh]hconst}(hhhj+hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj+ubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hcharh]hchar}(hhhj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj= )}(hj@ h]h*}(hhhj(,hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj+ubh)}(hnameh]hname}(hhhj5,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hhhjN,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ,ubj)}(h h]h }(hhhj\,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ,ubj)}(hinth]hint}(hhhjj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ,ubj)}(h h]h }(hhhjx,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ,ubh)}(hsizeh]hsize}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hunsigned int alignh](j)}(hunsignedh]hunsigned}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hinth]hint}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(halignh]halign}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hslab_flags_t flagsh](h)}(hhh]h)}(h slab_flags_th]h slab_flags_t}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj,modnameN classnameNjijl)}jo]j+c.kmem_cache_create_usercopyasbuh1hhj,ubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hflagsh]hflags}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hunsigned int useroffseth](j)}(hunsignedh]hunsigned}(hhhj8-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-ubj)}(h h]h }(hhhjF-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-ubj)}(hinth]hint}(hhhjT-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-ubj)}(h h]h }(hhhjb-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-ubh)}(h useroffseth]h useroffset}(hhhjp-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hunsigned int usersizeh](j)}(hunsignedh]hunsigned}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hinth]hint}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(husersizeh]husersize}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubj )}(hvoid (*ctor)(void*)h](j)}(hvoidh]hvoid}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj= )}(h(h]h(}(hhhj-hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubj= )}(hj@ h]h*}(hhhj.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubh)}(hctorh]hctor}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubj= )}(h)h]h)}(hhhj.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubj= )}(hj-h]h(}(hhhj-.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubj)}(hvoidh]hvoid}(hhhj:.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj= )}(hj@ h]h*}(hhhjH.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubj= )}(hj!.h]h)}(hhhjU.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubeh}(h]h ]h"]h$]h&]jj uh1j hjs+hhhj+hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjo+hhhj+hKubah}(h]jj+ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjl+hhubj)}(hhh]j6)}(h>Create a cache with a region suitable for copying to userspaceh]h>Create a cache with a region suitable for copying to userspace}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj|.hhubah}(h]h ]h"]h$]h&]uh1jhjl+hhhj+hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j.j3j.j4uh1hhhhj}hNhNubjl)}(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. **Description** Cannot be called within a interrupt, but can be interrupted. The **ctor** is run when new pages are allocated by the cache. The flags are ``SLAB_POISON`` - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory. ``SLAB_RED_ZONE`` - Insert `Red` zones around the allocated memory to check for buffer overruns. ``SLAB_HWCACHE_ALIGN`` - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem. **Return** a pointer to the cache on success, NULL on failure.h](j6)}(h**Parameters**h]jv)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj.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<)}(hj.h]hconst char *name}(hhhj.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:43: ./mm/slab_common.chKhj.ubj)}(hhh]j6)}(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.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj.ubj)}(hG``unsigned int size`` The size of objects to be created in this cache. h](j)}(h``unsigned int size``h]j<)}(hj.h]hunsigned int size}(hhhj.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:43: ./mm/slab_common.chKhj.ubj)}(hhh]j6)}(h0The size of objects to be created in this cache.h]h0The size of objects to be created in this cache.}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj.ubj)}(h?``unsigned int align`` The required alignment for the objects. h](j)}(h``unsigned int align``h]j<)}(hj2/h]hunsigned int align}(hhhj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj,/ubj)}(hhh]j6)}(h'The required alignment for the objects.h]h'The required alignment for the objects.}(hjM/hjK/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjG/hKhjH/ubah}(h]h ]h"]h$]h&]uh1jhj,/ubeh}(h]h ]h"]h$]h&]uh1jhjG/hKhj.ubj)}(h"``slab_flags_t flags`` SLAB flags h](j)}(h``slab_flags_t flags``h]j<)}(hjk/h]hslab_flags_t flags}(hhhjm/hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hji/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhje/ubj)}(hhh]j6)}(h SLAB flagsh]h SLAB flags}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhje/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj.ubj)}(h3``unsigned int useroffset`` Usercopy region offset h](j)}(h``unsigned int useroffset``h]j<)}(hj/h]hunsigned int useroffset}(hhhj/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:43: ./mm/slab_common.chKhj/ubj)}(hhh]j6)}(hUsercopy region offseth]hUsercopy region offset}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj.ubj)}(h/``unsigned int usersize`` Usercopy region size h](j)}(h``unsigned int usersize``h]j<)}(hj/h]hunsigned int usersize}(hhhj/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:43: ./mm/slab_common.chKhj/ubj)}(hhh]j6)}(hUsercopy region sizeh]hUsercopy region size}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj.ubj)}(h8``void (*ctor)(void *)`` A constructor for the objects. h](j)}(h``void (*ctor)(void *)``h]j<)}(hj0h]hvoid (*ctor)(void *)}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj0ubj)}(hhh]j6)}(hA constructor for the objects.h]hA constructor for the objects.}(hj10hj/0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+0hKhj,0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj+0hKhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj6)}(h**Description**h]jv)}(hjQ0h]h Description}(hhhjS0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjO0ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj.ubj6)}(h{Cannot be called within a interrupt, but can be interrupted. The **ctor** is run when new pages are allocated by the cache.h](hACannot be called within a interrupt, but can be interrupted. The }(hACannot be called within a interrupt, but can be interrupted. The hjg0hhhNhNubjv)}(h**ctor**h]hctor}(hhhjp0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjg0ubh2 is run when new pages are allocated by the cache.}(h2 is run when new pages are allocated by the cache.hjg0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chKhj.ubj6)}(h The flags areh]h The flags are}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj.ubj6)}(hs``SLAB_POISON`` - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.h](j<)}(h``SLAB_POISON``h]h SLAB_POISON}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubhd - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.}(hd - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj.ubj6)}(h```SLAB_RED_ZONE`` - Insert `Red` zones around the allocated memory to check for buffer overruns.h](j<)}(h``SLAB_RED_ZONE``h]h SLAB_RED_ZONE}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubh - Insert }(h - Insert hj0hhhNhNubhtitle_reference)}(h`Red`h]hRed}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj0ubh@ zones around the allocated memory to check for buffer overruns.}(h@ zones around the allocated memory to check for buffer overruns.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj.ubj6)}(h``SLAB_HWCACHE_ALIGN`` - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem.h](j<)}(h``SLAB_HWCACHE_ALIGN``h]hSLAB_HWCACHE_ALIGN}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubh - Align the objects in this cache to a hardware cacheline. This can be beneficial if you’re counting cycles as closely as davem.}(h - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM hj.ubj6)}(h **Return**h]jv)}(hj 1h]hReturn}(hhhj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj.ubj6)}(h3a pointer to the cache on success, NULL on failure.h]h3a pointer to the cache on success, NULL on failure.}(hj"1hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_create (C function)c.kmem_cache_createhNtauh1hhj}hhhNhNubh)}(hhh](h)}(hstruct kmem_cache * kmem_cache_create (const char *name, unsigned int size, unsigned int align, slab_flags_t flags, void (*ctor)(void *))h]h)}(hstruct kmem_cache *kmem_cache_create(const char *name, unsigned int size, unsigned int align, slab_flags_t flags, void (*ctor)(void*))h](j.)}(hj1h]hstruct}(hhhjO1hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjK1hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMkubj)}(h h]h }(hhhj]1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1hhhj\1hMkubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hhhjn1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjp1modnameN classnameNjijl)}jo]jr)}jekmem_cache_createsbc.kmem_cache_createasbuh1hhjK1hhhj\1hMkubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1hhhj\1hMkubj= )}(hj@ h]h*}(hhhj1hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjK1hhhj\1hMkubh)}(hkmem_cache_createh]h)}(hj1h]hkmem_cache_create}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjK1hhhj\1hMkubj )}(hb(const char *name, unsigned int size, unsigned int align, slab_flags_t flags, void (*ctor)(void*))h](j )}(hconst char *nameh](j.)}(hjh]hconst}(hhhj1hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hcharh]hchar}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj= )}(hj@ h]h*}(hhhj2hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj1ubh)}(hnameh]hname}(hhhj 2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hhhj&2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"2ubj)}(h h]h }(hhhj42hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"2ubj)}(hinth]hint}(hhhjB2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"2ubj)}(h h]h }(hhhjP2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"2ubh)}(hsizeh]hsize}(hhhj^2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(hunsigned int alignh](j)}(hunsignedh]hunsigned}(hhhjw2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs2ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs2ubj)}(hinth]hint}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs2ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs2ubh)}(halignh]halign}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(hslab_flags_t flagsh](h)}(hhh]h)}(h slab_flags_th]h slab_flags_t}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj2modnameN classnameNjijl)}jo]j1c.kmem_cache_createasbuh1hhj2ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hflagsh]hflags}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(hvoid (*ctor)(void*)h](j)}(hvoidh]hvoid}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubj= )}(hj-h]h(}(hhhj,3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubj= )}(hj@ h]h*}(hhhj93hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubh)}(hctorh]hctor}(hhhjF3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 3ubj= )}(hj!.h]h)}(hhhjT3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubj= )}(hj-h]h(}(hhhja3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubj)}(hvoidh]hvoid}(hhhjn3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubj= )}(hj@ h]h*}(hhhj|3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubj= )}(hj!.h]h)}(hhhj3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj 3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubeh}(h]h ]h"]h$]h&]jj uh1j hjK1hhhj\1hMkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjG1hhhj\1hMkubah}(h]jB1ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjD1hhubj)}(hhh]j6)}(hCreate a cache.h]hCreate a cache.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMjhj3hhubah}(h]h ]h"]h$]h&]uh1jhjD1hhhj\1hMkubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhj}hNhNubjl)}(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 ``void (*ctor)(void *)`` A constructor for the objects. **Description** Cannot be called within a interrupt, but can be interrupted. The **ctor** is run when new pages are allocated by the cache. The flags are ``SLAB_POISON`` - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory. ``SLAB_RED_ZONE`` - Insert `Red` zones around the allocated memory to check for buffer overruns. ``SLAB_HWCACHE_ALIGN`` - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem. **Return** a pointer to the cache on success, NULL on failure.h](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMnhj3ubj)}(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<)}(hj3h]hconst char *name}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMkhj3ubj)}(hhh]j6)}(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.}(hj4hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 4hMkhj 4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj 4hMkhj3ubj)}(hG``unsigned int size`` The size of objects to be created in this cache. h](j)}(h``unsigned int size``h]j<)}(hj-4h]hunsigned int size}(hhhj/4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj+4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMlhj'4ubj)}(hhh]j6)}(h0The size of objects to be created in this cache.h]h0The size of objects to be created in this cache.}(hjH4hjF4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjB4hMlhjC4ubah}(h]h ]h"]h$]h&]uh1jhj'4ubeh}(h]h ]h"]h$]h&]uh1jhjB4hMlhj3ubj)}(h?``unsigned int align`` The required alignment for the objects. h](j)}(h``unsigned int align``h]j<)}(hjf4h]hunsigned int align}(hhhjh4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjd4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMmhj`4ubj)}(hhh]j6)}(h'The required alignment for the objects.h]h'The required alignment for the objects.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{4hMmhj|4ubah}(h]h ]h"]h$]h&]uh1jhj`4ubeh}(h]h ]h"]h$]h&]uh1jhj{4hMmhj3ubj)}(h"``slab_flags_t flags`` SLAB flags h](j)}(h``slab_flags_t flags``h]j<)}(hj4h]hslab_flags_t flags}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMnhj4ubj)}(hhh]j6)}(h SLAB flagsh]h SLAB flags}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMnhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMnhj3ubj)}(h8``void (*ctor)(void *)`` A constructor for the objects. h](j)}(h``void (*ctor)(void *)``h]j<)}(hj4h]hvoid (*ctor)(void *)}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMohj4ubj)}(hhh]j6)}(hA constructor for the objects.h]hA constructor for the objects.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hMohj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMohj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hj5h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMqhj3ubj6)}(h{Cannot be called within a interrupt, but can be interrupted. The **ctor** is run when new pages are allocated by the cache.h](hACannot be called within a interrupt, but can be interrupted. The }(hACannot be called within a interrupt, but can be interrupted. The hj)5hhhNhNubjv)}(h**ctor**h]hctor}(hhhj25hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)5ubh2 is run when new pages are allocated by the cache.}(h2 is run when new pages are allocated by the cache.hj)5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMqhj3ubj6)}(h The flags areh]h The flags are}(hjN5hjL5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMthj3ubj6)}(hs``SLAB_POISON`` - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.h](j<)}(h``SLAB_POISON``h]h SLAB_POISON}(hhhj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj[5ubhd - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.}(hd - Poison the slab with a known test pattern (a5a5a5a5) to catch references to uninitialised memory.hj[5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMvhj3ubj6)}(h```SLAB_RED_ZONE`` - Insert `Red` zones around the allocated memory to check for buffer overruns.h](j<)}(h``SLAB_RED_ZONE``h]h SLAB_RED_ZONE}(hhhj}5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjy5ubh - Insert }(h - Insert hjy5hhhNhNubj0)}(h`Red`h]hRed}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjy5ubh@ zones around the allocated memory to check for buffer overruns.}(h@ zones around the allocated memory to check for buffer overruns.hjy5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMyhj3ubj6)}(h``SLAB_HWCACHE_ALIGN`` - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem.h](j<)}(h``SLAB_HWCACHE_ALIGN``h]hSLAB_HWCACHE_ALIGN}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubh - Align the objects in this cache to a hardware cacheline. This can be beneficial if you’re counting cycles as closely as davem.}(h - Align the objects in this cache to a hardware cacheline. This can be beneficial if you're counting cycles as closely as davem.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM|hj3ubj6)}(h **Return**h]jv)}(hj5h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj3ubj6)}(h3a pointer to the cache on success, NULL on failure.h]h3a pointer to the cache on success, NULL on failure.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_cache_shrink (C function)c.kmem_cache_shrinkhNtauh1hhj}hhhNhNubh)}(hhh](h)}(h1int kmem_cache_shrink (struct kmem_cache *cachep)h]h)}(h0int kmem_cache_shrink(struct kmem_cache *cachep)h](j)}(hinth]hint}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6hhhj6hMubh)}(hkmem_cache_shrinkh]h)}(hkmem_cache_shrinkh]hkmem_cache_shrink}(hhhj06hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj 6hhhj6hMubj )}(h(struct kmem_cache *cachep)h]j )}(hstruct kmem_cache *cacheph](j.)}(hj1h]hstruct}(hhhjL6hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjH6ubj)}(h h]h }(hhhjY6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH6ubh)}(hhh]h)}(h kmem_cacheh]h kmem_cache}(hhhjj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjl6modnameN classnameNjijl)}jo]jr)}jej26sbc.kmem_cache_shrinkasbuh1hhjH6ubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH6ubj= )}(hj@ h]h*}(hhhj6hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjH6ubh)}(hcacheph]hcachep }(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjH6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjD6ubah}(h]h ]h"]h$]h&]jj uh1j hj 6hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6hhubj)}(hhh]j6)}(hShrink a cache.h]hShrink a cache.}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j6j3j6j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj6h]h Parameters}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6ubj)}(hhh]j)}(h3``struct kmem_cache *cachep`` The cache to shrink. h](j)}(h``struct kmem_cache *cachep``h]j<)}(hj7h]hstruct kmem_cache *cachep}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj 7ubj)}(hhh]j6)}(hThe cache to shrink.h]hThe cache to shrink.}(hj,7hj*7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&7hMhj'7ubah}(h]h ]h"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]uh1jhj&7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubj6)}(h**Description**h]jv)}(hjL7h]h Description}(hhhjN7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJ7ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6ubj6)}(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.}(hjd7hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6ubj6)}(h **Return**h]jv)}(hjs7h]hReturn}(hhhju7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjq7ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6ubj6)}(h4``0`` if all slabs were released, non-zero otherwiseh](j<)}(h``0``h]h0}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubh/ if all slabs were released, non-zero otherwise}(h/ if all slabs were released, non-zero otherwisehj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmem_dump_obj (C function)c.kmem_dump_objhNtauh1hhj}hhhNhNubh)}(hhh](h)}(h!bool kmem_dump_obj (void *object)h]h)}(h bool kmem_dump_obj(void *object)h](j)}(hboolh]hbool}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hMubh)}(h kmem_dump_objh]h)}(h kmem_dump_objh]h kmem_dump_obj}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj7hMubj )}(h(void *object)h]j )}(h void *objecth](j)}(hvoidh]hvoid}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj= )}(hj@ h]h*}(hhhj 8hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj8ubh)}(hobjecth]hobject}(hhhj-8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj7ubah}(h]h ]h"]h$]h&]jj uh1j hj7hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hMubah}(h]j7ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM(hj7hhubj)}(hhh]j6)}(h+Print available slab provenance informationh]h+Print available slab provenance information}(hjZ8hjX8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjU8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jp8j3jp8j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjz8h]h Parameters}(hhhj|8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjx8ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjt8ubj)}(hhh]j)}(hG``void *object`` slab object for which to find provenance information. h](j)}(h``void *object``h]j<)}(hj8h]h void *object}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj8ubj)}(hhh]j6)}(h5slab object for which to find provenance information.h]h5slab object for which to find provenance information.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjt8ubj6)}(h**Description**h]jv)}(hj8h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjt8ubj6)}(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.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjt8ubj6)}(h **Return**h]jv)}(hj8h]hReturn}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM$hjt8ubj6)}(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}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubhZ if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either }(hZ if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either hj9hhhNhNubj<)}(h``true``h]htrue}(hhhj(9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubh or }(h or hj9hhhNhNubj<)}(h ``false``h]hfalse}(hhhj;9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubh3 if the pointer is to an already-freed object, and }(h3 if the pointer is to an already-freed object, and hj9hhhNhNubj<)}(h ``false``h]hfalse}(hhhjN9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubh otherwise.}(h otherwise.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chM$hjt8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree_sensitive (C function)c.kfree_sensitivehNtauh1hhj}hhhNhNubh)}(hhh](h)}(h$void kfree_sensitive (const void *p)h]h)}(h#void kfree_sensitive(const void *p)h](j)}(hvoidh]hvoid}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMubh)}(hkfree_sensitiveh]h)}(hkfree_sensitiveh]hkfree_sensitive}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhj9hMubj )}(h(const void *p)h]j )}(h const void *ph](j.)}(hjh]hconst}(hhhj9hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj9ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hvoidh]hvoid}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj= )}(hj@ h]h*}(hhhj9hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj9ubh)}(hjI h]hp}(hhhj :hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj9ubah}(h]h ]h"]h$]h&]jj uh1j hj9hhhj9hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj9hMubah}(h]j{9ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj}9hhubj)}(hhh]j6)}(h4Clear sensitive information in memory before freeingh]h4Clear sensitive information in memory before freeing}(hj5:hj3:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhj0:hhubah}(h]h ]h"]h$]h&]uh1jhj}9hhhj9hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jK:j3jK:j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjU:h]h Parameters}(hhhjW:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjS:ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjO:ubj)}(hhh]j)}(h+``const void *p`` object to free memory of h](j)}(h``const void *p``h]j<)}(hjt:h]h const void *p}(hhhjv:hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjr:ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjn:ubj)}(hhh]j6)}(hobject to free memory ofh]hobject to free memory of}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjn:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjk:ubah}(h]h ]h"]h$]h&]uh1jhjO:ubj6)}(h**Description**h]jv)}(hj:h]h Description}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjO:ubj6)}(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 }(hThe memory of the object hj:hhhNhNubjv)}(h**p**h]hp}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh& points to is zeroed before freed. If }(h& points to is zeroed before freed. If hj:hhhNhNubjv)}(h**p**h]hp}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubh is }(h is hj:hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj:ubh!, kfree_sensitive() does nothing.}(h!, kfree_sensitive() does nothing.hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjO:ubj6)}(h**Note**h]jv)}(hj;h]hNote}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjO:ubj6)}(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.}(hj(;hj&;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.chMhjO:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkfree_const (C function) c.kfree_consthNtauh1hhj}hhhNhNubh)}(hhh](h)}(h void kfree_const (const void *x)h]h)}(hvoid kfree_const(const void *x)h](j)}(hvoidh]hvoid}(hhhjU;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ;hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK"ubj)}(h h]h }(hhhjd;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ;hhhjc;hK"ubh)}(h kfree_consth]h)}(h kfree_consth]h kfree_const}(hhhjv;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQ;hhhjc;hK"ubj )}(h(const void *x)h]j )}(h const void *xh](j.)}(hjh]hconst}(hhhj;hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj;ubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hvoidh]hvoid}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj= )}(hj@ h]h*}(hhhj;hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj;ubh)}(hj(h]hx}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubah}(h]h ]h"]h$]h&]jj uh1j hjQ;hhhjc;hK"ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjM;hhhjc;hK"ubah}(h]jH;ah ](jjeh"]h$]h&]juh1hhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK&hjJ;hhubj)}(hhh]j6)}(hconditionally free memoryh]hconditionally free memory}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK!hj;hhubah}(h]h ]h"]h$]h&]uh1jhjJ;hhhjc;hK"ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j<j3j<j4uh1hhhhj}hNhNubjl)}(h**Parameters** ``const void *x`` pointer to the memory **Description** Function calls kfree only if **x** is not in .rodata section.h](j6)}(h**Parameters**h]jv)}(hj"<h]h Parameters}(hhhj$<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj <ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK%hj<ubj)}(hhh]j)}(h(``const void *x`` pointer to the memory h](j)}(h``const void *x``h]j<)}(hjA<h]h const void *x}(hhhjC<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:46: ./mm/util.chK"hj;<ubj)}(hhh]j6)}(hpointer to the memoryh]hpointer to the memory}(hj\<hjZ<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjV<hK"hjW<ubah}(h]h ]h"]h$]h&]uh1jhj;<ubeh}(h]h ]h"]h$]h&]uh1jhjV<hK"hj8<ubah}(h]h ]h"]h$]h&]uh1jhj<ubj6)}(h**Description**h]jv)}(hj|<h]h Description}(hhhj~<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjz<ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK$hj<ubj6)}(h=Function calls kfree only if **x** is not in .rodata section.h](hFunction calls kfree only if }(hFunction calls kfree only if hj<hhhNhNubjv)}(h**x**h]hx}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh is not in .rodata section.}(h is not in .rodata section.hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chK$hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkvmalloc_node (C function)c.kvmalloc_nodehNtauh1hhj}hhhNhNubh)}(hhh](h)}(h9void * kvmalloc_node (size_t size, gfp_t flags, int node)h]h)}(h7void *kvmalloc_node(size_t size, gfp_t flags, int node)h](j)}(hvoidh]hvoid}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMVubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hMVubj= )}(hj@ h]h*}(hhhj<hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj<hhhj<hMVubh)}(h kvmalloc_nodeh]h)}(h kvmalloc_nodeh]h kvmalloc_node}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhj<hMVubj )}(h$(size_t size, gfp_t flags, int node)h](j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj"=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$=modnameN classnameNjijl)}jo]jr)}jej=sbc.kvmalloc_nodeasbuh1hhj=ubj)}(h h]h }(hhhjB=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hsizeh]hsize}(hhhjP=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(h gfp_t flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjl=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjn=modnameN classnameNjijl)}jo]j>=c.kvmalloc_nodeasbuh1hhje=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje=ubh)}(hflagsh]hflags}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(hint nodeh](j)}(hinth]hint}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hnodeh]hnode}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubeh}(h]h ]h"]h$]h&]jj uh1j hj<hhhj<hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj<hMVubah}(h]j<ah ](jjeh"]h$]h&]juh1hhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMdhj<hhubj)}(hhh]j6)}(huattempt to allocate physically contiguous memory, but upon failure, fall back to non-contiguous (vmalloc) allocation.h]huattempt to allocate physically contiguous memory, but upon failure, fall back to non-contiguous (vmalloc) allocation.}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMUhj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hMVubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j>j3j>j4uh1hhhhj}hNhNubjl)}(hX**Parameters** ``size_t size`` size of the request. ``gfp_t flags`` gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL. ``int node`` numa node to allocate from **Description** Uses kmalloc to get the memory but if the allocation fails then falls back to the vmalloc allocator. Use kvfree for freeing the memory. GFP_NOWAIT and GFP_ATOMIC are not supported, neither is the __GFP_NORETRY modifier. __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is preferable to the vmalloc fallback, due to visible performance drawbacks. **Return** pointer to the allocated memory of ``NULL`` in case of failureh](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMYhj>ubj)}(hhh](j)}(h%``size_t size`` size of the request. h](j)}(h``size_t size``h]j<)}(hj9>h]h size_t size}(hhhj;>hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7>ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMWhj3>ubj)}(hhh]j6)}(hsize of the request.h]hsize of the request.}(hjT>hjR>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjN>hMWhjO>ubah}(h]h ]h"]h$]h&]uh1jhj3>ubeh}(h]h ]h"]h$]h&]uh1jhjN>hMWhj0>ubj)}(h]``gfp_t flags`` gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL. h](j)}(h``gfp_t flags``h]j<)}(hjr>h]h gfp_t flags}(hhhjt>hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjp>ubah}(h]h ]h"]h$]h&]uh1jhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMXhjl>ubj)}(hhh]j6)}(hLgfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.h]hLgfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMXhj>ubah}(h]h ]h"]h$]h&]uh1jhjl>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMXhj0>ubj)}(h(``int node`` numa node to allocate from h](j)}(h ``int node``h]j<)}(hj>h]hint node}(hhhj>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:46: ./mm/util.chMYhj>ubj)}(hhh]j6)}(hnuma node to allocate fromh]hnuma node to allocate from}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMYhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMYhj0>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubj6)}(h**Description**h]jv)}(hj>h]h Description}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chM[hj>ubj6)}(hUses kmalloc to get the memory but if the allocation fails then falls back to the vmalloc allocator. Use kvfree for freeing the memory.h]hUses kmalloc to get the memory but if the allocation fails then falls back to the vmalloc allocator. Use kvfree for freeing the memory.}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chM[hj>ubj6)}(hGFP_NOWAIT and GFP_ATOMIC are not supported, neither is the __GFP_NORETRY modifier. __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is preferable to the vmalloc fallback, due to visible performance drawbacks.h]hGFP_NOWAIT and GFP_ATOMIC are not supported, neither is the __GFP_NORETRY modifier. __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is preferable to the vmalloc fallback, due to visible performance drawbacks.}(hj ?hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chM^hj>ubj6)}(h **Return**h]jv)}(hj?h]hReturn}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMbhj>ubj6)}(h>pointer to the allocated memory of ``NULL`` in case of failureh](h#pointer to the allocated memory of }(h#pointer to the allocated memory of hj2?hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj;?hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2?ubh in case of failure}(h in case of failurehj2?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMbhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkvfree (C function)c.kvfreehNtauh1hhj}hhhNhNubh)}(hhh](h)}(hvoid kvfree (const void *addr)h]h)}(hvoid kvfree(const void *addr)h](j)}(hvoidh]hvoid}(hhhju?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq?hhhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq?hhhj?hMubh)}(hkvfreeh]h)}(hkvfreeh]hkvfree}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjq?hhhj?hMubj )}(h(const void *addr)h]j )}(hconst void *addrh](j.)}(hjh]hconst}(hhhj?hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj?ubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hvoidh]hvoid}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj= )}(hj@ h]h*}(hhhj?hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj?ubh)}(haddrh]haddr}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj?ubah}(h]h ]h"]h$]h&]jj uh1j hjq?hhhj?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjm?hhhj?hMubah}(h]jh?ah ](jjeh"]h$]h&]juh1hhI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhjj?hhubj)}(hhh]j6)}(h Free memory.h]h Free memory.}(hj#@hj!@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjj?hhhj?hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j9@j3j9@j4uh1hhhhj}hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjC@h]h Parameters}(hhhjE@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjA@ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj=@ubj)}(hhh]j)}(h2``const void *addr`` Pointer to allocated memory. h](j)}(h``const void *addr``h]j<)}(hjb@h]hconst void *addr}(hhhjd@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:46: ./mm/util.chMhj\@ubj)}(hhh]j6)}(hPointer to allocated memory.h]hPointer to allocated memory.}(hj}@hj{@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjw@hMhjx@ubah}(h]h ]h"]h$]h&]uh1jhj\@ubeh}(h]h ]h"]h$]h&]uh1jhjw@hMhjY@ubah}(h]h ]h"]h$]h&]uh1jhj=@ubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj=@ubj6)}(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@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj=@ubj6)}(h **Context**h]jv)}(hj@h]hContext}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj=@ubj6)}(h5Either preemptible task context or not-NMI interrupt.h]h5Either preemptible task context or not-NMI interrupt.}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/util.chMhj=@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj}hhhNhNubeh}(h]the-slab-cacheah ]h"]the slab cacheah$]h&]uh1hhhhhhhhK#ubh)}(hhh](h)}(hVirtually Contiguous Mappingsh]hVirtually Contiguous Mappings}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hhhhhK2ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_unmap_aliases (C function)c.vm_unmap_aliaseshNtauh1hhj@hhhNhNubh)}(hhh](h)}(hvoid vm_unmap_aliases (void)h]h)}(hvoid vm_unmap_aliases(void)h](j)}(hvoidh]hvoid}(hhhj"AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM: ubj)}(h h]h }(hhhj1AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhj0AhM: ubh)}(hvm_unmap_aliasesh]h)}(hvm_unmap_aliasesh]hvm_unmap_aliases}(hhhjCAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?Aubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhj0AhM: ubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhj_AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Aubah}(h]h ]h"]h$]h&]noemphjj uh1j hjWAubah}(h]h ]h"]h$]h&]jj uh1j hjAhhhj0AhM: ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhj0AhM: ubah}(h]jAah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chME hjAhhubj)}(hhh]j6)}(h0unmap outstanding lazy aliases in the vmap layerh]h0unmap outstanding lazy aliases in the vmap layer}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM9 hjAhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhj0AhM: ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jAj3jAj4uh1hhhhj@hNhNubjl)}(hXR**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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM= hjAubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjAh]hvoid}(hhhjAhhhNhNubah}(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]j6)}(h no argumentsh]h no arguments}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhM@ hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM@ hjAubah}(h]h ]h"]h$]h&]uh1jhjAubj6)}(h**Description**h]jv)}(hjBh]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMB hjAubj6)}(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).}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM; hjAubj6)}(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.}(hj-Bhj+BhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMA hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_unmap_ram (C function)c.vm_unmap_ramhNtauh1hhj@hhhNhNubh)}(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}(hhhjZBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVBhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMP ubj)}(h h]h }(hhhjiBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVBhhhjhBhMP ubh)}(h vm_unmap_ramh]h)}(h vm_unmap_ramh]h vm_unmap_ram}(hhhj{BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwBubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVBhhhjhBhMP ubj )}(h%(const void *mem, unsigned int count)h](j )}(hconst void *memh](j.)}(hjh]hconst}(hhhjBhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjBubj)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hvoidh]hvoid}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj= )}(hj@ h]h*}(hhhjBhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjBubh)}(hmemh]hmem}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubj )}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hinth]hint}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hcounth]hcount}(hhhj,ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubeh}(h]h ]h"]h$]h&]jj uh1j hjVBhhhjhBhMP ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRBhhhjhBhMP ubah}(h]jMBah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMS hjOBhhubj)}(hhh]j6)}(h6unmap linear kernel address space set up by vm_map_ramh]h6unmap linear kernel address space set up by vm_map_ram}(hjYChjWChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMO hjTChhubah}(h]h ]h"]h$]h&]uh1jhjOBhhhjhBhMP ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2joCj3joCj4uh1hhhhj@hNhNubjl)}(h**Parameters** ``const void *mem`` the pointer returned by vm_map_ram ``unsigned int count`` the count passed to that vm_map_ram call (cannot unmap partial)h](j6)}(h**Parameters**h]jv)}(hjyCh]h Parameters}(hhhj{ChhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwCubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMS hjsCubj)}(hhh](j)}(h7``const void *mem`` the pointer returned by vm_map_ram h](j)}(h``const void *mem``h]j<)}(hjCh]hconst void *mem}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMP hjCubj)}(hhh]j6)}(h"the pointer returned by vm_map_ramh]h"the pointer returned by vm_map_ram}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjChMP hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMP hjCubj)}(hV``unsigned int count`` the count passed to that vm_map_ram call (cannot unmap partial)h](j)}(h``unsigned int count``h]j<)}(hjCh]hunsigned int count}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjCubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMR hjCubj)}(hhh]j6)}(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)}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMQ hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMR hjCubeh}(h]h ]h"]h$]h&]uh1jhjsCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_map_ram (C function) c.vm_map_ramhNtauh1hhj@hhhNhNubh)}(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}(hhhj+DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'DhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMs ubj)}(h h]h }(hhhj:DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Dhhhj9DhMs ubj= )}(hj@ h]h*}(hhhjHDhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj'Dhhhj9DhMs ubh)}(h vm_map_ramh]h)}(h vm_map_ramh]h vm_map_ram}(hhhjYDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUDubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'Dhhhj9DhMs ubj )}(h3(struct page **pages, unsigned int count, int node)h](j )}(hstruct page **pagesh](j.)}(hj1h]hstruct}(hhhjuDhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjqDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqDubh)}(hhh]h)}(hpageh]hpage}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjDmodnameN classnameNjijl)}jo]jr)}jej[Dsb c.vm_map_ramasbuh1hhjqDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqDubj= )}(hj@ h]h*}(hhhjDhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjqDubj= )}(hj@ h]h*}(hhhjDhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjqDubh)}(hpagesh]hpages}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjmDubj )}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hinth]hint}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hcounth]hcount}(hhhj,EhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjmDubj )}(hint nodeh](j)}(hinth]hint}(hhhjEEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAEubj)}(h h]h }(hhhjSEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAEubh)}(hnodeh]hnode}(hhhjaEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAEubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjmDubeh}(h]h ]h"]h$]h&]jj uh1j hj'Dhhhj9DhMs ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#Dhhhj9DhMs ubah}(h]jDah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj Dhhubj)}(hhh]j6)}(h>map pages linearly into kernel virtual address (vmalloc space)h]h>map pages linearly into kernel virtual address (vmalloc space)}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMr hjEhhubah}(h]h ]h"]h$]h&]uh1jhj Dhhhj9DhMs ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jEj3jEj4uh1hhhhj@hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMv hjEubj)}(hhh](j)}(hG``struct page **pages`` an array of pointers to the pages to be mapped h](j)}(h``struct page **pages``h]j<)}(hjEh]hstruct page **pages}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMs hjEubj)}(hhh]j6)}(h.an array of pointers to the pages to be mappedh]h.an array of pointers to the pages to be mapped}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMs hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMs hjEubj)}(h'``unsigned int count`` number of pages h](j)}(h``unsigned int count``h]j<)}(hjFh]hunsigned int count}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMt hjFubj)}(hhh]j6)}(hnumber of pagesh]hnumber of pages}(hj!FhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhMt hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMt hjEubj)}(h=``int node`` prefer to allocate data structures on this node h](j)}(h ``int node``h]j<)}(hj?Fh]hint node}(hhhjAFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj=Fubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMu hj9Fubj)}(hhh]j6)}(h/prefer to allocate data structures on this nodeh]h/prefer to allocate data structures on this node}(hjZFhjXFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjTFhMu hjUFubah}(h]h ]h"]h$]h&]uh1jhj9Fubeh}(h]h ]h"]h$]h&]uh1jhjTFhMu hjEubeh}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hjzFh]h Description}(hhhj|FhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxFubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMw hjEubj6)}(hX`If you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it's good. But if you mix long-life and short-life objects with vm_map_ram(), it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects.h]hXbIf you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it’s good. But if you mix long-life and short-life objects with vm_map_ram(), it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects.}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMw hjEubj6)}(h **Return**h]jv)}(hjFh]hReturn}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM} hjEubj6)}(hEa pointer to the address that has been mapped, or ``NULL`` on failureh](h2a pointer to the address that has been mapped, or }(h2a pointer to the address that has been mapped, or hjFhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubh on failure}(h on failurehjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM} hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvfree (C function)c.vfreehNtauh1hhj@hhhNhNubh)}(hhh](h)}(hvoid vfree (const void *addr)h]h)}(hvoid vfree(const void *addr)h](j)}(hvoidh]hvoid}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hhhj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjGhM ubh)}(hvfreeh]h)}(hvfreeh]hvfree}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjGhM ubj )}(h(const void *addr)h]j )}(hconst void *addrh](j.)}(hjh]hconst}(hhhj7GhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3Gubj)}(h h]h }(hhhjDGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Gubj)}(hvoidh]hvoid}(hhhjRGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Gubj)}(h h]h }(hhhj`GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Gubj= )}(hj@ h]h*}(hhhjnGhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj3Gubh)}(haddrh]haddr}(hhhj{GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3Gubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/Gubah}(h]h ]h"]h$]h&]jj uh1j hjFhhhjGhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjGhM ubah}(h]jFah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjFhhubj)}(hhh]j6)}(h%Release memory allocated by vmalloc()h]h%Release memory allocated by vmalloc()}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjGhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jGj3jGj4uh1hhhhj@hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjGh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj)}(hhh]j)}(h)``const void *addr`` Memory base address h](j)}(h``const void *addr``h]j<)}(hjGh]hconst void *addr}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj)}(hhh]j6)}(hMemory base addressh]hMemory base address}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hj"Hh]h Description}(hhhj$HhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Hubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj6)}(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 }(h6Free the virtually continuous memory area starting at hj8HhhhNhNubjv)}(h**addr**h]haddr}(hhhjAHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8Hubh, 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, 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.hj8HhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj6)}(h/If **addr** is NULL, no operation is performed.h](hIf }(hIf hj[HhhhNhNubjv)}(h**addr**h]haddr}(hhhjdHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[Hubh$ is NULL, no operation is performed.}(h$ is NULL, no operation is performed.hj[HhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj6)}(h **Context**h]jv)}(hjHh]hContext}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~Hubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubj6)}(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 }(hMay sleep if called hjHhhhNhNubhemphasis)}(h*not*h]hnot}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jHhjHubh 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 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).hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvunmap (C function)c.vunmaphNtauh1hhj@hhhNhNubh)}(hhh](h)}(hvoid vunmap (const void *addr)h]h)}(hvoid vunmap(const void *addr)h](j)}(hvoidh]hvoid}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhM ubh)}(hvunmaph]h)}(hvunmaph]hvunmap}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjHhM ubj )}(h(const void *addr)h]j )}(hconst void *addrh](j.)}(hjh]hconst}(hhhjIhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjIubj)}(h h]h }(hhhj%IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hvoidh]hvoid}(hhhj3IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hhhjAIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj= )}(hj@ h]h*}(hhhjOIhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjIubh)}(haddrh]haddr}(hhhj\IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjHhhhjHhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjHhM ubah}(h]jHah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM$ hjHhhubj)}(hhh]j6)}(h*release virtual mapping obtained by vmap()h]h*release virtual mapping obtained by vmap()}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhj@hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjIubj)}(hhh]j)}(h)``const void *addr`` memory base address h](j)}(h``const void *addr``h]j<)}(hjIh]hconst void *addr}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjIubj)}(hhh]j6)}(hmemory base addressh]hmemory base address}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjIubj6)}(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 }(h6Free the virtually contiguous memory area starting at hjJhhhNhNubjv)}(h**addr**h]haddr}(hhhj"JhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubh9, which was created from the page array passed to vmap().}(h9, which was created from the page array passed to vmap().hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.cPhM hjIubj6)}(h(Must not be called in interrupt context.h]h(Must not be called in interrupt context.}(hj>Jhjflags ``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](j6)}(h**Parameters**h]jv)}(hjRLh]h Parameters}(hhhjTLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPLubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM< hjLLubj)}(hhh](j)}(h/``struct page **pages`` array of page pointers h](j)}(h``struct page **pages``h]j<)}(hjqLh]hstruct page **pages}(hhhjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoLubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM9 hjkLubj)}(hhh]j6)}(harray of page pointersh]harray of page pointers}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM9 hjLubah}(h]h ]h"]h$]h&]uh1jhjkLubeh}(h]h ]h"]h$]h&]uh1jhjLhM9 hjhLubj)}(h.``unsigned int count`` number of pages to map h](j)}(h``unsigned int count``h]j<)}(hjLh]hunsigned int count}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM: hjLubj)}(hhh]j6)}(hnumber of pages to maph]hnumber of pages to map}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM: hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM: hjhLubj)}(h'``unsigned long flags`` vm_area->flags h](j)}(h``unsigned long flags``h]j<)}(hjLh]hunsigned long flags}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM; hjLubj)}(hhh]j6)}(hvm_area->flagsh]hvm_area->flags}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM; hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM; hjhLubj)}(h2``pgprot_t prot`` page protection for the mapping h](j)}(h``pgprot_t prot``h]j<)}(hjMh]h pgprot_t prot}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM< hjMubj)}(hhh]j6)}(hpage protection for the mappingh]hpage protection for the mapping}(hj7Mhj5MhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1MhM< hj2Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj1MhM< hjhLubeh}(h]h ]h"]h$]h&]uh1jhjLLubj6)}(h**Description**h]jv)}(hjWMh]h Description}(hhhjYMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUMubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM> hjLLubj6)}(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 }(hMaps hjmMhhhNhNubjv)}(h **count**h]hcount}(hhhjvMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmMubh pages from }(h pages from hjmMhhhNhNubjv)}(h **pages**h]hpages}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmMubh* into contiguous kernel virtual space. If }(h* into contiguous kernel virtual space. If hjmMhhhNhNubjv)}(h **flags**h]hflags}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmMubh contains }(h contains hjmMhhhNhNubj<)}(h``VM_MAP_PUT_PAGES``h]hVM_MAP_PUT_PAGES}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmMubh 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 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.hjmMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM> hjLLubj6)}(h **Return**h]jv)}(hjMh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMD hjLLubj6)}(h.the address of the area or ``NULL`` on failureh](hthe address of the area or }(hthe address of the area or hjMhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubh on failure}(h on failurehjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMD hjLLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmap_pfn (C function) c.vmap_pfnhNtauh1hhj@hhhNhNubh)}(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}(hhhj$NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj NhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM ubj)}(h h]h }(hhhj3NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Nhhhj2NhM ubj= )}(hj@ h]h*}(hhhjANhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj Nhhhj2NhM ubh)}(hvmap_pfnh]h)}(hvmap_pfnh]hvmap_pfn}(hhhjRNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNNubah}(h]h ](jjeh"]h$]h&]jj uh1hhj Nhhhj2NhM ubj )}(h8(unsigned long *pfns, unsigned int count, pgprot_t prot)h](j )}(hunsigned long *pfnsh](j)}(hunsignedh]hunsigned}(hhhjnNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjNubj)}(h h]h }(hhhj|NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjNubj)}(hlongh]hlong}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjNubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjNubj= )}(hj@ h]h*}(hhhjNhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjjNubh)}(hpfnsh]hpfns}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjfNubj )}(hunsigned int counth](j)}(hunsignedh]hunsigned}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hinth]hint}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hcounth]hcount}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjfNubj )}(h pgprot_t proth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hhhj OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj"OmodnameN classnameNjijl)}jo]jr)}jejTNsb c.vmap_pfnasbuh1hhjOubj)}(h h]h }(hhhj@OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hproth]hprot}(hhhjNOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjfNubeh}(h]h ]h"]h$]h&]jj uh1j hj Nhhhj2NhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhj2NhM ubah}(h]jNah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjNhhubj)}(hhh]j6)}(h4map an array of PFNs into virtually contiguous spaceh]h4map an array of PFNs into virtually contiguous space}(hj{OhjyOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjvOhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhj2NhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhj@hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjOh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjOubj)}(hhh](j)}(h&``unsigned long *pfns`` array of PFNs h](j)}(h``unsigned long *pfns``h]j<)}(hjOh]hunsigned long *pfns}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjOubj)}(hhh]j6)}(h array of PFNsh]h array of PFNs}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhM hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM hjOubj)}(h.``unsigned int count`` number of pages to map h](j)}(h``unsigned int count``h]j<)}(hjOh]hunsigned int count}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjOubj)}(hhh]j6)}(hnumber of pages to maph]hnumber of pages to map}(hjPhj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhM hj Pubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhM hjOubj)}(h2``pgprot_t prot`` page protection for the mapping h](j)}(h``pgprot_t prot``h]j<)}(hj,Ph]h pgprot_t prot}(hhhj.PhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*Pubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hj&Pubj)}(hhh]j6)}(hpage protection for the mappingh]hpage protection for the mapping}(hjGPhjEPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAPhM hjBPubah}(h]h ]h"]h$]h&]uh1jhj&Pubeh}(h]h ]h"]h$]h&]uh1jhjAPhM hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjgPh]h Description}(hhhjiPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjePubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjOubj6)}(htMaps **count** PFNs from **pfns** into contiguous kernel virtual space and returns the start address of the mapping.h](hMaps }(hMaps hj}PhhhNhNubjv)}(h **count**h]hcount}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Pubh PFNs from }(h PFNs from hj}PhhhNhNubjv)}(h**pfns**h]hpfns}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}PubhS into contiguous kernel virtual space and returns the start address of the mapping.}(hS into contiguous kernel virtual space and returns the start address of the mapping.hj}PhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ remap_vmalloc_range (C function)c.remap_vmalloc_rangehNtauh1hhj@hhhNhNubh)}(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}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM;ubj)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhM;ubh)}(hremap_vmalloc_rangeh]h)}(hremap_vmalloc_rangeh]hremap_vmalloc_range}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjPhM;ubj )}(h=(struct vm_area_struct *vma, void *addr, unsigned long pgoff)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj Qubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Qubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj.QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+Qubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0QmodnameN classnameNjijl)}jo]jr)}jejPsbc.remap_vmalloc_rangeasbuh1hhj Qubj)}(h h]h }(hhhjNQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Qubj= )}(hj@ h]h*}(hhhj\QhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj Qubh)}(hvmah]hvma}(hhhjiQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Qubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubj )}(h void *addrh](j)}(hvoidh]hvoid}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Qubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Qubj= )}(hj@ h]h*}(hhhjQhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj~Qubh)}(haddrh]haddr}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Qubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubj )}(hunsigned long pgoffh](j)}(hunsignedh]hunsigned}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hlongh]hlong}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hpgoffh]hpgoff}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubeh}(h]h ]h"]h$]h&]jj uh1j hjPhhhjPhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPhhhjPhM;ubah}(h]jPah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMGhjPhhubj)}(hhh]j6)}(hmap vmalloc pages to userspaceh]hmap vmalloc pages to userspace}(hj)Rhj'RhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM:hj$Rhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhM;ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?Rj3j?Rj4uh1hhhhj@hNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjIRh]h Parameters}(hhhjKRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGRubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM>hjCRubj)}(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<)}(hjhRh]hstruct vm_area_struct *vma}(hhhjjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjfRubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM;hjbRubj)}(hhh]j6)}(h$vma to cover (map full range of vma)h]h$vma to cover (map full range of vma)}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}RhM;hj~Rubah}(h]h ]h"]h$]h&]uh1jhjbRubeh}(h]h ]h"]h$]h&]uh1jhj}RhM;hj_Rubj)}(h``void *addr`` vmalloc memory h](j)}(h``void *addr``h]j<)}(hjRh]h void *addr}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM<hjRubj)}(hhh]j6)}(hvmalloc memoryh]hvmalloc memory}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhM<hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM<hj_Rubj)}(hK``unsigned long pgoff`` number of pages into addr before first page to map h](j)}(h``unsigned long pgoff``h]j<)}(hjRh]hunsigned long pgoff}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM=hjRubj)}(hhh]j6)}(h2number of pages into addr before first page to maph]h2number of pages into addr before first page to map}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhM=hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM=hj_Rubeh}(h]h ]h"]h$]h&]uh1jhjCRubj6)}(h **Return**h]jv)}(hjSh]hReturn}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM?hjCRubj6)}(h0 for success, -Exxx on failureh]h0 for success, -Exxx on failure}(hj-Shj+ShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chM?hjCRubj6)}(h**Description**h]jv)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:Subah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMAhjCRubj6)}(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.}(hjTShjRShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMAhjCRubj6)}(h.Similar to remap_pfn_range() (see mm/memory.c)h]h.Similar to remap_pfn_range() (see mm/memory.c)}(hjcShjaShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.chMEhjCRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj@hhhNhNubeh}(h]virtually-contiguous-mappingsah ]h"]virtually contiguous mappingsah$]h&]uh1hhhhhhhhK2ubh)}(hhh](h)}(hFile Mapping and Page Cacheh]hFile Mapping and Page Cache}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShhhhhK8ubh)}(hhh](h)}(hFilemaph]hFilemap}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShhhhhK;ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_fdatawrite_wbc (C function)c.filemap_fdatawrite_wbchNtauh1hhjShhhNhNubh)}(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}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM{ubj)}(h h]h }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM{ubh)}(hfilemap_fdatawrite_wbch]h)}(hfilemap_fdatawrite_wbch]hfilemap_fdatawrite_wbc}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShM{ubj )}(h>(struct address_space *mapping, struct writeback_control *wbc)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjShhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjSubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjTmodnameN classnameNjijl)}jo]jr)}jejSsbc.filemap_fdatawrite_wbcasbuh1hhjSubj)}(h h]h }(hhhj5ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj= )}(hj@ h]h*}(hhhjCThhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjSubh)}(hmappingh]hmapping}(hhhjPThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjSubj )}(hstruct writeback_control *wbch](j.)}(hj1h]hstruct}(hhhjiThhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjeTubj)}(h h]h }(hhhjvThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeTubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjTmodnameN classnameNjijl)}jo]j1Tc.filemap_fdatawrite_wbcasbuh1hhjeTubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeTubj= )}(hj@ h]h*}(hhhjThhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjeTubh)}(hwbch]hwbc}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeTubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjSubeh}(h]h ]h"]h$]h&]jj uh1j hjShhhjShM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShM{ubah}(h]jSah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjShhubj)}(hhh]j6)}(h/start writeback on mapping dirty pages in rangeh]h/start writeback on mapping dirty pages in range}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMzhjThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShM{ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUj3jUj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj Uh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Uubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM~hjUubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j<)}(hj,Uh]hstruct address_space *mapping}(hhhj.UhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*Uubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM{hj&Uubj)}(hhh]j6)}(h address space structure to writeh]h address space structure to write}(hjGUhjEUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAUhM{hjBUubah}(h]h ]h"]h$]h&]uh1jhj&Uubeh}(h]h ]h"]h$]h&]uh1jhjAUhM{hj#Uubj)}(hQ``struct writeback_control *wbc`` the writeback_control controlling the writeout h](j)}(h!``struct writeback_control *wbc``h]j<)}(hjeUh]hstruct writeback_control *wbc}(hhhjgUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcUubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM|hj_Uubj)}(hhh]j6)}(h.the writeback_control controlling the writeouth]h.the writeback_control controlling the writeout}(hjUhj~UhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzUhM|hj{Uubah}(h]h ]h"]h$]h&]uh1jhj_Uubeh}(h]h ]h"]h$]h&]uh1jhjzUhM|hj#Uubeh}(h]h ]h"]h$]h&]uh1jhjUubj6)}(h**Description**h]jv)}(hjUh]h Description}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM~hjUubj6)}(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.}(hjUhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM~hjUubj6)}(h **Return**h]jv)}(hjUh]hReturn}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjUubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_flush (C function)c.filemap_flushhNtauh1hhjShhhNhNubh)}(hhh](h)}(h1int filemap_flush (struct address_space *mapping)h]h)}(h0int filemap_flush(struct address_space *mapping)h](j)}(hinth]hint}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj*VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhj)VhMubh)}(h filemap_flushh]h)}(h filemap_flushh]h filemap_flush}(hhhjVsbc.filemap_flushasbuh1hhjTVubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTVubj= )}(hj@ h]h*}(hhhjVhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjTVubh)}(hmappingh]hmapping}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPVubah}(h]h ]h"]h$]h&]jj uh1j hjVhhhj)VhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhj)VhMubah}(h]jVah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVhhubj)}(hhh]j6)}(hmostly a non-blocking flushh]hmostly a non-blocking flush}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhj)VhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jVj3jVj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjVh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVubj)}(hhh]j)}(h7``struct address_space *mapping`` target address_space h](j)}(h!``struct address_space *mapping``h]j<)}(hjWh]hstruct address_space *mapping}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjWubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjWubj)}(hhh]j6)}(htarget address_spaceh]htarget address_space}(hj8Whj6WhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2WhMhj3Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhj2WhMhjWubah}(h]h ]h"]h$]h&]uh1jhjVubj6)}(h**Description**h]jv)}(hjXWh]h Description}(hhhjZWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVWubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVubj6)}(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.}(hjpWhjnWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVubj6)}(h **Return**h]jv)}(hjWh]hReturn}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}Wubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjWubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_range_has_page (C function)c.filemap_range_has_pagehNtauh1hhjShhhNhNubh)}(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)}(hj7h]hbool}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhMubh)}(hfilemap_range_has_pageh]h)}(hfilemap_range_has_pageh]hfilemap_range_has_page}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjWhMubj )}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj Xubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj-XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*Xubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj/XmodnameN classnameNjijl)}jo]jr)}jejWsbc.filemap_range_has_pageasbuh1hhj Xubj)}(h h]h }(hhhjMXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xubj= )}(hj@ h]h*}(hhhj[XhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj Xubh)}(hmappingh]hmapping}(hhhjhXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Xubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjXubj )}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjXmodnameN classnameNjijl)}jo]jIXc.filemap_range_has_pageasbuh1hhj}Xubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Xubh)}(h start_byteh]h start_byte}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Xubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjXubj )}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjXmodnameN classnameNjijl)}jo]jIXc.filemap_range_has_pageasbuh1hhjXubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hend_byteh]hend_byte}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjXubeh}(h]h ]h"]h$]h&]jj uh1j hjWhhhjWhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjWhMubah}(h]jWah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjWhhubj)}(hhh]j6)}(h check if a page exists in range.h]h check if a page exists in range.}(hj%Yhj#YhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj Yhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;Yj3j;Yj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjEYh]h Parameters}(hhhjGYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCYubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj?Yubj)}(hhh](j)}(hF``struct address_space *mapping`` address space within which to check h](j)}(h!``struct address_space *mapping``h]j<)}(hjdYh]hstruct address_space *mapping}(hhhjfYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjbYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj^Yubj)}(hhh]j6)}(h#address space within which to checkh]h#address space within which to check}(hjYhj}YhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyYhMhjzYubah}(h]h ]h"]h$]h&]uh1jhj^Yubeh}(h]h ]h"]h$]h&]uh1jhjyYhMhj[Yubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j<)}(hjYh]hloff_t start_byte}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjYubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj[Yubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j<)}(hjYh]hloff_t end_byte}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjYubj)}(hhh]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj[Yubeh}(h]h ]h"]h$]h&]uh1jhj?Yubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj?Yubj6)}(h}Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback.h]h}Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback.}(hj)Zhj'ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj?Yubj6)}(h **Return**h]jv)}(hj8Zh]hReturn}(hhhj:ZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6Zubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj?Yubj6)}(hQ``true`` if at least one page exists in the specified range, ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjRZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNZubh5 if at least one page exists in the specified range, }(h5 if at least one page exists in the specified range, hjNZhhhNhNubj<)}(h ``false``h]hfalse}(hhhjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNZubh otherwise.}(h otherwise.hjNZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj?Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$filemap_fdatawait_range (C function)c.filemap_fdatawait_rangehNtauh1hhjShhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhMubh)}(hfilemap_fdatawait_rangeh]h)}(hfilemap_fdatawait_rangeh]hfilemap_fdatawait_range}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhMubj )}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjZhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjZubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjZmodnameN classnameNjijl)}jo]jr)}jejZsbc.filemap_fdatawait_rangeasbuh1hhjZubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj= )}(hj@ h]h*}(hhhj([hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjZubh)}(hmappingh]hmapping}(hhhj5[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjQ[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjN[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjS[modnameN classnameNjijl)}jo]j[c.filemap_fdatawait_rangeasbuh1hhjJ[ubj)}(h h]h }(hhhjo[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ[ubh)}(h start_byteh]h start_byte}(hhhj}[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[modnameN classnameNjijl)}jo]j[c.filemap_fdatawait_rangeasbuh1hhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hend_byteh]hend_byte}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubeh}(h]h ]h"]h$]h&]jj uh1j hjZhhhjZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhMubah}(h]jZah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjZhhubj)}(hhh]j6)}(hwait for writeback to completeh]hwait for writeback to complete}(hj[hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM!hj \ubj)}(hhh](j)}(hF``struct address_space *mapping`` address space structure to wait for h](j)}(h!``struct address_space *mapping``h]j<)}(hj1\h]hstruct address_space *mapping}(hhhj3\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]j6)}(h#address space structure to wait forh]h#address space structure to wait for}(hjL\hjJ\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjF\hMhjG\ubah}(h]h ]h"]h$]h&]uh1jhj+\ubeh}(h]h ]h"]h$]h&]uh1jhjF\hMhj(\ubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j<)}(hjj\h]hloff_t start_byte}(hhhjl\hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjh\ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjd\ubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhjd\ubeh}(h]h ]h"]h$]h&]uh1jhj\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}(hhhj\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]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\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 \ubj6)}(h**Description**h]jv)}(hj\h]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM"hj \ubj6)}(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.}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM"hj \ubj6)}(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]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hj \ubj6)}(h **Return**h]jv)}(hj]h]hReturn}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM*hj \ubj6)}(h"error status of the address space.h]h"error status of the address space.}(hj,]hj*]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM*hj \ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0filemap_fdatawait_range_keep_errors (C function)%c.filemap_fdatawait_range_keep_errorshNtauh1hhjShhhNhNubh)}(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}(hhhjY]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU]hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM6ubj)}(h h]h }(hhhjh]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU]hhhjg]hM6ubh)}(h#filemap_fdatawait_range_keep_errorsh]h)}(h#filemap_fdatawait_range_keep_errorsh]h#filemap_fdatawait_range_keep_errors}(hhhjz]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjU]hhhjg]hM6ubj )}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj]hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj]ubj)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj]modnameN classnameNjijl)}jo]jr)}jej|]sb%c.filemap_fdatawait_range_keep_errorsasbuh1hhj]ubj)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj= )}(hj@ h]h*}(hhhj]hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj]ubh)}(hmappingh]hmapping}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubj )}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj ^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj ^modnameN classnameNjijl)}jo]j]%c.filemap_fdatawait_range_keep_errorsasbuh1hhj^ubj)}(h h]h }(hhhj)^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(h start_byteh]h start_byte}(hhhj7^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubj )}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjS^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjU^modnameN classnameNjijl)}jo]j]%c.filemap_fdatawait_range_keep_errorsasbuh1hhjL^ubj)}(h h]h }(hhhjq^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL^ubh)}(hend_byteh]hend_byte}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubeh}(h]h ]h"]h$]h&]jj uh1j hjU]hhhjg]hM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQ]hhhjg]hM6ubah}(h]jL]ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMBhjN]hhubj)}(hhh]j6)}(hwait for writeback to completeh]hwait for writeback to complete}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM5hj^hhubah}(h]h ]h"]h$]h&]uh1jhjN]hhhjg]hM6ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j^j3j^j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM9hj^ubj)}(hhh](j)}(hF``struct address_space *mapping`` address space structure to wait for h](j)}(h!``struct address_space *mapping``h]j<)}(hj^h]hstruct address_space *mapping}(hhhj^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.chM6hj^ubj)}(hhh]j6)}(h#address space structure to wait forh]h#address space structure to wait for}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM6hj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj_hM6hj^ubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j<)}(hj$_h]hloff_t start_byte}(hhhj&_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.chM7hj_ubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hj?_hj=_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9_hM7hj:_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj9_hM7hj^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}(hhhj__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.chM8hjW_ubj)}(hhh]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjx_hjv_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjr_hM8hjs_ubah}(h]h ]h"]h$]h&]uh1jhjW_ubeh}(h]h ]h"]h$]h&]uh1jhjr_hM8hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hj_h]h Description}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM:hj^ubj6)}(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_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM:hj^ubj6)}(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_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM>hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!file_fdatawait_range (C function)c.file_fdatawait_rangehNtauh1hhjShhhNhNubh)}(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}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMLubj)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj_hMLubh)}(hfile_fdatawait_rangeh]h)}(hfile_fdatawait_rangeh]hfile_fdatawait_range}(hhhj `hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj `ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhj_hMLubj )}(h7(struct file *file, loff_t start_byte, loff_t end_byte)h](j )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhj)`hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj%`ubj)}(h h]h }(hhhj6`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%`ubh)}(hhh]h)}(hfileh]hfile}(hhhjG`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjI`modnameN classnameNjijl)}jo]jr)}jej`sbc.file_fdatawait_rangeasbuh1hhj%`ubj)}(h h]h }(hhhjg`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%`ubj= )}(hj@ h]h*}(hhhju`hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj%`ubh)}(hfileh]hfile}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj!`ubj )}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]jc`c.file_fdatawait_rangeasbuh1hhj`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(h start_byteh]h start_byte}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj!`ubj )}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]jc`c.file_fdatawait_rangeasbuh1hhj`ubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hend_byteh]hend_byte}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj!`ubeh}(h]h ]h"]h$]h&]jj uh1j hj_hhhj_hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhj_hMLubah}(h]j_ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMZhj_hhubj)}(hhh]j6)}(hwait for writeback to completeh]hwait for writeback to complete}(hj?ahj=ahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMKhj:ahhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hMLubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUaj3jUaj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_ah]h Parameters}(hhhjaahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]aubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMOhjYaubj)}(hhh](j)}(hK``struct file *file`` file pointing to address space structure to wait for h](j)}(h``struct file *file``h]j<)}(hj~ah]hstruct file *file}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|aubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMLhjxaubj)}(hhh]j6)}(h4file pointing to address space structure to wait forh]h4file pointing to address space structure to wait for}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMLhjaubah}(h]h ]h"]h$]h&]uh1jhjxaubeh}(h]h ]h"]h$]h&]uh1jhjahMLhjuaubj)}(h=``loff_t start_byte`` offset in bytes where the range starts h](j)}(h``loff_t start_byte``h]j<)}(hjah]hloff_t start_byte}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMMhjaubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMMhjuaubj)}(hE``loff_t end_byte`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t end_byte``h]j<)}(hjah]hloff_t end_byte}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMNhjaubj)}(hhh]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj bhj bhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMNhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhMNhjuaubeh}(h]h ]h"]h$]h&]uh1jhjYaubj6)}(h**Description**h]jv)}(hj+bh]h Description}(hhhj-bhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)bubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMPhjYaubj6)}(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.}(hjCbhjAbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMPhjYaubj6)}(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.}(hjRbhjPbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMThjYaubj6)}(h **Return**h]jv)}(hjabh]hReturn}(hhhjcbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_bubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMXhjYaubj6)}(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.}(hjybhjwbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMXhjYaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*filemap_fdatawait_keep_errors (C function)c.filemap_fdatawait_keep_errorshNtauh1hhjShhhNhNubh)}(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}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMeubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjbhMeubh)}(hfilemap_fdatawait_keep_errorsh]h)}(hfilemap_fdatawait_keep_errorsh]hfilemap_fdatawait_keep_errors}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjbhMeubj )}(h(struct address_space *mapping)h]j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjbhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjbubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjcmodnameN classnameNjijl)}jo]jr)}jejbsbc.filemap_fdatawait_keep_errorsasbuh1hhjbubj)}(h h]h }(hhhj!chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj= )}(hj@ h]h*}(hhhj/chhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjbubh)}(hmappingh]hmapping}(hhhjlend, 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](j6)}(h**Parameters**h]jv)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj)}(hhh](j)}(hB``struct address_space *mapping`` the address_space for the pages h](j)}(h!``struct address_space *mapping``h]j<)}(hjeh]hstruct address_space *mapping}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj)}(hhh]j6)}(hthe address_space for the pagesh]hthe address_space for the pages}(hj fhj fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjeubj)}(h9``loff_t lstart`` offset in bytes where the range starts h](j)}(h``loff_t lstart``h]j<)}(hj)fh]h loff_t lstart}(hhhj+fhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'fubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj#fubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjDfhjBfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>fhMhj?fubah}(h]h ]h"]h$]h&]uh1jhj#fubeh}(h]h ]h"]h$]h&]uh1jhj>fhMhjeubj)}(hA``loff_t lend`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t lend``h]j<)}(hjbfh]h loff_t lend}(hhhjdfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj`fubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj\fubj)}(hhh]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj}fhj{fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwfhMhjxfubah}(h]h ]h"]h$]h&]uh1jhj\fubeh}(h]h ]h"]h$]h&]uh1jhjwfhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj6)}(h=Write out and wait upon file offsets lstart->lend, inclusive.h]h=Write out and wait upon file offsets lstart->lend, inclusive.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj6)}(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 }(h Note that hjfhhhNhNubjv)}(h**lend**h]hlend}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubh 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 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).hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj6)}(h **Return**h]jv)}(hjfh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjfubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubj6)}(h"error status of the address space.h]h"error status of the address space.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*file_check_and_advance_wb_err (C function)c.file_check_and_advance_wb_errhNtauh1hhjShhhNhNubh)}(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}(hhhj,ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ghhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj;ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ghhhj:ghMubh)}(hfile_check_and_advance_wb_errh]h)}(hfile_check_and_advance_wb_errh]hfile_check_and_advance_wb_err}(hhhjMghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIgubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(ghhhj:ghMubj )}(h(struct file *file)h]j )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhjighhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjegubj)}(h h]h }(hhhjvghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjegubh)}(hhh]h)}(hfileh]hfile}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjgmodnameN classnameNjijl)}jo]jr)}jejOgsbc.file_check_and_advance_wb_errasbuh1hhjegubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjegubj= )}(hj@ h]h*}(hhhjghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjegubh)}(hfileh]hfile}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjegubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjagubah}(h]h ]h"]h$]h&]jj uh1j hj(ghhhj:ghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$ghhhj:ghMubah}(h]jgah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj!ghhubj)}(hhh]j6)}(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}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhj!ghhhj:ghMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jhj3jhj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjhh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj hubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj)}(hhh]j)}(hG``struct file *file`` struct file on which the error is being reported h](j)}(h``struct file *file``h]j<)}(hj.hh]hstruct file *file}(hhhj0hhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj,hubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj(hubj)}(hhh]j6)}(h0struct file on which the error is being reportedh]h0struct file on which the error is being reported}(hjIhhjGhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjChhMhjDhubah}(h]h ]h"]h$]h&]uh1jhj(hubeh}(h]h ]h"]h$]h&]uh1jhjChhMhj%hubah}(h]h ]h"]h$]h&]uh1jhj hubj6)}(h**Description**h]jv)}(hjihh]h Description}(hhhjkhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjghubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(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).}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(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.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(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.).}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(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.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(h **Return**h]jv)}(hjhh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&file_write_and_wait_range (C function)c.file_write_and_wait_rangehNtauh1hhjShhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhjihMubh)}(hfile_write_and_wait_rangeh]h)}(hfile_write_and_wait_rangeh]hfile_write_and_wait_range}(hhhj2ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.iubah}(h]h ](jjeh"]h$]h&]jj uh1hhj ihhhjihMubj )}(h/(struct file *file, loff_t lstart, loff_t lend)h](j )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhjNihhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjJiubj)}(h h]h }(hhhj[ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJiubh)}(hhh]h)}(hfileh]hfile}(hhhjlihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjnimodnameN classnameNjijl)}jo]jr)}jej4isbc.file_write_and_wait_rangeasbuh1hhjJiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJiubj= )}(hj@ h]h*}(hhhjihhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjJiubh)}(hfileh]hfile}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjFiubj )}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjimodnameN classnameNjijl)}jo]jic.file_write_and_wait_rangeasbuh1hhjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hlstarth]hlstart}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjFiubj )}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj jmodnameN classnameNjijl)}jo]jic.file_write_and_wait_rangeasbuh1hhjjubj)}(h h]h }(hhhj)jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hlendh]hlend}(hhhj7jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjFiubeh}(h]h ]h"]h$]h&]jj uh1j hj ihhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj ihhhjihMubah}(h]jiah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjihhubj)}(hhh]j6)}(h write out & wait on a file rangeh]h write out & wait on a file range}(hjdjhjbjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj_jhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzjj3jzjj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~jubj)}(hhh](j)}(h@``struct file *file`` file pointing to address_space with pages h](j)}(h``struct file *file``h]j<)}(hjjh]hstruct file *file}(hhhjjhhhNhNubah}(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.chMhjjubj)}(hhh]j6)}(h)file pointing to address_space with pagesh]h)file pointing to address_space with pages}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(h9``loff_t lstart`` offset in bytes where the range starts h](j)}(h``loff_t lstart``h]j<)}(hjjh]h loff_t lstart}(hhhjjhhhNhNubah}(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.chMhjjubj)}(hhh]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(hA``loff_t lend`` offset in bytes where the range ends (inclusive) h](j)}(h``loff_t lend``h]j<)}(hjkh]h loff_t lend}(hhhjkhhhNhNubah}(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]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hj0khj.khhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*khMhj+kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj*khMhjjubeh}(h]h ]h"]h$]h&]uh1jhj~jubj6)}(h**Description**h]jv)}(hjPkh]h Description}(hhhjRkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNkubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~jubj6)}(h=Write out and wait upon file offsets lstart->lend, inclusive.h]h=Write out and wait upon file offsets lstart->lend, inclusive.}(hjhkhjfkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~jubj6)}(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 }(h Note that hjukhhhNhNubjv)}(h**lend**h]hlend}(hhhj~khhhNhNubah}(h]h ]h"]h$]h&]uh1juhjukubh 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 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).hjukhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~jubj6)}(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.}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~jubj6)}(h **Return**h]jv)}(hjkh]hReturn}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj~jubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj~jubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%replace_page_cache_folio (C function)c.replace_page_cache_foliohNtauh1hhjShhhNhNubh)}(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}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#ubj)}(h h]h }(hhhj lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj lhM#ubh)}(hreplace_page_cache_folioh]h)}(hreplace_page_cache_folioh]hreplace_page_cache_folio}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj lhM#ubj )}(h&(struct folio *old, struct folio *new)h](j )}(hstruct folio *oldh](j.)}(hj1h]hstruct}(hhhj:lhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj6lubj)}(h h]h }(hhhjGlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6lubh)}(hhh]h)}(hfolioh]hfolio}(hhhjXlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjZlmodnameN classnameNjijl)}jo]jr)}jej lsbc.replace_page_cache_folioasbuh1hhj6lubj)}(h h]h }(hhhjxlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6lubj= )}(hj@ h]h*}(hhhjlhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6lubh)}(holdh]hold}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6lubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj2lubj )}(hstruct folio *newh](j.)}(hj1h]hstruct}(hhhjlhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]h)}(hfolioh]hfolio}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjlmodnameN classnameNjijl)}jo]jtlc.replace_page_cache_folioasbuh1hhjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj= )}(hj@ h]h*}(hhhjlhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjlubh)}(hnewh]hnew}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj2lubeh}(h]h ]h"]h$]h&]jj uh1j hjkhhhj lhM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhj lhM#ubah}(h]jkah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM.hjkhhubj)}(hhh]j6)}(h(replace a pagecache folio with a new oneh]h(replace a pagecache folio with a new one}(hj0mhj.mhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM"hj+mhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhj lhM#ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jFmj3jFmj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPmh]h Parameters}(hhhjRmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNmubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjJmubj)}(hhh](j)}(h+``struct folio *old`` folio to be replaced h](j)}(h``struct folio *old``h]j<)}(hjomh]hstruct folio *old}(hhhjqmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmmubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM#hjimubj)}(hhh]j6)}(hfolio to be replacedh]hfolio to be replaced}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhM#hjmubah}(h]h ]h"]h$]h&]uh1jhjimubeh}(h]h ]h"]h$]h&]uh1jhjmhM#hjfmubj)}(h,``struct folio *new`` folio to replace with h](j)}(h``struct folio *new``h]j<)}(hjmh]hstruct folio *new}(hhhjmhhhNhNubah}(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.chM$hjmubj)}(hhh]j6)}(hfolio to replace withh]hfolio to replace with}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhM$hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM$hjfmubeh}(h]h ]h"]h$]h&]uh1jhjJmubj6)}(h**Description**h]jv)}(hjmh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjJmubj6)}(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.}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM&hjJmubj6)}(h7The remove + add is atomic. This function cannot fail.h]h7The remove + add is atomic. This function cannot fail.}(hj nhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjJmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_add_wait_queue (C function)c.folio_add_wait_queuehNtauh1hhjShhhNhNubh)}(hhh](h)}(hKvoid folio_add_wait_queue (struct folio *folio, wait_queue_entry_t *waiter)h]h)}(hJvoid folio_add_wait_queue(struct folio *folio, wait_queue_entry_t *waiter)h](j)}(hvoidh]hvoid}(hhhj7nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3nhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjFnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3nhhhjEnhMubh)}(hfolio_add_wait_queueh]h)}(hfolio_add_wait_queueh]hfolio_add_wait_queue}(hhhjXnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTnubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3nhhhjEnhMubj )}(h1(struct folio *folio, wait_queue_entry_t *waiter)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjtnhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjpnubj)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpnubh)}(hhh]h)}(hfolioh]hfolio}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjnmodnameN classnameNjijl)}jo]jr)}jejZnsbc.folio_add_wait_queueasbuh1hhjpnubj)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpnubj= )}(hj@ h]h*}(hhhjnhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjpnubh)}(hfolioh]hfolio}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpnubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlnubj )}(hwait_queue_entry_t *waiterh](h)}(hhh]h)}(hwait_queue_entry_th]hwait_queue_entry_t}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjnmodnameN classnameNjijl)}jo]jnc.folio_add_wait_queueasbuh1hhjnubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj= )}(hj@ h]h*}(hhhjohhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjnubh)}(hwaiterh]hwaiter}(hhhj"ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlnubeh}(h]h ]h"]h$]h&]jj uh1j hj3nhhhjEnhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/nhhhjEnhMubah}(h]j*nah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj,nhhubj)}(hhh]j6)}(h/Add an arbitrary waiter to a folio's wait queueh]h1Add an arbitrary waiter to a folio’s wait queue}(hjOohjMohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJohhubah}(h]h ]h"]h$]h&]uh1jhj,nhhhjEnhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jeoj3jeoj4uh1hhhhjShNhNubjl)}(h**Parameters** ``struct folio *folio`` Folio defining the wait queue of interest ``wait_queue_entry_t *waiter`` Waiter to add to the queue **Description** Add an arbitrary **waiter** to the wait queue for the nominated **folio**.h](j6)}(h**Parameters**h]jv)}(hjooh]h Parameters}(hhhjqohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmoubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjioubj)}(hhh](j)}(hB``struct folio *folio`` Folio defining the wait queue of interest h](j)}(h``struct folio *folio``h]j<)}(hjoh]hstruct folio *folio}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjoubj)}(hhh]j6)}(h)Folio defining the wait queue of interesth]h)Folio defining the wait queue of interest}(hjohjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjoubj)}(h:``wait_queue_entry_t *waiter`` Waiter to add to the queue h](j)}(h``wait_queue_entry_t *waiter``h]j<)}(hjoh]hwait_queue_entry_t *waiter}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjoubj)}(hhh]j6)}(hWaiter to add to the queueh]hWaiter to add to the queue}(hjohjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjoubeh}(h]h ]h"]h$]h&]uh1jhjioubj6)}(h**Description**h]jv)}(hjph]h Description}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjioubj6)}(hJAdd an arbitrary **waiter** to the wait queue for the nominated **folio**.h](hAdd an arbitrary }(hAdd an arbitrary hjphhhNhNubjv)}(h **waiter**h]hwaiter}(hhhj!phhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh% to the wait queue for the nominated }(h% to the wait queue for the nominated hjphhhNhNubjv)}(h **folio**h]hfolio}(hhhj4phhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubh.}(hjyhjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjioubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_unlock (C function)c.folio_unlockhNtauh1hhjShhhNhNubh)}(hhh](h)}(h'void folio_unlock (struct folio *folio)h]h)}(h&void folio_unlock(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjmphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiphhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj|phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiphhhj{phMubh)}(h folio_unlockh]h)}(h folio_unlockh]h folio_unlock}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjiphhhj{phMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjphhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjpubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(hfolioh]hfolio}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjpmodnameN classnameNjijl)}jo]jr)}jejpsbc.folio_unlockasbuh1hhjpubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj= )}(hj@ h]h*}(hhhjphhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjpubh)}(hfolioh]hfolio}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjpubah}(h]h ]h"]h$]h&]jj uh1j hjiphhhj{phMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjephhhj{phMubah}(h]j`pah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjbphhubj)}(hhh]j6)}(hUnlock a locked folio.h]hUnlock a locked folio.}(hj0qhj.qhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj+qhhubah}(h]h ]h"]h$]h&]uh1jhjbphhhj{phMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jFqj3jFqj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPqh]h Parameters}(hhhjRqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJqubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjoqh]hstruct folio *folio}(hhhjqqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmqubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjiqubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjiqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjfqubah}(h]h ]h"]h$]h&]uh1jhjJqubj6)}(h**Description**h]jv)}(hjqh]h Description}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJqubj6)}(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.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJqubj6)}(h **Context**h]jv)}(hjqh]hContext}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJqubj6)}(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.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjJqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_end_read (C function)c.folio_end_readhNtauh1hhjShhhNhNubh)}(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}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj%rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhj$rhMubh)}(hfolio_end_readh]h)}(hfolio_end_readh]hfolio_end_read}(hhhj7rhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3rubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhj$rhMubj )}(h#(struct folio *folio, bool success)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjSrhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjOrubj)}(h h]h }(hhhj`rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOrubh)}(hhh]h)}(hfolioh]hfolio}(hhhjqrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnrubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjsrmodnameN classnameNjijl)}jo]jr)}jej9rsbc.folio_end_readasbuh1hhjOrubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOrubj= )}(hj@ h]h*}(hhhjrhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjOrubh)}(hfolioh]hfolio}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOrubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKrubj )}(h bool successh](j)}(hj7h]hbool}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hsuccessh]hsuccess}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKrubeh}(h]h ]h"]h$]h&]jj uh1j hjrhhhj$rhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhj$rhMubah}(h]j rah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj rhhubj)}(hhh]j6)}(hEnd read on a folio.h]hEnd read on a folio.}(hj shj shhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhj rhhhj$rhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#sj3j#sj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-sh]h Parameters}(hhhj/shhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+subah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'subj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjLsh]hstruct folio *folio}(hhhjNshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjFsubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjgshjeshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjashMhjbsubah}(h]h ]h"]h$]h&]uh1jhjFsubeh}(h]h ]h"]h$]h&]uh1jhjashMhjCsubj)}(h;``bool success`` True if all reads completed successfully. h](j)}(h``bool success``h]j<)}(hjsh]h bool success}(hhhjshhhNhNubah}(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.chMhjsubj)}(hhh]j6)}(h)True if all reads completed successfully.h]h)True if all reads completed successfully.}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjCsubeh}(h]h ]h"]h$]h&]uh1jhj'subj6)}(h**Description**h]jv)}(hjsh]h Description}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'subj6)}(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.}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'subj6)}(h **Context**h]jv)}(hjsh]hContext}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'subj6)}(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.}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj'subeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_end_private_2 (C function)c.folio_end_private_2hNtauh1hhjShhhNhNubh)}(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}(hhhj,thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(thhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hhhj;thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(thhhj:thM ubh)}(hfolio_end_private_2h]h)}(hfolio_end_private_2h]hfolio_end_private_2}(hhhjMthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjItubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(thhhj:thM ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjithhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjetubj)}(h h]h }(hhhjvthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjetubh)}(hhh]h)}(hfolioh]hfolio}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjtmodnameN classnameNjijl)}jo]jr)}jejOtsbc.folio_end_private_2asbuh1hhjetubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjetubj= )}(hj@ h]h*}(hhhjthhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjetubh)}(hfolioh]hfolio}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjetubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjatubah}(h]h ]h"]h$]h&]jj uh1j hj(thhhj:thM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$thhhj:thM ubah}(h]jtah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj!thhubj)}(hhh]j6)}(h(Clear PG_private_2 and wake any waiters.h]h(Clear PG_private_2 and wake any waiters.}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjthhubah}(h]h ]h"]h$]h&]uh1jhj!thhhj:thM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj uubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj uubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj.uh]hstruct folio *folio}(hhhj0uhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj,uubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj(uubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjIuhjGuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjCuhM hjDuubah}(h]h ]h"]h$]h&]uh1jhj(uubeh}(h]h ]h"]h$]h&]uh1jhjCuhM hj%uubah}(h]h ]h"]h$]h&]uh1jhj uubj6)}(h**Description**h]jv)}(hjiuh]h Description}(hhhjkuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjguubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj uubj6)}(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.}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj uubj6)}(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.}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj uubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!folio_wait_private_2 (C function)c.folio_wait_private_2hNtauh1hhjShhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhMubh)}(hfolio_wait_private_2h]h)}(hfolio_wait_private_2h]hfolio_wait_private_2}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjuhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjuhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjuubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]h)}(hfolioh]hfolio}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjvmodnameN classnameNjijl)}jo]jr)}jejusbc.folio_wait_private_2asbuh1hhjuubj)}(h h]h }(hhhj8vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj= )}(hj@ h]h*}(hhhjFvhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjuubh)}(hfolioh]hfolio}(hhhjSvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubah}(h]h ]h"]h$]h&]jj uh1j hjuhhhjuhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjuhMubah}(h]juah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM!hjuhhubj)}(hhh]j6)}(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.}(hjvhj~vhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj{vhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jvj3jvj4uh1hhhhjShNhNubjl)}(h**Parameters** ``struct folio *folio`` The folio to wait on. **Description** Wait for PG_private_2 to be cleared on a folio.h](j6)}(h**Parameters**h]jv)}(hjvh]h Parameters}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjvubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j<)}(hjvh]hstruct folio *folio}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvubj)}(hhh]j6)}(hThe folio to wait on.h]hThe folio to wait on.}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubj6)}(h**Description**h]jv)}(hjvh]h Description}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvubj6)}(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.}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*folio_wait_private_2_killable (C function)c.folio_wait_private_2_killablehNtauh1hhjShhhNhNubh)}(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}(hhhj?whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;whhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM*ubj)}(h h]h }(hhhjNwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;whhhjMwhM*ubh)}(hfolio_wait_private_2_killableh]h)}(hfolio_wait_private_2_killableh]hfolio_wait_private_2_killable}(hhhj`whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\wubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;whhhjMwhM*ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj|whhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjxwubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxwubh)}(hhh]h)}(hfolioh]hfolio}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjwmodnameN classnameNjijl)}jo]jr)}jejbwsbc.folio_wait_private_2_killableasbuh1hhjxwubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxwubj= )}(hj@ h]h*}(hhhjwhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjxwubh)}(hfolioh]hfolio}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxwubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtwubah}(h]h ]h"]h$]h&]jj uh1j hj;whhhjMwhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7whhhjMwhM*ubah}(h]j2wah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM3hj4whhubj)}(hhh]j6)}(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.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM)hjwhhubah}(h]h ]h"]h$]h&]uh1jhj4whhhjMwhM*ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jxj3jxj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj"xh]h Parameters}(hhhj$xhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj xubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM-hjxubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j<)}(hjAxh]hstruct folio *folio}(hhhjCxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj?xubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM*hj;xubj)}(hhh]j6)}(hThe folio to wait on.h]hThe folio to wait on.}(hj\xhjZxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVxhM*hjWxubah}(h]h ]h"]h$]h&]uh1jhj;xubeh}(h]h ]h"]h$]h&]uh1jhjVxhM*hj8xubah}(h]h ]h"]h$]h&]uh1jhjxubj6)}(h**Description**h]jv)}(hj|xh]h Description}(hhhj~xhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzxubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjxubj6)}(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.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM,hjxubj6)}(h **Return**h]jv)}(hjxh]hReturn}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM/hjxubh bullet_list)}(hhh](h list_item)}(h0 if successful.h]j6)}(hjxh]h0 if successful.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM1hjxubah}(h]h ]h"]h$]h&]uh1jxhjxubjx)}(h)-EINTR if a fatal signal was encountered.h]j6)}(hjxh]h)-EINTR if a fatal signal was encountered.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM2hjxubah}(h]h ]h"]h$]h&]uh1jxhjxubeh}(h]h ]h"]h$]h&]bullet-uh1jxhjxhM1hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_end_writeback (C function)c.folio_end_writebackhNtauh1hhjShhhNhNubh)}(hhh](h)}(h.void folio_end_writeback (struct folio *folio)h]h)}(h-void folio_end_writeback(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMCubj)}(h h]h }(hhhj'yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhj&yhMCubh)}(hfolio_end_writebackh]h)}(hfolio_end_writebackh]hfolio_end_writeback}(hhhj9yhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5yubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhj&yhMCubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjUyhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjQyubj)}(h h]h }(hhhjbyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQyubh)}(hhh]h)}(hfolioh]hfolio}(hhhjsyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpyubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjuymodnameN classnameNjijl)}jo]jr)}jej;ysbc.folio_end_writebackasbuh1hhjQyubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQyubj= )}(hj@ h]h*}(hhhjyhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjQyubh)}(hfolioh]hfolio}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQyubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjMyubah}(h]h ]h"]h$]h&]jj uh1j hjyhhhj&yhMCubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhj&yhMCubah}(h]j yah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMIhj yhhubj)}(hhh]j6)}(hEnd writeback against a folio.h]hEnd writeback against a folio.}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMBhjyhhubah}(h]h ]h"]h$]h&]uh1jhj yhhhj&yhMCubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMFhjyubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjzh]hstruct folio *folio}(hhhjzhhhNhNubah}(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.chMChjzubj)}(hhh]j6)}(h The folio.h]h The folio.}(hj5zhj3zhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/zhMChj0zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj/zhMChjzubah}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h**Description**h]jv)}(hjUzh]h Description}(hhhjWzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSzubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMEhjyubj6)}(h+The folio must actually be under writeback.h]h+The folio must actually be under writeback.}(hjmzhjkzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMEhjyubj6)}(h **Context**h]jv)}(hj|zh]hContext}(hhhj~zhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzzubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMGhjyubj6)}(h0May be called from process or interrupt context.h]h0May be called from process or interrupt context.}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMGhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__folio_lock (C function)c.__folio_lockhNtauh1hhjShhhNhNubh)}(hhh](h)}(h'void __folio_lock (struct folio *folio)h]h)}(h&void __folio_lock(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMiubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMiubh)}(h __folio_lockh]h)}(h __folio_lockh]h __folio_lock}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjzhMiubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjzhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjzubj)}(h h]h }(hhhj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]h)}(hfolioh]hfolio}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj{modnameN classnameNjijl)}jo]jr)}jejzsbc.__folio_lockasbuh1hhjzubj)}(h h]h }(hhhj<{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj= )}(hj@ h]h*}(hhhjJ{hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjzubh)}(hfolioh]hfolio}(hhhjW{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjzubah}(h]h ]h"]h$]h&]jj uh1j hjzhhhjzhMiubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjzhMiubah}(h]jzah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMkhjzhhubj)}(hhh]j6)}(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.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhhj{hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMiubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j{j3j{j4uh1hhhhjShNhNubjl)}(h;**Parameters** ``struct folio *folio`` The folio to lockh](j6)}(h**Parameters**h]jv)}(hj{h]h Parameters}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMlhj{ubj)}(hhh]j)}(h)``struct folio *folio`` The folio to lockh](j)}(h``struct folio *folio``h]j<)}(hj{h]hstruct folio *folio}(hhhj{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.chMnhj{ubj)}(hhh]j6)}(hThe folio to lockh]hThe folio to lock}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMihj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMnhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!page_cache_next_miss (C function)c.page_cache_next_misshNtauh1hhjShhhNhNubh)}(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}(hhhj |hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj"|modnameN classnameNjijl)}jo]jr)}jepage_cache_next_misssbc.page_cache_next_missasbuh1hhj|hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjB|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjA|hMubh)}(hpage_cache_next_missh]h)}(hj>|h]hpage_cache_next_miss}(hhhjT|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|hhhjA|hMubj )}(hF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjo|hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjk|ubj)}(h h]h }(hhhj||hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk|ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj|modnameN classnameNjijl)}jo]j<|c.page_cache_next_missasbuh1hhjk|ubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk|ubj= )}(hj@ h]h*}(hhhj|hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjk|ubh)}(hmappingh]hmapping}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjg|ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj|modnameN classnameNjijl)}jo]j<|c.page_cache_next_missasbuh1hhj|ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hindexh]hindex}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjg|ubj )}(hunsigned long max_scanh](j)}(hunsignedh]hunsigned}(hhhj'}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#}ubj)}(h h]h }(hhhj5}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#}ubj)}(hlongh]hlong}(hhhjC}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#}ubj)}(h h]h }(hhhjQ}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#}ubh)}(hmax_scanh]hmax_scan}(hhhj_}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjg|ubeh}(h]h ]h"]h$]h&]jj uh1j hj|hhhjA|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhjA|hMubah}(h]j|ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|hhubj)}(hhh]j6)}(h$Find the next gap in the page cache.h]h$Find the next gap in the page cache.}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjA|hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j}j3j}j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj}h]h Parameters}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hL/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<)}(hj}h]hstruct address_space *mapping}(hhhj}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]j6)}(hMapping.h]hMapping.}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubj)}(h``pgoff_t index`` Index. h](j)}(h``pgoff_t index``h]j<)}(hj~h]h pgoff_t index}(hhhj~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]j6)}(hIndex.h]hIndex.}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj}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}(hhhj?~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.chMhj7~ubj)}(hhh]j6)}(hMaximum range to search.h]hMaximum range to search.}(hjX~hjV~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjR~hMhjS~ubah}(h]h ]h"]h$]h&]uh1jhj7~ubeh}(h]h ]h"]h$]h&]uh1jhjR~hMhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubj6)}(h**Description**h]jv)}(hjx~h]h Description}(hhhjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjv~ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj6)}(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.}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj6)}(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~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj6)}(h **Return**h]jv)}(hj~h]hReturn}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubj6)}(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.}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!page_cache_prev_miss (C function)c.page_cache_prev_misshNtauh1hhjShhhNhNubh)}(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}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj~modnameN classnameNjijl)}jo]jr)}jepage_cache_prev_misssbc.page_cache_prev_missasbuh1hhj~hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubh)}(hpage_cache_prev_missh]h)}(hjh]hpage_cache_prev_miss}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhjhMubj )}(hF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjEhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjAubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjemodnameN classnameNjijl)}jo]jc.page_cache_prev_missasbuh1hhjAubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjAubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.page_cache_prev_missasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(hunsigned long max_scanh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmax_scanh]hmax_scan}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubeh}(h]h ]h"]h$]h&]jj uh1j hj~hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhMubah}(h]j~ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj~hhubj)}(hhh]j6)}(h(Find the previous gap in the page cache.h]h(Find the previous gap in the page cache.}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jxj3jxj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjhhhNhNubah}(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]j6)}(hMapping.h]hMapping.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``pgoff_t index`` Index. h](j)}(h``pgoff_t index``h]j<)}(hjڀh]h pgoff_t index}(hhhj܀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]j6)}(hIndex.h]hIndex.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԀubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``unsigned long max_scan`` Maximum range to search. h](j)}(h``unsigned long max_scan``h]j<)}(hjh]hunsigned long max_scan}(hhhjhhhNhNubah}(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]j6)}(hMaximum range to search.h]hMaximum range to search.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hjNh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj6)}(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.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj6)}(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.}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ __filemap_get_folio (C function)c.__filemap_get_foliohNtauh1hhjShhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjɁhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjŁhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMIubj)}(h h]h }(hhhjׁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŁhhhjցhMIubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je__filemap_get_foliosbc.__filemap_get_folioasbuh1hhjŁhhhjցhMIubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŁhhhjցhMIubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjŁhhhjցhMIubh)}(h__filemap_get_folioh]h)}(hjh]h__filemap_get_folio}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjŁhhhjցhMIubj )}(hJ(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj?ubj)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjcmodnameN classnameNjijl)}jo]jc.__filemap_get_folioasbuh1hhj?ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj?ubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.__filemap_get_folioasbuh1hhjubj)}(h h]h }(hhhjԂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubj )}(hfgf_t fgp_flagsh](h)}(hhh]h)}(hfgf_th]hfgf_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.__filemap_get_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h fgp_flagsh]h fgp_flags}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjHmodnameN classnameNjijl)}jo]jc.__filemap_get_folioasbuh1hhj?ubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hgfph]hgfp}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubeh}(h]h ]h"]h$]h&]jj uh1j hjŁhhhjցhMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjցhMIubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhjhhubj)}(hhh]j6)}(h$Find and get a reference to a folio.h]h$Find and get a reference to a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMHhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjցhMIubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMLhjubj)}(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}(hhhjhhhNhNubah}(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.chMIhj؃ubj)}(hhh]j6)}(hThe address_space to search.h]hThe address_space to search.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhj؃ubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjՃubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j<)}(hjh]h pgoff_t index}(hhhjhhhNhNubah}(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]j6)}(hThe page index.h]hThe page index.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMJhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMJhjՃubj)}(hD``fgf_t fgp_flags`` ``FGP`` flags modify how the folio is returned. h](j)}(h``fgf_t fgp_flags``h]j<)}(hjPh]hfgf_t fgp_flags}(hhhjRhhhNhNubah}(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.chMKhjJubj)}(hhh]j6)}(h/``FGP`` flags modify how the folio is returned.h](j<)}(h``FGP``h]hFGP}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjiubh( flags modify how the folio is returned.}(h( flags modify how the folio is returned.hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjehMKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMKhjՃubj)}(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}(hhhjhhhNhNubah}(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.chMLhjubj)}(hhh]j6)}(h=Memory allocation flags to use if ``FGP_CREAT`` is specified.h](h"Memory allocation flags to use if }(h"Memory allocation flags to use if hjhhhNhNubj<)}(h ``FGP_CREAT``h]h FGP_CREAT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh is specified.}(h is specified.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjՃubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMNhjubj6)}(h9Looks up the page cache entry at **mapping** & **index**.h](h!Looks up the page cache entry at }(h!Looks up the page cache entry at hjhhhNhNubjv)}(h **mapping**h]hmapping}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h **index**h]hindex}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMNhjubj6)}(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 }(hIf hj2hhhNhNubj<)}(h ``FGP_LOCK``h]hFGP_LOCK}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh or }(h or hj2hhhNhNubj<)}(h ``FGP_CREAT``h]h FGP_CREAT}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh7 are specified then the function may sleep even if the }(h7 are specified then the function may sleep even if the hj2hhhNhNubj<)}(h``GFP``h]hGFP}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh flags specified for }(h flags specified for hj2hhhNhNubj<)}(h ``FGP_CREAT``h]h FGP_CREAT}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh are atomic.}(h are atomic.hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMPhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMShjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMUhjubj6)}(h*The found folio or an ERR_PTR() otherwise.h]h*The found folio or an ERR_PTR() otherwise.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_get_folios (C function)c.filemap_get_folioshNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMRubh)}(hfilemap_get_foliosh]h)}(hfilemap_get_foliosh]hfilemap_get_folios}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMRubj )}(hX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj!hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjAmodnameN classnameNjijl)}jo]jr)}jejsbc.filemap_get_foliosasbuh1hhjubj)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjmhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j[c.filemap_get_foliosasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj†hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hstarth]hstart}(hhhjφhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j[c.filemap_get_foliosasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct folio_batch *fbatchh](j.)}(hj1h]hstruct}(hhhj0hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj,ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjPmodnameN classnameNjijl)}jo]j[c.filemap_get_foliosasbuh1hhj,ubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj= )}(hj@ h]h*}(hhhjzhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj,ubh)}(hfbatchh]hfbatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhj܅hhhjhMRubah}(h]jׅah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM^hjمhhubj)}(hhh]j6)}(hGet a batch of foliosh]hGet a batch of folios}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjمhhhjhMRubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jʇj3jʇj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjԇh]h Parameters}(hhhjևhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj҇ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMUhj·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}(hhhjhhhNhNubah}(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.chMRhjubj)}(hhh]j6)}(hThe address_space to searchh]hThe address_space to search}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMRhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j<)}(hj,h]hpgoff_t *start}(hhhj.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.chMShj&ubj)}(hhh]j6)}(hThe starting page indexh]hThe starting page index}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhMShjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMShjubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjeh]h pgoff_t end}(hhhjghhhNhNubah}(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.chMThj_ubj)}(hhh]j6)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjzhMThj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMThjubj)}(h2``struct folio_batch *fbatch`` The batch to fill. h](j)}(h``struct folio_batch *fbatch``h]j<)}(hjh]hstruct folio_batch *fbatch}(hhhjhhhNhNubah}(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.chMUhjubj)}(hhh]j6)}(hThe batch to fill.h]hThe batch to fill.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubeh}(h]h ]h"]h$]h&]uh1jhj·ubj6)}(h**Description**h]jv)}(hjوh]h Description}(hhhjۈhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj׈ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhj·ubj6)}(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 }(hISearch for and return a batch of folios in the mapping starting at index hjhhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and up to index }(h and up to index hjhhhNhNubjv)}(h**end**h]hend}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh* (inclusive). The folios are returned in }(h* (inclusive). The folios are returned in hjhhhNhNubjv)}(h **fbatch**h]hfbatch}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh" with an elevated reference count.}(h" with an elevated reference count.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhj·ubj6)}(h **Return**h]jv)}(hj:h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM[hj·ubj6)}(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 }(h6The number of folios which were found. We also update hjPhhhNhNubjv)}(h **start**h]hstart}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubh+ to index the next folio for the traversal.}(h+ to index the next folio for the traversal.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM[hj·ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&filemap_get_folios_contig (C function)c.filemap_get_folios_contighNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMgubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMgubh)}(hfilemap_get_folios_contigh]h)}(hfilemap_get_folios_contigh]hfilemap_get_folios_contig}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMgubj )}(hX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjЉhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj̉ubj)}(h h]h }(hhhj݉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.filemap_get_folios_contigasbuh1hhj̉ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj̉ubh)}(hmappingh]hmapping}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̉ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjȉubj )}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjGmodnameN classnameNjijl)}jo]j c.filemap_get_folios_contigasbuh1hhj>ubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj= )}(hj@ h]h*}(hhhjqhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj>ubh)}(hstarth]hstart}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjȉubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.filemap_get_folios_contigasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhjƊhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjȉubj )}(hstruct folio_batch *fbatchh](j.)}(hj1h]hstruct}(hhhjߊhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjۊubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۊubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.filemap_get_folios_contigasbuh1hhjۊubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۊubj= )}(hj@ h]h*}(hhhj)hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjۊubh)}(hfbatchh]hfbatch}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۊubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjȉubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMgubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMgubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMshjhhubj)}(hhh]j6)}(h Get a batch of contiguous foliosh]h Get a batch of contiguous folios}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMfhj^hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMgubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMjhj}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}(hhhjhhhNhNubah}(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]j6)}(hThe address_space to searchh]hThe address_space to search}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j<)}(hjۋh]hpgoff_t *start}(hhhj݋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.chMhhjՋubj)}(hhh]j6)}(hThe starting page indexh]hThe starting page index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjՋubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjh]h pgoff_t end}(hhhjhhhNhNubah}(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.chMihjubj)}(hhh]j6)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMihj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMihjubj)}(h1``struct folio_batch *fbatch`` The batch to fill h](j)}(h``struct folio_batch *fbatch``h]j<)}(hjMh]hstruct folio_batch *fbatch}(hhhjOhhhNhNubah}(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.chMjhjGubj)}(hhh]j6)}(hThe batch to fillh]hThe batch to fill}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMjhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMjhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMlhj}ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMlhj}ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMphj}ubj6)}(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 }(h(The number of folios found. Also update hjŌhhhNhNubjv)}(h **start**h]hstart}(hhhjΌhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjŌubh2 to be positioned for traversal of the next folio.}(h2 to be positioned for traversal of the next folio.hjŌhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMphj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#filemap_get_folios_tag (C function)c.filemap_get_folios_taghNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfilemap_get_folios_tagh]h)}(hfilemap_get_folios_tagh]hfilemap_get_folios_tag}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(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.)}(hj1h]hstruct}(hhhjEhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjAubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjemodnameN classnameNjijl)}jo]jr)}jej+sbc.filemap_get_folios_tagasbuh1hhjAubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjAubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_get_folios_tagasbuh1hhjubj)}(h h]h }(hhhj؍hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_get_folios_tagasbuh1hhjubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(h xa_mark_t tagh](h)}(hhh]h)}(h xa_mark_th]h xa_mark_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjYmodnameN classnameNjijl)}jo]jc.filemap_get_folios_tagasbuh1hhjPubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(htagh]htag}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubj )}(hstruct folio_batch *fbatchh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_get_folios_tagasbuh1hhjubj)}(h h]h }(hhhj؎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfbatchh]hfbatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubj)}(hhh]j6)}(h&Get a batch of folios matching **tag**h](hGet a batch of folios matching }(hGet a batch of folios matching hjhhhNhNubjv)}(h**tag**h]htag}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jEj3jEj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjOh]h Parameters}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubj)}(hhh](j)}(h>``struct address_space *mapping`` The address_space to search h](j)}(h!``struct address_space *mapping``h]j<)}(hjnh]hstruct address_space *mapping}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhubj)}(hhh]j6)}(hThe address_space to searchh]hThe address_space to search}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h+``pgoff_t *start`` The starting page index h](j)}(h``pgoff_t *start``h]j<)}(hjh]hpgoff_t *start}(hhhjhhhNhNubah}(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]j6)}(hThe starting page indexh]hThe starting page index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h1``pgoff_t end`` The final page index (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjh]h pgoff_t end}(hhhjhhhNhNubah}(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]j6)}(h The final page index (inclusive)h]h The final page index (inclusive)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڏubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h ``xa_mark_t tag`` The tag index h](j)}(h``xa_mark_t tag``h]j<)}(hjh]h xa_mark_t tag}(hhhjhhhNhNubah}(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]j6)}(h The tag indexh]h The tag index}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjeubj)}(h1``struct folio_batch *fbatch`` The batch to fill h](j)}(h``struct folio_batch *fbatch``h]j<)}(hjRh]hstruct folio_batch *fbatch}(hhhjThhhNhNubah}(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.chMhjLubj)}(hhh]j6)}(hThe batch to fillh]hThe batch to fill}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubj6)}(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 }(h!The first folio may start before hjhhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh; if it does, it will contain }(h; if it does, it will contain hjhhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh%. The final folio may extend beyond }(h%. The final folio may extend beyond hjhhhNhNubjv)}(h**end**h]hend}(hhhjҐhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh; if it does, it will contain }(h; if it does, it will contain hjhhhNhNubjv)}(h**end**h]hend}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX*. 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 }(hX*. 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 hjhhhNhNubjv)}(h**tag**h]htag}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubj6)}(hXThe number of folios found. Also update **start** to index the next folio for traversal.h](h(The number of folios found. Also update }(h(The number of folios found. Also update hj)hhhNhNubjv)}(h **start**h]hstart}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh' to index the next folio for traversal.}(h' to index the next folio for traversal.hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_read (C function)c.filemap_readhNtauh1hhjShhhNhNubh)}(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}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}je filemap_readsbc.filemap_readasbuh1hhjhhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhM ubh)}(h filemap_readh]h)}(hjh]h filemap_read}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhjhM ubj )}(hA(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)h](j )}(hstruct kiocb *iocbh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjˑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hkiocbh]hkiocb}(hhhjܑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjّubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjޑmodnameN classnameNjijl)}jo]jc.filemap_readasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hiocbh]hiocb}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct iov_iter *iterh](j.)}(hj1h]hstruct}(hhhj.hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj*ubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjNmodnameN classnameNjijl)}jo]jc.filemap_readasbuh1hhj*ubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj= )}(hj@ h]h*}(hhhjxhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj*ubh)}(hiterh]hiter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hssize_t already_readh](h)}(hhh]h)}(hssize_th]hssize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_readasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h already_readh]h already_read}(hhhj͒hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjhM ubah}(h]j_ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjahhubj)}(hhh]j6)}(hRead data from the page cache.h]hRead data from the page cache.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj)}(hhh](j)}(h)``struct kiocb *iocb`` The iocb to read. h](j)}(h``struct kiocb *iocb``h]j<)}(hj9h]hstruct kiocb *iocb}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj3ubj)}(hhh]j6)}(hThe iocb to read.h]hThe iocb to read.}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhM hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM hj0ubj)}(h4``struct iov_iter *iter`` Destination for the data. h](j)}(h``struct iov_iter *iter``h]j<)}(hjrh]hstruct iov_iter *iter}(hhhjthhhNhNubah}(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]j6)}(hDestination for the data.h]hDestination for the data.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hj0ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h+Number of bytes already read by the caller.h]h+Number of bytes already read by the caller.}(hjƓhjēhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj0ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#generic_file_read_iter (C function)c.generic_file_read_iterhNtauh1hhjShhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjWmodnameN classnameNjijl)}jo]jr)}jegeneric_file_read_itersbc.generic_file_read_iterasbuh1hhjNhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhjvhM ubh)}(hgeneric_file_read_iterh]h)}(hjsh]hgeneric_file_read_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhjvhM ubj )}(h+(struct kiocb *iocb, struct iov_iter *iter)h](j )}(hstruct kiocb *iocbh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hkiocbh]hkiocb}(hhhj”hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjĔmodnameN classnameNjijl)}jo]jqc.generic_file_read_iterasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hiocbh]hiocb}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct iov_iter *iterh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj4modnameN classnameNjijl)}jo]jqc.generic_file_read_iterasbuh1hhjubj)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj^hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hiterh]hiter}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjNhhhjvhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjvhM ubah}(h]jEah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjGhhubj)}(hhh]j6)}(hgeneric filesystem read routineh]hgeneric filesystem read routine}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjvhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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<)}(hjוh]hstruct kiocb *iocb}(hhhjٕ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]j6)}(hkernel I/O control blockh]hkernel I/O control block}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hdestination for the data readh]hdestination for the data read}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM hjΕubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjKh]h Description}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubjx)}(hhh](jx)}(h.number of bytes copied, even for partial readsh]j6)}(hjh]h.number of bytes copied, even for partial reads}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h;negative error code (or 0 if IOCB_NOIO) if nothing was readh]j6)}(hjÖh]h;negative error code (or 0 if IOCB_NOIO) if nothing was read}(hjÖhjŖhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ filemap_splice_read (C function)c.filemap_splice_readhNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefilemap_splice_readsbc.filemap_splice_readasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM ubh)}(hfilemap_splice_readh]h)}(hj h]hfilemap_splice_read}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(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.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(hfileh]hfile}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jc.filemap_splice_readasbuh1hhjMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjMubh)}(hinh]hin}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubj )}(h loff_t *pposh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjėhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjƗmodnameN classnameNjijl)}jo]jc.filemap_splice_readasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpposh]hppos}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubj )}(hstruct pipe_inode_info *pipeh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpipe_inode_infoh]hpipe_inode_info}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jc.filemap_splice_readasbuh1hhjubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj`hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpipeh]hpipe}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubj )}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_splice_readasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlenh]hlen}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubj )}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjΘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʘubj)}(h h]h }(hhhjܘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʘubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʘubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʘubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʘubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj#hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj#hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM/ hjhhubj)}(hhh]j6)}(h/Splice data from a file's pagecache into a pipeh]h1Splice data from a file’s pagecache into a pipe}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hj.hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj#hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM! hjMubj)}(hhh](j)}(h*``struct file *in`` The file to read from h](j)}(h``struct file *in``h]j<)}(hjrh]hstruct file *in}(hhhjthhhNhNubah}(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]j6)}(hThe file to read fromh]hThe file to read from}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h)Pointer to the file position to read fromh]h)Pointer to the file position to read from}(hjƙhjęhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hThe pipe to splice intoh]hThe pipe to splice into}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjޙubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubj)}(h$``size_t len`` The amount to splice h](j)}(h``size_t len``h]j<)}(hjh]h size_t len}(hhhjhhhNhNubah}(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]j6)}(hThe amount to spliceh]hThe amount to splice}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hM! hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM! hjiubj)}(h,``unsigned int flags`` The SPLICE_F_* flags h](j)}(h``unsigned int flags``h]j<)}(hjVh]hunsigned int flags}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM" hjPubj)}(hhh]j6)}(hThe SPLICE_F_* flagsh]hThe SPLICE_F_* flags}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhM" hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM" hjiubeh}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM$ hjMubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM$ hjMubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM( hjMubj6)}(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 }(h:On success, the number of bytes read will be returned and hjΚhhhNhNubjv)}(h ***ppos**h]h*ppos}(hhhjךhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjΚ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.}(hX4 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&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM( hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfilemap_fault (C function)c.filemap_faulthNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je filemap_faultsbc.filemap_faultasbuh1hhj hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM ubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj5hM ubh)}(h filemap_faulth]h)}(hj2h]h filemap_fault}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj5hM ubj )}(h(struct vm_fault *vmf)h]j )}(hstruct vm_fault *vmfh](j.)}(hj1h]hstruct}(hhhjchhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj_ubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j0c.filemap_faultasbuh1hhj_ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj_ubh)}(hvmfh]hvmf}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubah}(h]h ]h"]h$]h&]jj uh1j hj hhhj5hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj5hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubj)}(hhh]j6)}(h)read in file data for page fault handlingh]h)read in file data for page fault handling}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhj(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]j6)}(h/struct vm_fault containing details of the faulth]h/struct vm_fault containing details of the fault}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(h,vma->vm_mm->mmap_lock must be held on entry.h]h,vma->vm_mm->mmap_lock must be held on entry.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(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ĜhjœhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(h **Return**h]jv)}(hjӜh]hReturn}(hhhj՜hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjќubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubj6)}(h"bitwise-OR of ``VM_FAULT_`` codes.h](hbitwise-OR of }(hbitwise-OR of hjhhhNhNubj<)}(h ``VM_FAULT_``h]h VM_FAULT_}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh codes.}(h codes.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌread_cache_folio (C function)c.read_cache_foliohNtauh1hhjShhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj,hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj9hMubh)}(hhh]h)}(hfolioh]hfolio}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjMmodnameN classnameNjijl)}jo]jr)}jeread_cache_foliosbc.read_cache_folioasbuh1hhj(hhhj9hMubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj9hMubj= )}(hj@ h]h*}(hhhjzhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj(hhhj9hMubh)}(hread_cache_folioh]h)}(hjih]hread_cache_folio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj9hMubj )}(hR(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjĝhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjƝmodnameN classnameNjijl)}jo]jgc.read_cache_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jgc.read_cache_folioasbuh1hhjubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hfiller_t fillerh](h)}(hhh]h)}(hfiller_th]hfiller_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjcmodnameN classnameNjijl)}jo]jgc.read_cache_folioasbuh1hhjZubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hfillerh]hfiller}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfileh]hfile}(hhhjĞhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjƞmodnameN classnameNjijl)}jo]jgc.read_cache_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfileh]hfile}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj(hhhj9hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj9hMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj!hhubj)}(hhh]j6)}(h(Read into page cache, fill it if needed.h]h(Read into page cache, fill it if needed.}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj9hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j@j3j@j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj)}(hhh](j)}(hB``struct address_space *mapping`` The address_space to read from. h](j)}(h!``struct address_space *mapping``h]j<)}(hjih]hstruct address_space *mapping}(hhhjkhhhNhNubah}(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]j6)}(hThe address_space to read from.h]hThe address_space to read from.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubj)}(h%``pgoff_t index`` The index to read. h](j)}(h``pgoff_t index``h]j<)}(hjh]h pgoff_t index}(hhhjhhhNhNubah}(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]j6)}(hThe index to read.h]hThe index to read.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubj)}(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}(hhhjݟ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]j6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj՟ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h7Passed to filler function, may be NULL if not required.h]h7Passed to filler function, may be NULL if not required.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubj6)}(h**Description**h]jv)}(hjOh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(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 }(hTRead one page into the page cache. If it succeeds, the folio returned will contain hjehhhNhNubjv)}(h **index**h]hindex}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubh0, but it may not be the first page of the folio.}(h0, but it may not be the first page of the folio.hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(h8May sleep. Expects mapping->invalidate_lock to be held.h]h8May sleep. Expects mapping->invalidate_lock to be held.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubj6)}(h3An uptodate folio on success, ERR_PTR() on failure.h]h3An uptodate folio on success, ERR_PTR() on failure.}(hjؠhj֠hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#mapping_read_folio_gfp (C function)c.mapping_read_folio_gfphNtauh1hhjShhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hfolioh]hfolio}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj&modnameN classnameNjijl)}jo]jr)}jemapping_read_folio_gfpsbc.mapping_read_folio_gfpasbuh1hhjhhhjhMubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjShhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hmapping_read_folio_gfph]h)}(hjBh]hmapping_read_folio_gfp}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj{ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j@c.mapping_read_folio_gfpasbuh1hhj{ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj= )}(hj@ h]h*}(hhhjɡhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj{ubh)}(hmappingh]hmapping}(hhhj֡hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjwubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j@c.mapping_read_folio_gfpasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjwubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj<modnameN classnameNjijl)}jo]j@c.mapping_read_folio_gfpasbuh1hhj3ubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hgfph]hgfp}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjwubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubj)}(hhh]j6)}(h7Read into page cache, using specified allocation flags.h]h7Read into page cache, using specified allocation flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jj3jj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj)}(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}(hhhjԢ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]j6)}(h The address_space for the folio.h]h The address_space for the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̢ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɢ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}(hhhj 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.chMhjubj)}(hhh]j6)}(h0The index that the allocated folio will contain.h]h0The index that the allocated folio will contain.}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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<)}(hjDh]h gfp_t gfp}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj>ubj)}(hhh]j6)}(h.The page allocator flags to use if allocating.h]h.The page allocator flags to use if allocating.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjɢubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj}ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj6)}(hAThe function expects mapping->invalidate_lock to be already held.h]hAThe function expects mapping->invalidate_lock to be already held.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj6)}(h **Return**h]jv)}(hjģh]hReturn}(hhhjƣhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj£ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubj6)}(h0Uptodate folio on success, ERR_PTR() on failure.h]h0Uptodate folio on success, ERR_PTR() on failure.}(hjܣhjڣhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ read_cache_page_gfp (C function)c.read_cache_page_gfphNtauh1hhjShhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj 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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj*modnameN classnameNjijl)}jo]jr)}jeread_cache_page_gfpsbc.read_cache_page_gfpasbuh1hhjhhhjhMubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjWhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hread_cache_page_gfph]h)}(hjFh]hread_cache_page_gfp}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jDc.read_cache_page_gfpasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjͤhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjڤhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jDc.read_cache_page_gfpasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{ubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj@modnameN classnameNjijl)}jo]jDc.read_cache_page_gfpasbuh1hhj7ubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hgfph]hgfp}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM+hjhhubj)}(hhh]j6)}(hinvalidate_lock to be already held. **Return** up to date page on success, ERR_PTR() on failure.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM!hjubj)}(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}(hhhjإ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]j6)}(hthe page's address_spaceh]hthe page’s address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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}(hhhjhhhNhNubah}(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]j6)}(hthe page indexh]hthe page index}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$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}(hhhjJhhhNhNubah}(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]j6)}(h-the page allocator flags to use if allocatingh]h-the page allocator flags to use if allocating}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hM hjͥubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM"hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM"hjubj6)}(h7If the page does not get brought uptodate, return -EIO.h]h7If the page does not get brought uptodate, return -EIO.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM%hjubj6)}(hAThe function expects mapping->invalidate_lock to be already held.h]hAThe function expects mapping->invalidate_lock to be already held.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM'hjubj6)}(h **Return**h]jv)}(hjȦh]hReturn}(hhhjʦhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƦubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM)hjubj6)}(h1up to date page on success, ERR_PTR() on failure.h]h1up to date page on success, ERR_PTR() on failure.}(hjhjަhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM)hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&__generic_file_write_iter (C function)c.__generic_file_write_iterhNtauh1hhjShhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je__generic_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 }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hMubh)}(h__generic_file_write_iterh]h)}(hj.h]h__generic_file_write_iter}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj1hMubj )}(h+(struct kiocb *iocb, struct iov_iter *from)h](j )}(hstruct kiocb *iocbh](j.)}(hj1h]hstruct}(hhhj_hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj[ubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hkiocbh]hkiocb}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j,c.__generic_file_write_iterasbuh1hhj[ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj[ubh)}(hiocbh]hiocb}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubj )}(hstruct iov_iter *fromh](j.)}(hj1h]hstruct}(hhhjϧhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj˧ubj)}(h h]h }(hhhjܧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˧ubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j,c.__generic_file_write_iterasbuh1hhj˧ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˧ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj˧ubh)}(hfromh]hfrom}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˧ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubj)}(hhh]j6)}(hwrite data to a fileh]hwrite data to a file}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjNhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhjShNhNubjl)}(hXB**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](j6)}(h**Parameters**h]jv)}(hjsh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj)}(hhh](j)}(h?``struct kiocb *iocb`` IO state structure (file, offset, etc.) h](j)}(h``struct kiocb *iocb``h]j<)}(hjh]hstruct kiocb *iocb}(hhhjhhhNhNubah}(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]j6)}(h'IO state structure (file, offset, etc.)h]h'IO state structure (file, offset, etc.)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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}(hhhjͨ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]j6)}(hiov_iter with data to writeh]hiov_iter with data to write}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjŨubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj6)}(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-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj6)}(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 }(hThis function does hj:hhhNhNubjH)}(h*not*h]hnot}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1jHhj:ubh take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_rwsem.}(h take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_rwsem.hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubj6)}(h **Return**h]jv)}(hj_h]hReturn}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjmubjx)}(hhh](jx)}(h2number of bytes written, even for truncated writesh]j6)}(hjzh]h2number of bytes written, even for truncated writes}(hjzhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjxubah}(h]h ]h"]h$]h&]uh1jxhjuubjx)}(h6negative error code if no data has been written at allh]j6)}(hjh]h6negative error code if no data has been written at all}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjuubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$generic_file_write_iter (C function)c.generic_file_write_iterhNtauh1hhjShhhNhNubh)}(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}(hhhjѩhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΩubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjөmodnameN classnameNjijl)}jo]jr)}jegeneric_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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʩhhhjhMubh)}(hgeneric_file_write_iterh]h)}(hjh]hgeneric_file_write_iter}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hkiocbh]hkiocb}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj@modnameN classnameNjijl)}jo]jc.generic_file_write_iterasbuh1hhjubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hiocbh]hiocb}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct iov_iter *fromh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hiov_iterh]hiov_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.generic_file_write_iterasbuh1hhjubj)}(h h]h }(hhhj̪hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjڪhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfromh]hfrom}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjʩhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƩhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjéhhubj)}(hhh]j6)}(hwrite data to a fileh]hwrite data to a file}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjéhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j*j3j*j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj4h]h Parameters}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hL/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<)}(hjSh]hstruct kiocb *iocb}(hhhjUhhhNhNubah}(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.chMhjMubj)}(hhh]j6)}(hIO state structureh]hIO state structure}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hiov_iter with data to writeh]hiov_iter with data to write}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubj6)}(h**Description**h]jv)}(hjǫh]h Description}(hhhjɫhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjūubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj.ubj6)}(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߫hjݫhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj.ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj.ubjx)}(hhh](jx)}(hjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous writeh]j6)}(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}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h2number of bytes written, even for truncated writesh]j6)}(hj"h]h2number of bytes written, even for truncated writes}(hj"hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMhj ubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"filemap_release_folio (C function)c.filemap_release_foliohNtauh1hhjShhhNhNubh)}(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)}(hj7h]hbool}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM3ubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjkhM3ubh)}(hfilemap_release_folioh]h)}(hfilemap_release_folioh]hfilemap_release_folio}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjkhM3ubj )}(h (struct folio *folio, gfp_t gfp)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.filemap_release_folioasbuh1hhjubj)}(h h]h }(hhhjجhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jԬc.filemap_release_folioasbuh1hhjubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjZhhhjkhM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjkhM3ubah}(h]jQah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMBhjShhubj)}(hhh]j6)}(h(Release fs-specific metadata on a folio.h]h(Release fs-specific metadata on a folio.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM2hjchhubah}(h]h ]h"]h$]h&]uh1jhjShhhjkhM3ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM6hjubj)}(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}(hhhjhhhNhNubah}(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.chM3hjubj)}(hhh]j6)}(h-The folio which the kernel is trying to free.h]h-The folio which the kernel is trying to free.}(hj­hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(h6``gfp_t gfp`` Memory allocation flags (and I/O mode). h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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.chM4hjڭubj)}(hhh]j6)}(h'Memory allocation flags (and I/O mode).h]h'Memory allocation flags (and I/O mode).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjڭubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM6hjubj6)}(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).}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM6hjubj6)}(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.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM9hjubj6)}(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 }(hThe hjOhhhNhNubjv)}(h**gfp**h]hgfp}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubh 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 argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_RECLAIM & __GFP_FS).hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM<hjubj6)}(h **Return**h]jv)}(hjth]hReturn}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM@hjubj6)}(h<``true`` if the release was successful, otherwise ``false``.h](j<)}(h``true``h]htrue}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh* if the release was successful, otherwise }(h* if the release was successful, otherwise hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%filemap_invalidate_inode (C function)c.filemap_invalidate_inodehNtauh1hhjShhhNhNubh)}(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}(hhhjڮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֮hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMTubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֮hhhjhMTubh)}(hfilemap_invalidate_inodeh]h)}(hfilemap_invalidate_inodeh]hfilemap_invalidate_inode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj֮hhhjhMTubj )}(h;(struct inode *inode, bool flush, loff_t start, loff_t end)h](j )}(hstruct inode *inodeh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hinodeh]hinode}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj7modnameN classnameNjijl)}jo]jr)}jejsbc.filemap_invalidate_inodeasbuh1hhjubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjchhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hinodeh]hinode}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h bool flushh](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflushh]hflush}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h loff_t starth](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj¯modnameN classnameNjijl)}jo]jQc.filemap_invalidate_inodeasbuh1hhjubj)}(h h]h }(hhhjޯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h loff_t endh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jQc.filemap_invalidate_inodeasbuh1hhjubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj֮hhhjhMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjҮhhhjhMTubah}(h]jͮah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chM_hjϮhhubj)}(hhh]j6)}(h>Invalidate/forcibly write back a range of an inode's pagecacheh]h@Invalidate/forcibly write back a range of an inode’s pagecache}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMShj\hhubah}(h]h ]h"]h$]h&]uh1jhjϮhhhjhMTubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhjShNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhj{ubj)}(hhh](j)}(h+``struct inode *inode`` The inode to flush h](j)}(h``struct inode *inode``h]j<)}(hjh]hstruct inode *inode}(hhhjhhhNhNubah}(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]j6)}(hThe inode to flushh]hThe inode to flush}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h@``bool flush`` Set to write back rather than simply invalidate. h](j)}(h``bool flush``h]j<)}(hjٰh]h bool flush}(hhhj۰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]j6)}(h0Set to write back rather than simply invalidate.h]h0Set to write back rather than simply invalidate.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjӰubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(h)``loff_t start`` First byte to in range. h](j)}(h``loff_t start``h]j<)}(hjh]h loff_t start}(hhhjhhhNhNubah}(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.chMVhj ubj)}(hhh]j6)}(hFirst byte to in range.h]hFirst byte to in range.}(hj-hj+hhhNhNubah}(h][h ]h"]h$]h&]uh1j5hj'hMVhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMVhjubj)}(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<)}(hjKh]h loff_t end}(hhhjMhhhNhNubah}(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.chMXhjEubj)}(hhh]j6)}(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.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMWhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMXhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMZhj{ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.chMZhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjShhhNhNubeh}(h]filemapah ]h"]filemapah$]h&]uh1hhjShhhhhK;ubh)}(hhh](h)}(h Readaheadh]h Readahead}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKAubj6)}(hXBReadahead is used to read content into the page cache before it is explicitly requested by the application. Readahead only ever attempts to read folios that are not yet in the page cache. If a folio is present but not up-to-date, readahead will not try to read it. In that case a simple ->read_folio() will be requested.h]hXBReadahead is used to read content into the page cache before it is explicitly requested by the application. Readahead only ever attempts to read folios that are not yet in the page cache. If a folio is present but not up-to-date, readahead will not try to read it. In that case a simple ->read_folio() will be requested.}(hjαhj̱hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK hjhhubj6)}(hXsReadahead is triggered when an application read request (whether a system call or a page fault) finds that the requested folio is not in the page cache, or that it is in the page cache and has the readahead flag set. This flag indicates that the folio was read as part of a previous readahead request and now that it has been accessed, it is time for the next readahead.h]hXsReadahead is triggered when an application read request (whether a system call or a page fault) finds that the requested folio is not in the page cache, or that it is in the page cache and has the readahead flag set. This flag indicates that the folio was read as part of a previous readahead request and now that it has been accessed, it is time for the next readahead.}(hjݱhj۱hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKhjhhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKhjhhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK#hjhhubj6)}(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.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK'hjhhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK+hjhhubj6)}(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.}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK1hjhhubj6)}(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.}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKreadahead() 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.}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKLhjhhubj6)}(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:}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKThjhhubjx)}(hhh](jx)}(hnot calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested. h]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKXhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hhfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or h]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chK\hjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(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 }(hThose folios not in the final hjhhhNhNubj<)}(h``async_size``h]h async_size}(hhhjhhhNhNubah}(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 }(hX  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}(hhhjhhhNhNubah}(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.}(hX 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&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.chKehjhhubh)}(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}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hKubh)}(hpage_cache_ra_unboundedh]h)}(hpage_cache_ra_unboundedh]hpage_cache_ra_unbounded}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj@hKubj )}(hY(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)h](j )}(hstruct readahead_control *ractlh](j.)}(hj1h]hstruct}(hhhjohhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjkubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejUsbc.page_cache_ra_unboundedasbuh1hhjkubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjkubh)}(hractlh]hractl}(hhhjȳhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgubj )}(hunsigned long nr_to_readh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݳubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݳubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݳubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݳubh)}(h nr_to_readh]h nr_to_read}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݳubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgubj )}(hunsigned long lookahead_sizeh](j)}(hunsignedh]hunsigned}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hlongh]hlong}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hlookahead_sizeh]hlookahead_size}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgubeh}(h]h ]h"]h$]h&]jj uh1j hj.hhhj@hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj@hKubah}(h]j%ah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhj'hhubj)}(hhh]j6)}(hStart unchecked readahead.h]hStart unchecked readahead.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/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<)}(hjִh]hstruct readahead_control *ractl}(hhhjش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:70: ./mm/readahead.chKhjдubj)}(hhh]j6)}(hReadahead control.h]hReadahead control.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjдubeh}(h]h ]h"]h$]h&]uh1jhjhKhjʹubj)}(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhj ubj)}(hhh]j6)}(hThe number of pages to read.h]hThe number of pages to read.}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjʹubj)}(hD``unsigned long lookahead_size`` Where to start the next readahead. h](j)}(h ``unsigned long lookahead_size``h]j<)}(hjHh]hunsigned long lookahead_size}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjBubj)}(hhh]j6)}(h"Where to start the next readahead.h]h"Where to start the next readahead.}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKhjʹubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubj6)}(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.}(hjµhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hreadahead_expandh]h)}(hreadahead_expandh]hreadahead_expand}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(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.)}(hj1h]hstruct}(hhhj,hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj(ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjLmodnameN classnameNjijl)}jo]jr)}jejsbc.readahead_expandasbuh1hhj(ubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj= )}(hj@ h]h*}(hhhjxhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj(ubh)}(hractlh]hractl}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj$ubj )}(hloff_t new_starth](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jfc.readahead_expandasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h new_starth]h new_start}(hhhjͶhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj$ubj )}(hsize_t new_lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jfc.readahead_expandasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnew_lenh]hnew_len}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj$ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chM hjhhubj)}(hhh]j6)}(hExpand a readahead requesth]hExpand a readahead request}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/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&]j1j,j2jXj3jXj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjbh]h Parameters}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj\ubj)}(hhh](j)}(h?``struct readahead_control *ractl`` The request to be expanded h](j)}(h#``struct readahead_control *ractl``h]j<)}(hjh]hstruct readahead_control *ractl}(hhhjhhhNhNubah}(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.chMhj{ubj)}(hhh]j6)}(hThe request to be expandedh]hThe request to be expanded}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubj)}(h'``loff_t new_start`` The revised start h](j)}(h``loff_t new_start``h]j<)}(hjh]hloff_t new_start}(hhhjhhhNhNubah}(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]j6)}(hThe revised starth]hThe revised start}(hjշhjӷhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjϷhMhjзubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϷhMhjxubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hThe revised size of the requesth]hThe revised size of the request}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hj.h]h Description}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj\ubj6)}(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.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj\ubj6)}(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.}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj\ubj6)}(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 }(h8The caller must check for this by examining the revised hjbhhhNhNubjv)}(h **ractl**h]hractl}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh5 object for a different expansion than was requested.}(h5 object for a different expansion than was requested.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubeh}(h] readaheadah ]h"] readaheadah$]h&]uh1hhjShhhhhKAubh)}(hhh](h)}(h Writebackh]h Writeback}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMubj)}(h h]h }(hhhj͸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̸hMubh)}(h%balance_dirty_pages_ratelimited_flagsh]h)}(h%balance_dirty_pages_ratelimited_flagsh]h%balance_dirty_pages_ratelimited_flags}(hhhj߸hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj۸ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj̸hMubj )}(h3(struct address_space *mapping, unsigned int flags)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb'c.balance_dirty_pages_ratelimited_flagsasbuh1hhjubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjGhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj̸hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj̸hMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjhhubj)}(hhh]j6)}(hBalance dirty memory state.h]hBalance dirty memory state.}(hjҹhjйhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhj͹hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̸hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhjhhhNhNubah}(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.chMhj ubj)}(hhh]j6)}(h address_space which was dirtied.h]h address_space which was dirtied.}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(h"``unsigned int flags`` BDP flags. h](j)}(h``unsigned int flags``h]j<)}(hjJh]hunsigned int flags}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjDubj)}(hhh]j6)}(h BDP flags.h]h BDP flags.}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(h2See balance_dirty_pages_ratelimited() for details.h]h2See balance_dirty_pages_ratelimited() for details.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(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 }(hIf hjѺhhhNhNubjv)}(h **flags**h]hflags}(hhhjںhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjѺubhX$ contains BDP_ASYNC, it may return -EAGAIN to indicate that memory is out of balance and the caller must wait for I/O to complete. Otherwise, it will return 0 to indicate that either memory was already in balance, or it was able to sleep until the amount of dirty memory returned to balance.}(hX$ contains BDP_ASYNC, it may return -EAGAIN to indicate that memory is out of balance and the caller must wait for I/O to complete. Otherwise, it will return 0 to indicate that either memory was already in balance, or it was able to sleep until the amount of dirty memory returned to balance.hjѺhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubh)}(hbalance_dirty_pages_ratelimitedh]h)}(hbalance_dirty_pages_ratelimitedh]hbalance_dirty_pages_ratelimited}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hMubj )}(h(struct address_space *mapping)h]j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}jej7sb!c.balance_dirty_pages_ratelimitedasbuh1hhjMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjMubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj"hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM$hj hhubj)}(hhh]j6)}(hbalance dirty memory state.h]hbalance dirty memory state.}(hj׻hjջhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjһhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhjhhhNhNubah}(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]j6)}(h address_space which was dirtied.h]h address_space which was dirtied.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjQh]h Description}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(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.}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMhjubj6)}(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.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM. ubh)}(htag_pages_for_writebackh]h)}(htag_pages_for_writebackh]htag_pages_for_writeback}(hhhjƼ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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj޼ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj޼ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejȼsbc.tag_pages_for_writebackasbuh1hhj޼ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj޼ubj= )}(hj@ h]h*}(hhhj.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj޼ubh)}(hmappingh]hmapping}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj޼ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjڼubj )}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjYmodnameN classnameNjijl)}jo]jc.tag_pages_for_writebackasbuh1hhjPubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjڼubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.tag_pages_for_writebackasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhj˽hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjڼubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM. ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM. ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM: hjhhubj)}(hhh]j6)}(h$tag pages to be written by writebackh]h$tag pages to be written by writeback}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM1 hjubj)}(hhh](j)}(hC``struct address_space *mapping`` address space structure to write h](j)}(h!``struct address_space *mapping``h]j<)}(hj7h]hstruct address_space *mapping}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM. hj1ubj)}(hhh]j6)}(h address space structure to writeh]h address space structure to write}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhM. hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM. hj.ubj)}(h&``pgoff_t start`` starting page index h](j)}(h``pgoff_t start``h]j<)}(hjph]h pgoff_t start}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjnubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM/ hjjubj)}(hhh]j6)}(hstarting page indexh]hstarting page index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM/ hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM/ hj.ubj)}(h.``pgoff_t end`` ending page index (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjh]h pgoff_t end}(hhhjhhhNhNubah}(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.chM0 hjubj)}(hhh]j6)}(hending page index (inclusive)h]hending page index (inclusive)}(hjľhj¾hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM0 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0 hj.ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM2 hjubj6)}(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 }(h(This function scans the page range from hjhhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh to }(h to hjhhhNhNubjv)}(h**end**h]hend}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX (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).}(hX (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&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM2 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjPhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjLhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj]hM ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}jewriteback_itersbc.writeback_iterasbuh1hhjLhhhj]hM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj]hM ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjLhhhj]hM ubh)}(hwriteback_iterh]h)}(hjh]hwriteback_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhj]hM ubj )}(h_(struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjʿhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjƿubj)}(h h]h }(hhhj׿hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƿubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.writeback_iterasbuh1hhjƿubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƿubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjƿubh)}(hmappingh]hmapping}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƿubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj¿ubj )}(hstruct writeback_control *wbch](j.)}(hj1h]hstruct}(hhhj:hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj6ubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjZmodnameN classnameNjijl)}jo]jc.writeback_iterasbuh1hhj6ubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6ubh)}(hwbch]hwbc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj¿ubj )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.writeback_iterasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj¿ubj )}(h int *errorh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj6hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(herrorh]herror}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj¿ubeh}(h]h ]h"]h$]h&]jj uh1j hjLhhhj]hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhj]hM ubah}(h]jCah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjEhhubj)}(hhh]j6)}(h(iterate folio of a mapping for writebackh]h(iterate folio of a mapping for writeback}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjkhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj]hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhjhhhNhNubah}(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]j6)}(h address space structure to writeh]h address space structure to write}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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}(hhhjhhhNhNubah}(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]j6)}(hwriteback contexth]hwriteback context}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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<)}(hj!h]hstruct folio *folio}(hhhj#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]j6)}(h-previously iterated folio (``NULL`` to start)h](hpreviously iterated folio (}(hpreviously iterated folio (hj:hhhNhNubj<)}(h``NULL``h]hNULL}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj:ubh to start)}(h to start)hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj6hM hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM hjubj)}(h?``int *error`` in-out pointer for writeback errors (see below) h](j)}(h``int *error``h]j<)}(hjnh]h int *error}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhubj)}(hhh]j6)}(h/in-out pointer for writeback errors (see below)h]h/in-out pointer for writeback errors (see below)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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 }(hNThis function returns the next folio for the writeback operation described by hjhhhNhNubjv)}(h**wbc**h]hwbc}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh on }(h on hjhhhNhNubjv)}(h **mapping**h]hmapping}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhJ and should be called in a while loop in the ->writepages implementation.}(hJ and should be called in a while loop in the ->writepages implementation.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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, }(h"To start the writeback operation, hjhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh is passed in the }(h is passed in the hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhe argument, and for every subsequent iteration the folio returned previously should be passed back in.}(he argument, and for every subsequent iteration the folio returned previously should be passed back in.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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, }(hSIf there was an error in the per-folio writeback inside the writeback_iter() loop, hj+hhhNhNubjv)}(h **error**h]herror}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh" should be set to the error value.}(h" should be set to the error value.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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 }(h Once the writeback described in hjNhhhNhNubjv)}(h**wbc**h]hwbc}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh) has finished, this function will return }(h) has finished, this function will return hjNhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubh: and if there was an error in any iteration restore it to }(h: and if there was an error in any iteration restore it to hjNhhhNhNubjv)}(h **error**h]herror}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjNubh.}(hjyhjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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 }(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h3the folio to write or ``NULL`` if the loop is done.h](hthe folio to write or }(hthe folio to write or hjhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if the loop is done.}(h if the loop is done.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj+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 }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hM ubh)}(hwrite_cache_pagesh]h)}(hwrite_cache_pagesh]hwrite_cache_pages}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hM ubj )}(ha(struct address_space *mapping, struct writeback_control *wbc, writepage_t writepage, void *data)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjdubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejNsbc.write_cache_pagesasbuh1hhjdubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjdubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj`ubj )}(hstruct writeback_control *wbch](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.write_cache_pagesasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj$hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hwbch]hwbc}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj`ubj )}(hwritepage_t writepageh](h)}(hhh]h)}(h writepage_th]h writepage_t}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjOmodnameN classnameNjijl)}jo]jc.write_cache_pagesasbuh1hhjFubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(h writepageh]h writepage}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj`ubj )}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj`ubeh}(h]h ]h"]h$]h&]jj uh1j hj'hhhj9hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj hhubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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<)}(hj'h]hstruct address_space *mapping}(hhhj)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]j6)}(h address space structure to writeh]h address space structure to write}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM 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<)}(hj`h]hstruct writeback_control *wbc}(hhhjbhhhNhNubah}(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 hjZubj)}(hhh]j6)}(h?subtract the number of written pages from ***wbc->nr_to_write**h](h*subtract the number of written pages from }(h*subtract the number of written pages from hjyhhhNhNubjv)}(h***wbc->nr_to_write**h]h*wbc->nr_to_write}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubeh}(h]h ]h"]h$]h&]uh1j5hjuhM hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM hjubj)}(h8``writepage_t writepage`` function called for each page h](j)}(h``writepage_t writepage``h]j<)}(hjh]hwritepage_t writepage}(hhhjhhhNhNubah}(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]j6)}(hfunction called for each pageh]hfunction called for each page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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}(hhhjhhhNhNubah}(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]j6)}(h!data passed to writepage functionh]h!data passed to writepage function}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h/``0`` on success, negative error code otherwiseh](j<)}(h``0``h]h0}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubh* on success, negative error code otherwise}(h* on success, negative error code otherwisehj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h**Note**h]jv)}(hjRh]hNote}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(h$please use writeback_iter() instead.h]h$please use writeback_iter() instead.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hfilemap_dirty_folioh]h)}(hfilemap_dirty_folioh]hfilemap_dirty_folio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h4(struct address_space *mapping, struct folio *folio)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.filemap_dirty_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjEhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjAubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(hfolioh]hfolio}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjemodnameN classnameNjijl)}jo]j c.filemap_dirty_folioasbuh1hhjAubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjAubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhj 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]j6)}(h$Address space this folio belongs to.h]h$Address space this folio belongs to.}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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<)}(hjAh]hstruct folio *folio}(hhhjChhhNhNubah}(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]j6)}(hFolio to be marked as dirty.h]hFolio to be marked as dirty.}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhM hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hfolio_redirty_for_writepageh]h)}(hfolio_redirty_for_writepageh]hfolio_redirty_for_writepage}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hwriteback_controlh]hwriteback_control}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jr)}jejsbc.folio_redirty_for_writepageasbuh1hhjubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hwbch]hwbc}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jUc.folio_redirty_for_writepageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubj)}(hhh]j6)}(hDecline to write a dirty folio.h]hDecline to write a dirty folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j'j3j'j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj+ubj)}(hhh](j)}(h9``struct writeback_control *wbc`` The writeback control. h](j)}(h!``struct writeback_control *wbc``h]j<)}(hjPh]hstruct writeback_control *wbc}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjJubj)}(hhh]j6)}(hThe writeback control.h]hThe writeback control.}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjGubj)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj+ubj6)}(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 }(hFWhen a writepage implementation decides that it doesn't want to write hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh7 for some reason, it should call this function, unlock }(h7 for some reason, it should call this function, unlock hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and return 0.}(h and return 0.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj+ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj+ubj6)}(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.}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM ubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjdhM ubh)}(hfolio_mark_dirtyh]h)}(hfolio_mark_dirtyh]hfolio_mark_dirty}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjdhM ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejysbc.folio_mark_dirtyasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjShhhjdhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjdhM ubah}(h]jJah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjLhhubj)}(hhh]j6)}(hMark a folio as being modified.h]hMark a folio as being modified.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj3ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjXh]hstruct folio *folio}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hjRubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhM hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj3ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj3ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj3ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM6 ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM6 ubh)}(hfolio_wait_writebackh]h)}(hfolio_wait_writebackh]hfolio_wait_writeback}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM6 ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj<hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj8ubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj\modnameN classnameNjijl)}jo]jr)}jej"sbc.folio_wait_writebackasbuh1hhj8ubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj8ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj4ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hM6 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM6 ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM@ hjhhubj)}(hhh]j6)}(h%Wait for a folio to finish writeback.h]h%Wait for a folio to finish writeback.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM5 hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM6 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM9 hjubj)}(hhh]j)}(h/``struct folio *folio`` The folio to wait for. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chM6 hjubj)}(hhh]j6)}(hThe folio to wait for.h]hThe folio to wait for.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM6 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6 hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj<h]h Description}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM8 hjubj6)}(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.}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM8 hjubj6)}(h **Context**h]jv)}(hjch]hContext}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM; hjubj6)}(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.}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chM; hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMK ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMK ubh)}(hfolio_wait_writeback_killableh]h)}(hfolio_wait_writeback_killableh]hfolio_wait_writeback_killable}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMK ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_wait_writeback_killableasbuh1hhjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj1hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMK ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMK ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMV hjhhubj)}(hhh]j6)}(h%Wait for a folio to finish writeback.h]h%Wait for a folio to finish writeback.}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMJ hjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMK ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMN hjubj)}(hhh]j)}(h/``struct folio *folio`` The folio to wait for. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chMK hjubj)}(hhh]j6)}(hThe folio to wait for.h]hThe folio to wait for.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMM hjubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMP hjubj6)}(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.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMP hjubj6)}(h **Return**h]jv)}(hj3h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMU hjubj6)}(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.}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMT hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMd ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhMd ubh)}(hfolio_wait_stableh]h)}(hfolio_wait_stableh]hfolio_wait_stable}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjhMd ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_wait_stableasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjthhhjhMd ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjhMd ubah}(h]jkah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMo hjmhhubj)}(hhh]j6)}(h+wait for writeback to finish, if necessary.h]h+wait for writeback to finish, if necessary.}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMc hj6hhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhMd ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jQj3jQj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj[h]h Parameters}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMg hjUubj)}(hhh]j)}(h.``struct folio *folio`` The folio to wait on. h](j)}(h``struct folio *folio``h]j<)}(hjzh]hstruct folio *folio}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMd hjtubj)}(hhh]j6)}(hThe folio to wait on.h]hThe folio to wait on.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMd hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMd hjqubah}(h]h ]h"]h$]h&]uh1jhjUubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMf hjUubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMf hjUubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMj hjUubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./mm/page-writeback.chMj hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubeh}(h] writebackah ]h"] writebackah$]h&]uh1hhjShhhhhKJubh)}(hhh](h)}(hTruncateh]hTruncate}(hjhjhhhNhNubah}(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}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhKubh)}(hfolio_invalidateh]h)}(hfolio_invalidateh]hfolio_invalidate}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhjHhKubj )}(h3(struct folio *folio, size_t offset, size_t length)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjwhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjsubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej]sbc.folio_invalidateasbuh1hhjsubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjsubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjoubj )}(h size_t offseth](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.folio_invalidateasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoffseth]hoffset}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjoubj )}(h size_t lengthh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jc.folio_invalidateasbuh1hhj-ubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hlengthh]hlength}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjoubeh}(h]h ]h"]h$]h&]jj uh1j hj6hhhjHhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2hhhjHhKubah}(h]j-ah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhj/hhubj)}(hhh]j6)}(h"Invalidate part or all of a folio.h]h"Invalidate part or all of a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjubj)}(hhh](j)}(h5``struct folio *folio`` The folio which is affected. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chKhjubj)}(hhh]j6)}(hThe folio which is affected.h]hThe folio which is affected.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h3``size_t offset`` start of the range to invalidate h](j)}(h``size_t offset``h]j<)}(hjh]h size_t offset}(hhhjhhhNhNubah}(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.chKhjubj)}(hhh]j6)}(h start of the range to invalidateh]h start of the range to invalidate}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h4``size_t length`` length of the range to invalidate h](j)}(h``size_t length``h]j<)}(hj>h]h size_t length}(hhhj@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.chKhj8ubj)}(hhh]j6)}(h!length of the range to invalidateh]h!length of the range to invalidate}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjyh]h Description}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjubj6)}(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 }(hqfolio_invalidate() does not have to release all buffers, but it must ensure that no dirty buffer is left outside hjhhhNhNubjv)}(h **offset**h]hoffset}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM*ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM*ubh)}(htruncate_inode_pages_rangeh]h)}(htruncate_inode_pages_rangeh]htruncate_inode_pages_range}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj>modnameN classnameNjijl)}jo]jr)}jejsbc.truncate_inode_pages_rangeasbuh1hhjubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jXc.truncate_inode_pages_rangeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlstarth]hlstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h loff_t lendh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jXc.truncate_inode_pages_rangeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlendh]hlend}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM*ubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM@hjhhubj)}(hhh]j6)}(h=truncate range of pages specified by start & end byte offsetsh]h=truncate range of pages specified by start & end byte offsets}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM)hj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM*ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jJj3jJj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjTh]h Parameters}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM-hjNubj)}(hhh](j)}(h6``struct address_space *mapping`` mapping to truncate h](j)}(h!``struct address_space *mapping``h]j<)}(hjsh]hstruct address_space *mapping}(hhhjuhhhNhNubah}(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]j6)}(hmapping to truncateh]hmapping to truncate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjjubj)}(h0``loff_t lstart`` offset from which to truncate h](j)}(h``loff_t lstart``h]j<)}(hjh]h loff_t lstart}(hhhjhhhNhNubah}(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]j6)}(hoffset from which to truncateh]hoffset from which to truncate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjjubj)}(h8``loff_t lend`` offset to which to truncate (inclusive) h](j)}(h``loff_t lend``h]j<)}(hjh]h loff_t lend}(hhhjhhhNhNubah}(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]j6)}(h'offset to which to truncate (inclusive)h]h'offset to which to truncate (inclusive)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjjubeh}(h]h ]h"]h$]h&]uh1jhjNubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM.hjNubj6)}(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).}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM.hjNubj6)}(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.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM2hjNubj6)}(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.}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM8hjNubj6)}(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.}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM<hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(htruncate_inode_pagesh]h)}(htruncate_inode_pagesh]htruncate_inode_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h.(struct address_space *mapping, loff_t lstart)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.truncate_inode_pagesasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h loff_t lstarth](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjFmodnameN classnameNjijl)}jo]j c.truncate_inode_pagesasbuh1hhj=ubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hlstarth]hlstart}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjhhubj)}(hhh]j6)}(h'truncate *all* the pages from an offseth](h truncate }(h truncate hjhhhNhNubjH)}(h*all*h]hall}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jHhjubh the pages from an offset}(h the pages from an offsethjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/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}(hhhjhhhNhNubah}(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]j6)}(hmapping to truncateh]hmapping to truncate}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hj)h]h loff_t lstart}(hhhj+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.chMhj#ubj)}(hhh]j6)}(hoffset from which to truncateh]hoffset from which to truncate}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjdh]h Description}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(htruncate_inode_pages_finalh]h)}(htruncate_inode_pages_finalh]htruncate_inode_pages_final}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj-modnameN classnameNjijl)}jo]jr)}jejsbc.truncate_inode_pages_finalasbuh1hhj ubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhjYhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hmappingh]hmapping}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjhhubj)}(hhh]j6)}(h&truncate *all* pages before inode diesh](h truncate }(h truncate hjhhhNhNubjH)}(h*all*h]hall}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jHhjubh pages before inode dies}(h pages before inode dieshjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/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}(hhhjhhhNhNubah}(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]j6)}(hmapping to truncateh]hmapping to truncate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj!h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(h0Called under (and serialized by) inode->i_rwsem.h]h0Called under (and serialized by) inode->i_rwsem.}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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.}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubh)}(hinvalidate_mapping_pagesh]h)}(hinvalidate_mapping_pagesh]hinvalidate_mapping_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhjhMubj )}(h;(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.invalidate_mapping_pagesasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jc.invalidate_mapping_pagesasbuh1hhj<ubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hstarth]hstart}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.invalidate_mapping_pagesasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjqhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM"hjjhhubj)}(hhh]j6)}(h1Invalidate all clean, unlocked cache of one inodeh]h1Invalidate all clean, unlocked cache of one inode}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj)}(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<)}(hj#h]hstruct address_space *mapping}(hhhj%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.chMhjubj)}(hhh]j6)}(h5the address_space which holds the cache to invalidateh]h5the address_space which holds the cache to invalidate}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubj)}(h8``pgoff_t start`` the offset 'from' which to invalidate h](j)}(h``pgoff_t start``h]j<)}(hj\h]h pgoff_t start}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjVubj)}(hhh]j6)}(h%the offset 'from' which to invalidateh]h)the offset ‘from’ which to invalidate}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjubj)}(h@``pgoff_t end`` the offset 'to' which to invalidate (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjh]h pgoff_t end}(hhhjhhhNhNubah}(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]j6)}(h/the offset 'to' which to invalidate (inclusive)h]h3the offset ‘to’ which to invalidate (inclusive)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubj6)}(h9The number of indices that had their contents invalidatedh]h9The number of indices that had their contents invalidated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMXubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhMXubh)}(hinvalidate_inode_pages2_rangeh]h)}(hinvalidate_inode_pages2_rangeh]hinvalidate_inode_pages2_range}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjYhMXubj )}(h;(struct address_space *mapping, pgoff_t start, pgoff_t end)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejnsbc.invalidate_inode_pages2_rangeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.invalidate_inode_pages2_rangeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjGmodnameN classnameNjijl)}jo]jc.invalidate_inode_pages2_rangeasbuh1hhj>ubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hendh]hend}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjGhhhjYhMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjYhMXubah}(h]j>ah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMahj@hhubj)}(hhh]j6)}(h+remove range of pages from an address_spaceh]h+remove range of pages from an address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMXubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM[hjubj)}(hhh](j)}(h4``struct address_space *mapping`` the address_space h](j)}(h!``struct address_space *mapping``h]j<)}(hjh]hstruct address_space *mapping}(hhhjhhhNhNubah}(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.chMXhjubj)}(hhh]j6)}(hthe address_spaceh]hthe address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h=``pgoff_t start`` the page offset 'from' which to invalidate h](j)}(h``pgoff_t start``h]j<)}(hjh]h pgoff_t start}(hhhjhhhNhNubah}(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.chMYhjubj)}(hhh]j6)}(h*the page offset 'from' which to invalidateh]h.the page offset ‘from’ which to invalidate}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMYhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMYhjubj)}(hE``pgoff_t end`` the page offset 'to' which to invalidate (inclusive) h](j)}(h``pgoff_t end``h]j<)}(hjOh]h pgoff_t end}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMZhjIubj)}(hhh]j6)}(h4the page offset 'to' which to invalidate (inclusive)h]h8the page offset ‘to’ which to invalidate (inclusive)}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMZhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMZhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM\hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM\hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM_hjubj6)}(h--EBUSY if any pages could not be invalidated.h]h--EBUSY if any pages could not be invalidated.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hinvalidate_inode_pages2h]h)}(hinvalidate_inode_pages2h]hinvalidate_inode_pages2}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhj3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj/ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjSmodnameN classnameNjijl)}jo]jr)}jejsbc.invalidate_inode_pages2asbuh1hhj/ubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj/ubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjhhubj)}(hhh]j6)}(h&remove all pages from an address_spaceh]h&remove all pages from an address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/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}(hhhjhhhNhNubah}(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]j6)}(hthe address_spaceh]hthe address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj3h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(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.}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(h **Return**h]jv)}(hjZh]hReturn}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubj6)}(h--EBUSY if any pages could not be invalidated.h]h--EBUSY if any pages could not be invalidated.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/truncate.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hKGhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKGhjubj)}(h'``int err`` error to be set in mapping h](j)}(h ``int err``h]j<)}(hj^h]hint err}(hhhj`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.hhKHhjXubj)}(hhh]j6)}(herror to be set in mappingh]herror to be set in mapping}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshKHhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshKHhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKJhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKJhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK\ubh)}(hfilemap_check_wb_errh]h)}(hfilemap_check_wb_errh]hfilemap_check_wb_err}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK\ubj )}(h/(struct address_space *mapping, errseq_t since)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj*hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj&ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjJmodnameN classnameNjijl)}jo]jr)}jejsbc.filemap_check_wb_errasbuh1hhj&ubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj= )}(hj@ h]h*}(hhhjvhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj&ubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj"ubj )}(herrseq_t sinceh](h)}(hhh]h)}(herrseq_th]herrseq_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jdc.filemap_check_wb_errasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsinceh]hsince}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj"ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhK\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK\ubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKdhjhhubj)}(hhh]j6)}(h1has an error occurred since the mark was sampled?h]h1has an error occurred since the mark was sampled?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK_hjubj)}(hhh](j)}(hH``struct address_space *mapping`` mapping to check for writeback errors h](j)}(h!``struct address_space *mapping``h]j<)}(hj7h]hstruct address_space *mapping}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK\hj1ubj)}(hhh]j6)}(h%mapping to check for writeback errorsh]h%mapping to check for writeback errors}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhK\hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhK\hj.ubj)}(h/``errseq_t since`` previously-sampled errseq_t h](j)}(h``errseq_t since``h]j<)}(hjph]herrseq_t since}(hhhjrhhhNhNubah}(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.hhK]hjjubj)}(hhh]j6)}(hpreviously-sampled errseq_th]hpreviously-sampled errseq_t}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hj.ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK_hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK_hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefilemap_sample_wb_errsbc.filemap_sample_wb_errasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKlubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hKlubh)}(hfilemap_sample_wb_errh]h)}(hj h]hfilemap_sample_wb_err}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj#hKlubj )}(h(struct address_space *mapping)h]j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jc.filemap_sample_wb_errasbuh1hhjMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjMubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj#hKlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj#hKlubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKqhjhhubj)}(hhh]j6)}(h4sample the current errseq_t to test for later errorsh]h4sample the current errseq_t to test for later errors}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj#hKlubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKohjubj)}(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}(hhhjhhhNhNubah}(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.hhKlhjubj)}(hhh]j6)}(hmapping to be sampledh]hmapping to be sampled}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hKlhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKlhj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjOh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKnhjubj6)}(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.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefile_sample_sb_errsbc.file_sample_sb_errasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKxubh)}(hfile_sample_sb_errh]h)}(hjh]hfile_sample_sb_err}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKxubj )}(h(struct file *file)h]j )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfileh]hfile}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.file_sample_sb_errasbuh1hhjubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj0hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfileh]hfile}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhKxubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKxubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK}hjhhubj)}(hhh]j6)}(h4sample the current errseq_t to test for later errorsh]h4sample the current errseq_t to test for later errors}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKwhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhK{hjubj)}(hhh]j)}(h1``struct file *file`` file pointer to be sampled h](j)}(h``struct file *file``h]j<)}(hjh]hstruct file *file}(hhhjhhhNhNubah}(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.hhKxhjubj)}(hhh]j6)}(hfile pointer to be sampledh]hfile pointer to be sampled}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKzhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKzhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hKubh)}(hmapping_set_errorh]h)}(hmapping_set_errorh]hmapping_set_error}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hKubj )}(h*(struct address_space *mapping, int error)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjfhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjbubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejLsbc.mapping_set_errorasbuh1hhjbubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjbubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubj )}(h int errorh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(herrorh]herror}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubeh}(h]h ]h"]h$]h&]jj uh1j hj%hhhj7hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hKubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjhhubj)}(hhh]j6)}(h-record a writeback error in the address_spaceh]h-record a writeback error in the address_space}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhj;ubj)}(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<)}(hj`h]hstruct address_space *mapping}(hhhjbhhhNhNubah}(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.hhKhjZubj)}(hhh]j6)}(h+the mapping in which an error should be seth]h+the mapping in which an error should be set}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjWubj)}(h.``int error`` the error to set in the mapping h](j)}(h ``int error``h]j<)}(hjh]h int error}(hhhjhhhNhNubah}(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.hhKhjubj)}(hhh]j6)}(hthe error to set in the mappingh]hthe error to set in the mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhj;ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhj;ubj6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhKhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hactivate_swapfile. Do not call this for folios which aren't in the page cache or swap cache.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjIh]h Description}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(hXPFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the mapping of the swap file or swap device where the data is stored. This is different from the mapping returned by folio_mapping(). The only reason to use it is if, like NFS, you return 0 from ->activate_swapfile.h]hXPFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the mapping of the swap file or swap device where the data is stored. This is different from the mapping returned by folio_mapping(). The only reason to use it is if, like NFS, you return 0 from ->activate_swapfile.}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(hIDo not call this for folios which aren't in the page cache or swap cache.h]hKDo not call this for folios which aren’t in the page cache or swap cache.}(hjphjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefolio_flush_mappingsbc.folio_flush_mappingasbuh1hhjhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hfolio_flush_mappingh]h)}(hjh]hfolio_flush_mapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj7modnameN classnameNjijl)}jo]jc.folio_flush_mappingasbuh1hhjubj)}(h h]h }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjahhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(h,Find the file mapping this folio belongs to.h]h,Find the file mapping this folio belongs to.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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().}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjihhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjehhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjvhMubh)}(hhh]h)}(hinodeh]hinode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je folio_inodesb c.folio_inodeasbuh1hhjehhhjvhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjvhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjehhhjvhMubh)}(h folio_inodeh]h)}(hjh]h folio_inode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjvhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.folio_inodeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj-hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjehhhjvhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjvhMubah}(h]j\ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^hhubj)}(hhh]j6)}(h"Get the host inode for this folio.h]h"Get the host inode for this folio.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjbhhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjvhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j}j3j}j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjChMubh)}(hfolio_attach_privateh]h)}(hfolio_attach_privateh]hfolio_attach_private}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjChMubj )}(h!(struct folio *folio, void *data)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjrhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejXsbc.folio_attach_privateasbuh1hhjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjnubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubj )}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdatah]hdata}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubeh}(h]h ]h"]h$]h&]jj uh1j hj1hhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjChMubah}(h]j(ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj*hhubj)}(hhh]j6)}(hAttach private data to a folio.h]hAttach private data to a folio.}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjTubj)}(hhh](j)}(h1``struct folio *folio`` Folio to attach data to. h](j)}(h``struct folio *folio``h]j<)}(hjyh]hstruct folio *folio}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjsubj)}(hhh]j6)}(hFolio to attach data to.h]hFolio to attach data to.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h(``void *data`` Data to attach to folio. h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(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]j6)}(hData to attach to folio.h]hData to attach to folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjTubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj2hhhNhNubah}(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 }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMubj= )}(hj@ h]h*}(hhhjOhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj.hhhj@hMubh)}(hfolio_change_privateh]h)}(hfolio_change_privateh]hfolio_change_private}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj@hMubj )}(h!(struct folio *folio, void *data)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj|hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejbsbc.folio_change_privateasbuh1hhjxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjxubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubj )}(h void *datah](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdatah]hdata}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubeh}(h]h ]h"]h$]h&]jj uh1j hj.hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj@hMubah}(h]j%ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj'hhubj)}(hhh]j6)}(hChange private data on a folio.h]hChange private data on a folio.}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jZj3jZj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^ubj)}(hhh](j)}(h5``struct folio *folio`` Folio to change the data on. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.hhMhj}ubj)}(hhh]j6)}(hFolio to change the data on.h]hFolio to change the data on.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubj)}(h)``void *data`` Data to set on the folio. h](j)}(h``void *data``h]j<)}(hjh]h void *data}(hhhjhhhNhNubah}(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]j6)}(hData to set on the folio.h]hData to set on the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^ubj6)}(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.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^ubj6)}(h/Data that was previously attached to the folio.h]h/Data that was previously attached to the folio.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM ubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhM ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj_hhhjqhM ubh)}(hfolio_detach_privateh]h)}(hfolio_detach_privateh]hfolio_detach_private}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjqhM ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_detach_privateasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj_hhhjqhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjqhM ubah}(h]jVah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjXhhubj)}(hhh]j6)}(h!Detach private data from a folio.h]h!Detach private data from a folio.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubj)}(hhh]j)}(h3``struct folio *folio`` Folio to detach data from. h](j)}(h``struct folio *folio``h]j<)}(hjrh]hstruct folio *folio}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjlubj)}(hhh]j6)}(hFolio to detach data from.h]hFolio to detach data from.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubah}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubj6)}(h$Data that was attached to the folio.h]h$Data that was attached to the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMIubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMIubh)}(hfgf_th]h)}(hjh]hfgf_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hMIubah}(h]j ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(h-Flags for getting folios from the page cache.h]h-Flags for getting folios from the page cache.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMHhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMIubeh}(h]h ](j,typeeh"]h$]h&]j1j,j2juj3juj4uh1hhhhjhNhNubj6)}(h**Description**h]jv)}(hj{h]h Description}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhjhhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhjhhubjx)}(hhh](jx)}(h5``FGP_ACCESSED`` - The folio will be marked accessed.h]j6)}(hjh](j<)}(h``FGP_ACCESSED``h]h FGP_ACCESSED}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh% - The folio will be marked accessed.}(h% - The folio will be marked accessed.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMPhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h,``FGP_LOCK`` - The folio is returned locked.h]j6)}(hjh](j<)}(h ``FGP_LOCK``h]hFGP_LOCK}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh - The folio is returned locked.}(h - The folio is returned locked.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMQhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(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]j6)}(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}(hhhjhhhNhNubah}(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.}(h - 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&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMRhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(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]j6)}(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}(hhhj!hhhNhNubah}(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.}(h - 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&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMUhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h;``FGP_WRITE`` - The folio will be written to by the caller.h]j6)}(hjCh](j<)}(h ``FGP_WRITE``h]h FGP_WRITE}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubh. - The folio will be written to by the caller.}(h. - The folio will be written to by the caller.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMXhjAubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h0``FGP_NOFS`` - __GFP_FS will get cleared in gfp.h]j6)}(hjjh](j<)}(h ``FGP_NOFS``h]hFGP_NOFS}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlubh$ - __GFP_FS will get cleared in gfp.}(h$ - __GFP_FS will get cleared in gfp.hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMYhjhubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h/``FGP_NOWAIT`` - Don't block on the folio lock.h]j6)}(hjh](j<)}(h``FGP_NOWAIT``h]h FGP_NOWAIT}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh# - Don’t block on the folio lock.}(h! - Don't block on the folio lock.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMZhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hE``FGP_STABLE`` - Wait for the folio to be stable (finished writeback)h]j6)}(hjh](j<)}(h``FGP_STABLE``h]h FGP_STABLE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh7 - Wait for the folio to be stable (finished writeback)}(h7 - Wait for the folio to be stable (finished writeback)hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM[hjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hU``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation. h]j6)}(hS``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation.h](j<)}(h``FGP_WRITEBEGIN``h]hFGP_WRITEBEGIN}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubhA - The flags to use in a filesystem write_begin() implementation.}(hA - The flags to use in a filesystem write_begin() implementation.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM\hjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhMPhjhhubh)}(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}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj)modnameN classnameNjijl)}jo]jr)}je fgf_set_ordersbc.fgf_set_orderasbuh1hhj hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMoubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjHhMoubh)}(h fgf_set_orderh]h)}(hjEh]h fgf_set_order}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjHhMoubj )}(h (size_t size)h]j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj{modnameN classnameNjijl)}jo]jCc.fgf_set_orderasbuh1hhjrubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjnubah}(h]h ]h"]h$]h&]jj uh1j hj hhhjHhMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjHhMoubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMxhjhhubj)}(hhh]j6)}(h#Encode a length in the fgf_t flags.h]h#Encode a length in the fgf_t flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMnhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjHhMoubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMrhjubj)}(hhh]j)}(h;``size_t size`` The suggested size of the folio to create. h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(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.hhMohj ubj)}(hhh]j6)}(h*The suggested size of the folio to create.h]h*The suggested size of the folio to create.}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMohj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMohjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjLh]h Description}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMqhjubj6)}(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.}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMqhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefilemap_get_foliosbc.filemap_get_folioasbuh1hhjhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hfilemap_get_folioh]h)}(hjh]hfilemap_get_folio}(hhhjhhhNhNubah}(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.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]jc.filemap_get_folioasbuh1hhjubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.filemap_get_folioasbuh1hhjwubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(hFind and get a folio.h]hFind and get a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(hThe address_space to search.h]hThe address_space to search.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj ubj)}(h"``pgoff_t index`` The page index. h](j)}(h``pgoff_t index``h]j<)}(hjOh]h pgoff_t index}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjIubj)}(hhh]j6)}(hThe page index.h]hThe page index.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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 }(h!Looks up the page cache entry at hjhhhNhNubjv)}(h **mapping**h]hmapping}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h **index**h]hindex}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhD. If a folio is present, it is returned with an increased refcount.}(hD. If a folio is present, it is returned with an increased refcount.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj 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 }(hhhj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj* hMubh)}(hhh]h)}(hfolioh]hfolio}(hhhj< hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9 ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj> modnameN classnameNjijl)}jo]jr)}jefilemap_lock_foliosbc.filemap_lock_folioasbuh1hhj hhhj* hMubj)}(h h]h }(hhhj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj* hMubj= )}(hj@ h]h*}(hhhjk hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj hhhj* hMubh)}(hfilemap_lock_folioh]h)}(hjZ h]hfilemap_lock_folio}(hhhj| hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx 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.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jX c.filemap_lock_folioasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hmappingh]hmapping}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jX c.filemap_lock_folioasbuh1hhj ubj)}(h h]h }(hhhj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hindexh]hindex}(hhhj6 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj* hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj* hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj hhubj)}(hhh]j6)}(hFind and lock a folio.h]hFind and lock a folio.}(hjc hja hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2jy j3jy j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} 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}(hhhj 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]j6)}(hThe address_space to search.h]hThe address_space to search.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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}(hhhj 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]j6)}(hThe page index.h]hThe page index.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj} ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubj6)}(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 }(h!Looks up the page cache entry at hj, hhhNhNubjv)}(h **mapping**h]hmapping}(hhhj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj, ubh & }(h & hj, hhhNhNubjv)}(h **index**h]hindex}(hhhjH hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj, ubhK. If a folio is present, it is returned locked with an increased refcount.}(hK. If a folio is present, it is returned locked with an increased refcount.hj, hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubj6)}(h **Context**h]jv)}(hjd h]hContext}(hhhjf hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjb ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubj6)}(h May sleep.h]h May sleep.}(hj| hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubj6)}(h{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.h]h{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj} ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj 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 }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(hhh]h)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jefilemap_grab_foliosbc.filemap_grab_folioasbuh1hhj hhhj hMubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj hhhj hMubh)}(hfilemap_grab_folioh]h)}(hj h]hfilemap_grab_folio}(hhhj/ 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.)}(hj1h]hstruct}(hhhjJ hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjF ubj)}(h h]h }(hhhjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjh hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjj modnameN classnameNjijl)}jo]j c.filemap_grab_folioasbuh1hhjF ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjF ubh)}(hmappingh]hmapping}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjB ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]j c.filemap_grab_folioasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hindexh]hindex}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjB ubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj hhubj)}(hhh]j6)}(h grab a folio from the page cacheh]h grab a folio from the page cache}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2j, j3j, j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj6 h]h Parameters}(hhhj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4 ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0 ubj)}(hhh](j)}(h>``struct address_space *mapping`` The address space to search h](j)}(h!``struct address_space *mapping``h]j<)}(hjU h]hstruct address_space *mapping}(hhhjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjS ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjO ubj)}(hhh]j6)}(hThe address space to searchh]hThe address space to search}(hjp hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjj hMhjk ubah}(h]h ]h"]h$]h&]uh1jhjO ubeh}(h]h ]h"]h$]h&]uh1jhjj hMhjL ubj)}(h!``pgoff_t index`` The page index h](j)}(h``pgoff_t index``h]j<)}(hj h]h pgoff_t index}(hhhj 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]j6)}(hThe page indexh]hThe page index}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjL ubeh}(h]h ]h"]h$]h&]uh1jhj0 ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0 ubj6)}(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 }(h!Looks up the page cache entry at hj hhhNhNubjv)}(h **mapping**h]hmapping}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh & }(h & hj hhhNhNubjv)}(h **index**h]hindex}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubhf. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.}(hf. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0 ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0 ubj6)}(h]A found or created folio. ERR_PTR(-ENOMEM) if no folio is found and failed to create a folio.h]h]A found or created folio. ERR_PTR(-ENOMEM) if no folio is found and failed to create a folio.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj0 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj\hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjXhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjihMubh)}(hhh]h)}(hpageh]hpage}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj}modnameN classnameNjijl)}jo]jr)}je find_get_pagesbc.find_get_pageasbuh1hhjXhhhjihMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjihMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjXhhhjihMubh)}(h find_get_pageh]h)}(hjh]h find_get_page}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjihMubj )}(h/(struct address_space *mapping, pgoff_t offset)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.find_get_pageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmappingh]hmapping}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hpgoff_t offseth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjKmodnameN classnameNjijl)}jo]jc.find_get_pageasbuh1hhjBubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hoffseth]hoffset}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjXhhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjihMubah}(h]jOah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQhhubj)}(hhh]j6)}(hfind and get a page referenceh]hfind and get a page reference}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjihMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhjhhhNhNubah}(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]j6)}(hthe address_space to searchh]hthe address_space to search}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``pgoff_t offset`` the page index h](j)}(h``pgoff_t offset``h]j<)}(hjh]hpgoff_t offset}(hhhjhhhNhNubah}(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]j6)}(hthe page indexh]hthe page index}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjUh]h Description}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(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 }(h Looks up the page cache slot at hjkhhhNhNubjv)}(h **mapping**h]hmapping}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh & }(h & hjkhhhNhNubjv)}(h **offset**h]hoffset}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubhL. If there is a page cache page, it is returned with an increased refcount.}(hL. If there is a page cache page, it is returned with an increased refcount.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubj6)}(h Otherwise, ``NULL`` is returned.h](h Otherwise, }(h Otherwise, hjhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh is returned.}(h is returned.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefind_lock_pagesbc.find_lock_pageasbuh1hhjhhhjhMubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhj2hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hfind_lock_pageh]h)}(hj!h]hfind_lock_page}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h.(struct address_space *mapping, pgoff_t index)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj^hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjZubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj~modnameN classnameNjijl)}jo]jc.find_lock_pageasbuh1hhjZubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjZubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjVubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.find_lock_pageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjVubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(h%locate, pin and lock a pagecache pageh]h%locate, pin and lock a pagecache page}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j@j3j@j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj)}(hhh](j)}(h>``struct address_space *mapping`` the address_space to search h](j)}(h!``struct address_space *mapping``h]j<)}(hjih]hstruct address_space *mapping}(hhhjkhhhNhNubah}(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.hhMhjcubj)}(hhh]j6)}(hthe address_space to searchh]hthe address_space to search}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubj)}(h!``pgoff_t index`` the page index h](j)}(h``pgoff_t index``h]j<)}(hjh]h pgoff_t index}(hhhjhhhNhNubah}(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]j6)}(hthe page indexh]hthe page index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj6)}(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 }(h!Looks up the page cache entry at hjhhhNhNubjv)}(h **mapping**h]hmapping}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh & }(h & hjhhhNhNubjv)}(h **index**h]hindex}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhW. If there is a page cache page, it is returned locked and with an increased refcount.}(hW. If there is a page cache page, it is returned locked and with an increased refcount.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj6)}(h **Context**h]jv)}(hj+h]hContext}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj6)}(h May sleep.h]h May sleep.}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj6)}(h **Return**h]jv)}(hjRh]hReturn}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubj6)}(hJA struct page or ``NULL`` if there is no page in the cache for this index.h](hA struct page or }(hA struct page or hjhhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubh1 if there is no page in the cache for this index.}(h1 if there is no page in the cache for this index.hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefind_or_create_pagesbc.find_or_create_pageasbuh1hhjhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hfind_or_create_pageh]h)}(hjh]hfind_or_create_page}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h>(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj!ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jc.find_or_create_pageasbuh1hhj!ubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj= )}(hj@ h]h*}(hhhjohhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj!ubh)}(hmappingh]hmapping}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.find_or_create_pageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.find_or_create_pageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(hlocate or add a pagecache pageh]hlocate or add a pagecache page}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jOj3jOj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjYh]h Parameters}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj)}(hhh](j)}(h;``struct address_space *mapping`` the page's address_space h](j)}(h!``struct address_space *mapping``h]j<)}(hjxh]hstruct address_space *mapping}(hhhjzhhhNhNubah}(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.hhMhjrubj)}(hhh]j6)}(hthe page's address_spaceh]hthe page’s address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubj)}(h4``pgoff_t index`` the page's index into the mapping h](j)}(h``pgoff_t index``h]j<)}(hjh]h pgoff_t index}(hhhjhhhNhNubah}(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]j6)}(h!the page's index into the mappingh]h#the page’s index into the mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubj)}(h(``gfp_t gfp_mask`` page allocation mode h](j)}(h``gfp_t gfp_mask``h]j<)}(hjh]hgfp_t gfp_mask}(hhhjhhhNhNubah}(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]j6)}(hpage allocation modeh]hpage allocation mode}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubeh}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hj%h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj6)}(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 }(h Looks up the page cache slot at hj;hhhNhNubjv)}(h **mapping**h]hmapping}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh & }(h & hj;hhhNhNubjv)}(h **offset**h]hoffset}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubhW. If there is a page cache page, it is returned locked and with an increased refcount.}(hW. If there is a page cache page, it is returned locked and with an increased refcount.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj6)}(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 }(h:If the page is not present, a new page is allocated using hjqhhhNhNubjv)}(h **gfp_mask**h]hgfp_mask}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubhr and added to the page cache and the VM’s LRU list. The page is returned locked and with an increased refcount.}(hp and added to the page cache and the VM's LRU list. The page is returned locked and with an increased refcount.hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj6)}(h+On memory exhaustion, ``NULL`` is returned.h](hOn memory exhaustion, }(hOn memory exhaustion, hjhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh is returned.}(h is returned.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubj6)}(hVfind_or_create_page() may sleep, even if **gfp_flags** specifies an atomic allocation!h](h)find_or_create_page() may sleep, even if }(h)find_or_create_page() may sleep, even if hjhhhNhNubjv)}(h **gfp_flags**h]h gfp_flags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh specifies an atomic allocation!}(h specifies an atomic allocation!hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jegrab_cache_page_nowaitsbc.grab_cache_page_nowaitasbuh1hhjhhhjhMubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjHhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hgrab_cache_page_nowaith]h)}(hj7h]hgrab_cache_page_nowait}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h.(struct address_space *mapping, pgoff_t index)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjthhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjpubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j5c.grab_cache_page_nowaitasbuh1hhjpubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjpubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j5c.grab_cache_page_nowaitasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj)}(hhh]j6)}(h1returns locked page at given index in given cacheh]h1returns locked page at given index in given cache}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jVj3jVj4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj`h]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjZubj)}(hhh](j)}(h7``struct address_space *mapping`` target address_space h](j)}(h!``struct address_space *mapping``h]j<)}(hjh]hstruct address_space *mapping}(hhhjhhhNhNubah}(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]j6)}(htarget address_spaceh]htarget address_space}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h!``pgoff_t index`` the page index h](j)}(h``pgoff_t index``h]j<)}(hjh]h pgoff_t index}(hhhjhhhNhNubah}(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]j6)}(hthe page indexh]hthe page index}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjZubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjZubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_index (C function) c.folio_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)pgoff_t folio_index (struct folio *folio)h]h)}(h(pgoff_t folio_index(struct folio *folio)h](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjLmodnameN classnameNjijl)}jo]jr)}je folio_indexsb c.folio_indexasbuh1hhjChhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjkhMubh)}(h folio_indexh]h)}(hjhh]h folio_index}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjkhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jf c.folio_indexasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjChhhjkhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhjkhMubah}(h]j:ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM$hj<hhubj)}(hhh]j6)}(hFile index of a folio.h]hFile index of a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjkhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhjhNhNubjl)}(hXm**Parameters** ``struct folio *folio`` The folio. **Description** For a folio which is either in the page cache or the swap cache, return its index within the address_space it belongs to. If you know the page is definitely in the page cache, you can look at the folio's index directly. **Return** The index (offset in units of pages) of a folio in its file.h](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj7ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj\h]hstruct folio *folio}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjVubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj7ubj6)}(hFor a folio which is either in the page cache or the swap cache, return its index within the address_space it belongs to. If you know the page is definitely in the page cache, you can look at the folio's index directly.h]hFor a folio which is either in the page cache or the swap cache, return its index within the address_space it belongs to. If you know the page is definitely in the page cache, you can look at the folio’s index directly.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj7ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM"hj7ubj6)}(hhjubj6)}(h1The page containing the file data for this index.h]h1The page containing the file data for this index.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMGubh)}(hfolio_containsh]h)}(hfolio_containsh]hfolio_contains}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMGubj )}(h$(struct folio *folio, pgoff_t index)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj9hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj5ubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjYmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_containsasbuh1hhj5ubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj5ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jsc.folio_containsasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hindexh]hindex}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMGubah}(h]jah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMOhjhhubj)}(hhh]j6)}(h#Does this folio contain this index?h]h#Does this folio contain this index?}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMFhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMGubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhjhNhNubjl)}(hXK**Parameters** ``struct folio *folio`` The folio. ``pgoff_t index`` The page index within the file. **Context** The caller should have the page locked in order to prevent (eg) shmem from moving the page between the page cache and swap cache and changing its index in the middle of the operation. **Return** true or false.h](j6)}(h**Parameters**h]jv)}(hj' h]h Parameters}(hhhj) hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj% ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhj! ubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjF h]hstruct folio *folio}(hhhjH hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjD ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMGhj@ ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hja hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[ hMGhj\ ubah}(h]h ]h"]h$]h&]uh1jhj@ ubeh}(h]h ]h"]h$]h&]uh1jhj[ hMGhj= ubj)}(h2``pgoff_t index`` The page index within the file. h](j)}(h``pgoff_t index``h]j<)}(hj h]h pgoff_t index}(hhhj 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.hhMHhjy ubj)}(hhh]j6)}(hThe page index within the file.h]hThe page index within the file.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMHhj ubah}(h]h ]h"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]uh1jhj hMHhj= ubeh}(h]h ]h"]h$]h&]uh1jhj! ubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhj! ubj6)}(hThe caller should have the page locked in order to prevent (eg) shmem from moving the page between the page cache and swap cache and changing its index in the middle of the operation.h]hThe caller should have the page locked in order to prevent (eg) shmem from moving the page between the page cache and swap cache and changing its index in the middle of the operation.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMJhj! ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMNhj! ubj6)}(htrue or false.h]htrue or false.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMMhj! ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_pos (C function) c.folio_poshNtauh1hhjhhhNhNubh)}(hhh](h)}(h&loff_t folio_pos (struct folio *folio)h]h)}(h%loff_t folio_pos(struct folio *folio)h](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj)!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+!modnameN classnameNjijl)}jo]jr)}je folio_possb c.folio_posasbuh1hhj"!hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhjK!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"!hhhjJ!hMubh)}(h folio_posh]h)}(hjG!h]h folio_pos}(hhhj]!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"!hhhjJ!hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjx!hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjt!ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt!ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]jE! c.folio_posasbuh1hhjt!ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt!ubj= )}(hj@ h]h*}(hhhj!hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjt!ubh)}(hfolioh]hfolio}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjp!ubah}(h]h ]h"]h$]h&]jj uh1j hj"!hhhjJ!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhjJ!hMubah}(h]j!ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj!hhubj)}(hhh]j6)}(h4Returns the byte position of this folio in its file.h]h4Returns the byte position of this folio in its file.}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhjJ!hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j"j3j"j4uh1hhhhjhNhNubjl)}(h4**Parameters** ``struct folio *folio`` The folio.h](j6)}(h**Parameters**h]jv)}(hj"h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj"ubj)}(hhh]j)}(h"``struct folio *folio`` The folio.h](j)}(h``struct folio *folio``h]j<)}(hj;"h]hstruct folio *folio}(hhhj="hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj5"ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjV"hjT"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQ"ubah}(h]h ]h"]h$]h&]uh1jhj5"ubeh}(h]h ]h"]h$]h&]uh1jhjP"hMhj2"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_file_pos (C function)c.folio_file_poshNtauh1hhjhhhNhNubh)}(hhh](h)}(h+loff_t folio_file_pos (struct folio *folio)h]h)}(h*loff_t folio_file_pos(struct folio *folio)h](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj"modnameN classnameNjijl)}jo]jr)}jefolio_file_possbc.folio_file_posasbuh1hhj"hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hMubh)}(hfolio_file_posh]h)}(hj"h]hfolio_file_pos}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj"hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj"hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj"ubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#modnameN classnameNjijl)}jo]j"c.folio_file_posasbuh1hhj"ubj)}(h h]h }(hhhj##hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj= )}(hj@ h]h*}(hhhj1#hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj"ubh)}(hfolioh]hfolio}(hhhj>#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj"ubah}(h]h ]h"]h$]h&]jj uh1j hj"hhhj"hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj"hMubah}(h]j"ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj"hhubj)}(hhh]j6)}(h4Returns the byte position of this folio in its file.h]h4Returns the byte position of this folio in its file.}(hjk#hji#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjf#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#j3j#j4uh1hhhhjhNhNubjl)}(h**Parameters** ``struct folio *folio`` The folio. **Description** This differs from folio_pos() for folios which belong to a swap file. NFS is the only filesystem today which needs to use folio_file_pos().h](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj#ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj#h]hstruct folio *folio}(hhhj#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]j6)}(h The folio.h]h The folio.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubj6)}(h**Description**h]jv)}(hj#h]h Description}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj#ubj6)}(hThis differs from folio_pos() for folios which belong to a swap file. NFS is the only filesystem today which needs to use folio_file_pos().h]hThis differs from folio_pos() for folios which belong to a swap file. NFS is the only filesystem today which needs to use folio_file_pos().}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhj*$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 }(hhhj8$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&$hhhj7$hMubh)}(h folio_trylockh]h)}(h folio_trylockh]h folio_trylock}(hhhjJ$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&$hhhj7$hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjf$hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjb$ubj)}(h h]h }(hhhjs$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb$ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$modnameN classnameNjijl)}jo]jr)}jejL$sbc.folio_trylockasbuh1hhjb$ubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb$ubj= )}(hj@ h]h*}(hhhj$hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjb$ubh)}(hfolioh]hfolio}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^$ubah}(h]h ]h"]h$]h&]jj uh1j hj&$hhhj7$hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"$hhhj7$hMubah}(h]j$ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj$hhubj)}(hhh]j6)}(hAttempt to lock a folio.h]hAttempt to lock a folio.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj7$hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j%j3j%j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj %h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj %ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj)}(hhh]j)}(h6``struct folio *folio`` The folio to attempt to lock. h](j)}(h``struct folio *folio``h]j<)}(hj+%h]hstruct folio *folio}(hhhj-%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]j6)}(hThe folio to attempt to lock.h]hThe folio to attempt to lock.}(hjF%hjD%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@%hMhjA%ubah}(h]h ]h"]h$]h&]uh1jhj%%ubeh}(h]h ]h"]h$]h&]uh1jhj@%hMhj"%ubah}(h]h ]h"]h$]h&]uh1jhj%ubj6)}(h**Description**h]jv)}(hjf%h]h Description}(hhhjh%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjd%ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj6)}(hXSometimes it is undesirable to wait for a folio to be unlocked (eg when the locks are being taken in the wrong order, or if making progress through a batch of folios is more important than processing them in order). Usually folio_lock() is the correct function to call.h]hXSometimes it is undesirable to wait for a folio to be unlocked (eg when the locks are being taken in the wrong order, or if making progress through a batch of folios is more important than processing them in order). Usually folio_lock() is the correct function to call.}(hj~%hj|%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj6)}(h **Context**h]jv)}(hj%h]hContext}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj6)}(h Any context.h]h Any context.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj6)}(h **Return**h]jv)}(hj%h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubj6)}(h+Whether the lock was successfully acquired.h]h+Whether the lock was successfully acquired.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_lock (C function) c.folio_lockhNtauh1hhjhhhNhNub h)}(hhh](h)}(h%void folio_lock (struct folio *folio)h]h)}(h$void folio_lock(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhj%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 }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj&hMubh)}(h folio_lockh]h)}(h folio_lockh]h folio_lock}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj&hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj6&hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2&ubj)}(h h]h }(hhhjC&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2&ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjT&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjV&modnameN classnameNjijl)}jo]jr)}jej&sb c.folio_lockasbuh1hhj2&ubj)}(h h]h }(hhhjt&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2&ubj= )}(hj@ h]h*}(hhhj&hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj2&ubh)}(hfolioh]hfolio}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.&ubah}(h]h ]h"]h$]h&]jj uh1j hj%hhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj&hMubah}(h]j%ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj%hhubj)}(hhh]j6)}(hLock this folio.h]hLock this folio.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2j&j3j&j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hW/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 to lock. h](j)}(h``struct folio *folio``h]j<)}(hj&h]hstruct folio *folio}(hhhj&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]j6)}(hThe folio to lock.h]hThe folio to lock.}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubj6)}(h**Description**h]jv)}(hj6'h]h Description}(hhhj8'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4'ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj&ubj6)}(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.}(hjN'hjL'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj&ubj6)}(hX"The folio lock is also held while write() is modifying the page to provide POSIX atomicity guarantees (as long as the write does not cross a page boundary). Other modifications to the data in the folio do not hold the folio lock and can race with writes, eg DMA and stores to mapped pages.h]hX"The folio lock is also held while write() is modifying the page to provide POSIX atomicity guarantees (as long as the write does not cross a page boundary). Other modifications to the data in the folio do not hold the folio lock and can race with writes, eg DMA and stores to mapped pages.}(hj]'hj['hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj&ubj6)}(h **Context**h]jv)}(hjl'h]hContext}(hhhjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjj'ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj&ubj6)}(hX-May sleep. If you need to acquire the locks of two or more folios, they must be in order of ascending index, if they are in the same address_space. If they are in different address_spaces, acquire the lock of the folio which belongs to the address_space which has the lowest address in memory first.h]hX-May sleep. If you need to acquire the locks of two or more folios, they must be in order of ascending index, if they are in the same address_space. If they are in different address_spaces, acquire the lock of the folio which belongs to the address_space which has the lowest address in memory first.}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM%ubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM%ubh)}(h lock_pageh]h)}(h lock_pageh]h lock_page}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj'hM%ubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhj'hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj'ubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]h)}(hpageh]hpage}(hhhj (hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj (ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jr)}jej'sb c.lock_pageasbuh1hhj'ubj)}(h h]h }(hhhj,(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj= )}(hj@ h]h*}(hhhj:(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj'ubh)}(hpageh]hpage}(hhhjG(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj'ubah}(h]h ]h"]h$]h&]jj uh1j hj'hhhj'hM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj'hM%ubah}(h]j'ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM.hj'hhubj)}(hhh]j6)}(h$Lock the folio containing this page.h]h$Lock the folio containing this page.}(hjt(hjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM$hjo(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hM%ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j(j3j(j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj(h]h Parameters}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM(hj(ubj)}(hhh]j)}(h(``struct page *page`` The page to lock. h](j)}(h``struct page *page``h]j<)}(hj(h]hstruct page *page}(hhhj(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]j6)}(hThe page to lock.h]hThe page to lock.}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(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(ubj6)}(h**Description**h]jv)}(hj(h]h Description}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM'hj(ubj6)}(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.}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM'hj(ubj6)}(h **Context**h]jv)}(hj)h]hContext}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM+hj(ubj6)}(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-)hj+)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM+hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhjZ)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV)hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM:ubj)}(h h]h }(hhhji)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV)hhhjh)hM:ubh)}(hfolio_lock_killableh]h)}(hfolio_lock_killableh]hfolio_lock_killable}(hhhj{)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjV)hhhjh)hM:ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj)hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj)ubj)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj)modnameN classnameNjijl)}jo]jr)}jej})sbc.folio_lock_killableasbuh1hhj)ubj)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj= )}(hj@ h]h*}(hhhj)hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)ubh)}(hfolioh]hfolio}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj)ubah}(h]h ]h"]h$]h&]jj uh1j hjV)hhhjh)hM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjR)hhhjh)hM:ubah}(h]jM)ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMBhjO)hhubj)}(hhh]j6)}(h1Lock this folio, interruptible by a fatal signal.h]h1Lock this folio, interruptible by a fatal signal.}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM9hj*hhubah}(h]h ]h"]h$]h&]uh1jhjO)hhhjh)hM:ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3*j3j3*j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=*h]h Parameters}(hhhj?*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;*ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM=hj7*ubj)}(hhh]j)}(h+``struct folio *folio`` The folio to lock. h](j)}(h``struct folio *folio``h]j<)}(hj\*h]hstruct folio *folio}(hhhj^*hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZ*ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM:hjV*ubj)}(hhh]j6)}(hThe folio to lock.h]hThe folio to lock.}(hjw*hju*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjq*hM:hjr*ubah}(h]h ]h"]h$]h&]uh1jhjV*ubeh}(h]h ]h"]h$]h&]uh1jhjq*hM:hjS*ubah}(h]h ]h"]h$]h&]uh1jhj7*ubj6)}(h**Description**h]jv)}(hj*h]h Description}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM<hj7*ubj6)}(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*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM<hj7*ubj6)}(h **Context**h]jv)}(hj*h]hContext}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM?hj7*ubj6)}(hMay sleep; see folio_lock().h]hMay sleep; see folio_lock().}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM?hj7*ubj6)}(h **Return**h]jv)}(hj*h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMAhj7*ubj6)}(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.}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM@hj7*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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)}(hj7h]hbool}(hhhj*+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 }(hhhj8+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&+hhhj7+hMubh)}(hfilemap_range_needs_writebackh]h)}(hfilemap_range_needs_writebackh]hfilemap_range_needs_writeback}(hhhjJ+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&+hhhj7+hMubj )}(hC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjf+hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjb+ubj)}(h h]h }(hhhjs+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb+ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]jr)}jejL+sbc.filemap_range_needs_writebackasbuh1hhjb+ubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb+ubj= )}(hj@ h]h*}(hhhj+hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjb+ubh)}(hmappingh]hmapping}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^+ubj )}(hloff_t start_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]j+c.filemap_range_needs_writebackasbuh1hhj+ubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(h start_byteh]h start_byte}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^+ubj )}(hloff_t end_byteh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj#,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ,ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj%,modnameN classnameNjijl)}jo]j+c.filemap_range_needs_writebackasbuh1hhj,ubj)}(h h]h }(hhhjA,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hend_byteh]hend_byte}(hhhjO,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^+ubeh}(h]h ]h"]h$]h&]jj uh1j hj&+hhhj7+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"+hhhj7+hMubah}(h]j+ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj+hhubj)}(hhh]j6)}(h*check if range potentially needs writebackh]h*check if range potentially needs writeback}(hj|,hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjw,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj7+hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j,j3j,j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj,h]h Parameters}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hW/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}(hhhj,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]j6)}(h#address space within which to checkh]h#address space within which to check}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMhj,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<)}(hj,h]hloff_t start_byte}(hhhj,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]j6)}(h&offset in bytes where the range startsh]h&offset in bytes where the range starts}(hj-hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj -hMhj -ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj -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}(hhhj/-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]j6)}(h0offset in bytes where the range ends (inclusive)h]h0offset in bytes where the range ends (inclusive)}(hjH-hjF-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjB-hMhjC-ubah}(h]h ]h"]h$]h&]uh1jhj'-ubeh}(h]h ]h"]h$]h&]uh1jhjB-hMhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubj6)}(h**Description**h]jv)}(hjh-h]h Description}(hhhjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjf-ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj,ubj6)}(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-hj~-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj,ubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj,ubj6)}(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}(hhhj-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, }(hg 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}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj-ubh otherwise.}(h otherwise.hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj-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 }(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj.hMubh)}(hreadahead_controlh]h)}(hj-h]hreadahead_control}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhj.hMubah}(h]j-ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj-hhubj)}(hhh]j6)}(hDescribes a readahead request.h]hDescribes a readahead request.}(hj;.hj9.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj6.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj.hMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jQ.j3jQ.j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj].hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjY.ubh:}(hjhjY.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjU.ubh literal_block)}(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; };}(hhhjx.ubah}(h]h ]h"]h$]h&]jj uh1jv.hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjU.ubj6)}(h **Members**h]jv)}(hj.h]hMembers}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjU.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}(hhhj.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]j6)}(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.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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<)}(hj.h]hmapping}(hhhj.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]j6)}(h!Readahead this filesystem object.h]h!Readahead this filesystem object.}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubj)}(h*``ra`` File readahead state. May be NULL.h](j)}(h``ra``h]j<)}(hj/h]hra}(hhhj/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]j6)}(h#File readahead state. May be NULL.h]h#File readahead state. May be NULL.}(hj6/hj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj1/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0/hMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjU.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubj6)}(h**Description**h]jv)}(hj^/h]h Description}(hhhj`/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\/ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj6)}(hA readahead request is for consecutive pages. Filesystems which implement the ->readahead method should call readahead_page() or readahead_page_batch() in a loop and attempt to start I/O against each page in the request.h]hA readahead request is for consecutive pages. Filesystems which implement the ->readahead method should call readahead_page() or readahead_page_batch() in a loop and attempt to start I/O against each page in the request.}(hjv/hjt/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubj6)}(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/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubh)}(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}(hhhj/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 }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMubh)}(hpage_cache_sync_readaheadh]h)}(hpage_cache_sync_readaheadh]hpage_cache_sync_readahead}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj/hMubj )}(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.)}(hj1h]hstruct}(hhhj/hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj/ubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0modnameN classnameNjijl)}jo]jr)}jej/sbc.page_cache_sync_readaheadasbuh1hhj/ubj)}(h h]h }(hhhj&0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj= )}(hj@ h]h*}(hhhj40hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj/ubh)}(hmappingh]hmapping}(hhhjA0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/ubj )}(hstruct file_ra_state *rah](j.)}(hj1h]hstruct}(hhhjZ0hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjV0ubj)}(h h]h }(hhhjg0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV0ubh)}(hhh]h)}(h file_ra_stateh]h file_ra_state}(hhhjx0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju0ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjz0modnameN classnameNjijl)}jo]j"0c.page_cache_sync_readaheadasbuh1hhjV0ubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV0ubj= )}(hj@ h]h*}(hhhj0hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjV0ubh)}(hrah]hra}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/ubj )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhj0hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj0ubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]h)}(hfileh]hfile}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0modnameN classnameNjijl)}jo]j"0c.page_cache_sync_readaheadasbuh1hhj0ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj= )}(hj@ h]h*}(hhhj1hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj0ubh)}(hfileh]hfile}(hhhj!1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj=1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj?1modnameN classnameNjijl)}jo]j"0c.page_cache_sync_readaheadasbuh1hhj61ubj)}(h h]h }(hhhj[1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj61ubh)}(hindexh]hindex}(hhhji1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj61ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/ubj )}(hunsigned long req_counth](j)}(hunsignedh]hunsigned}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~1ubj)}(hlongh]hlong}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~1ubh)}(h req_counth]h req_count}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/ubeh}(h]h ]h"]h$]h&]jj uh1j hj/hhhj/hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhj/hMubah}(h]j/ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj/hhubj)}(hhh]j6)}(hgeneric file readaheadh]hgeneric file readahead}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj)}(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<)}(hj&2h]hstruct address_space *mapping}(hhhj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj 2ubj)}(hhh]j6)}(h7address_space which holds the pagecache and I/O vectorsh]h7address_space which holds the pagecache and I/O vectors}(hjA2hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;2hMhj<2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubeh}(h]h ]h"]h$]h&]uh1jhj;2hMhj2ubj)}(hK``struct file_ra_state *ra`` file_ra_state which holds the readahead state h](j)}(h``struct file_ra_state *ra``h]j<)}(hj_2h]hstruct file_ra_state *ra}(hhhja2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj]2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjY2ubj)}(hhh]j6)}(h-file_ra_state which holds the readahead stateh]h-file_ra_state which holds the readahead state}(hjz2hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjt2hMhju2ubah}(h]h ]h"]h$]h&]uh1jhjY2ubeh}(h]h ]h"]h$]h&]uh1jhjt2hMhj2ubj)}(hA``struct file *file`` Used by the filesystem for authentication. h](j)}(h``struct file *file``h]j<)}(hj2h]hstruct file *file}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj)}(hhh]j6)}(h*Used by the filesystem for authentication.h]h*Used by the filesystem for authentication.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h2``pgoff_t index`` Index of first page to be read. h](j)}(h``pgoff_t index``h]j<)}(hj2h]h pgoff_t index}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj2ubj)}(hhh]j6)}(hIndex of first page to be read.h]hIndex of first page to be read.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(hL``unsigned long req_count`` Total number of pages being read by the caller. h](j)}(h``unsigned long req_count``h]j<)}(hj 3h]hunsigned long req_count}(hhhj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj3ubj)}(hhh]j6)}(h/Total number of pages being read by the caller.h]h/Total number of pages being read by the caller.}(hj%3hj#3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM hj 3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hjE3h]h Description}(hhhjG3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjC3ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj2ubj6)}(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.}(hj]3hj[3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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, pgoff_t index, 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, pgoff_t index, unsigned long req_count)h](j)}(hvoidh]hvoid}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubh)}(hpage_cache_async_readaheadh]h)}(hpage_cache_async_readaheadh]hpage_cache_async_readahead}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hMubj )}(h(struct address_space *mapping, struct file_ra_state *ra, struct file *file, struct folio *folio, pgoff_t index, unsigned long req_count)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3ubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj3modnameN classnameNjijl)}jo]jr)}jej3sbc.page_cache_async_readaheadasbuh1hhj3ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj3ubh)}(hmappingh]hmapping}(hhhj 4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(hstruct file_ra_state *rah](j.)}(hj1h]hstruct}(hhhj94hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj54ubj)}(h h]h }(hhhjF4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj54ubh)}(hhh]h)}(h file_ra_stateh]h file_ra_state}(hhhjW4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT4ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjY4modnameN classnameNjijl)}jo]j4c.page_cache_async_readaheadasbuh1hhj54ubj)}(h h]h }(hhhju4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj54ubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj54ubh)}(hrah]hra}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj54ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(hstruct file *fileh](j.)}(hj1h]hstruct}(hhhj4hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj4ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]h)}(hfileh]hfile}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj4modnameN classnameNjijl)}jo]j4c.page_cache_async_readaheadasbuh1hhj4ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj4ubh)}(hfileh]hfile}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj5hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj5ubj)}(h h]h }(hhhj&5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj75hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj45ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj95modnameN classnameNjijl)}jo]j4c.page_cache_async_readaheadasbuh1hhj5ubj)}(h h]h }(hhhjU5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj= )}(hj@ h]h*}(hhhjc5hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj5ubh)}(hfolioh]hfolio}(hhhjp5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj5modnameN classnameNjijl)}jo]j4c.page_cache_async_readaheadasbuh1hhj5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hindexh]hindex}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(hunsigned long req_counth](j)}(hunsignedh]hunsigned}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hlongh]hlong}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(h req_counth]h req_count}(hhhj 6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubeh}(h]h ]h"]h$]h&]jj uh1j hj3hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hMubah}(h]j}3ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM'hj3hhubj)}(hhh]j6)}(hfile readahead for marked pagesh]hfile readahead for marked pages}(hj66hj46hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj16hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jL6j3jL6j4uh1hhhhjhNhNubjl)}(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 at **index** which triggered the readahead call. ``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_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](j6)}(h**Parameters**h]jv)}(hjV6h]h Parameters}(hhhjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjT6ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjP6ubj)}(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<)}(hju6h]hstruct address_space *mapping}(hhhjw6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjs6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjo6ubj)}(hhh]j6)}(h7address_space which holds the pagecache and I/O vectorsh]h7address_space which holds the pagecache and I/O vectors}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjo6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjl6ubj)}(hK``struct file_ra_state *ra`` file_ra_state which holds the readahead state h](j)}(h``struct file_ra_state *ra``h]j<)}(hj6h]hstruct file_ra_state *ra}(hhhj6hhhNhNubah}(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.hhMhj6ubj)}(hhh]j6)}(h-file_ra_state which holds the readahead stateh]h-file_ra_state which holds the readahead state}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjl6ubj)}(hA``struct file *file`` Used by the filesystem for authentication. h](j)}(h``struct file *file``h]j<)}(hj6h]hstruct file *file}(hhhj6hhhNhNubah}(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.hhMhj6ubj)}(hhh]j6)}(h*Used by the filesystem for authentication.h]h*Used by the filesystem for authentication.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjl6ubj)}(hS``struct folio *folio`` The folio at **index** which triggered the readahead call. h](j)}(h``struct folio *folio``h]j<)}(hj 7h]hstruct folio *folio}(hhhj"7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj7ubj)}(hhh]j6)}(h:The folio at **index** which triggered the readahead call.h](h The folio at }(h The folio at hj97hhhNhNubjv)}(h **index**h]hindex}(hhhjB7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj97ubh$ which triggered the readahead call.}(h$ which triggered the readahead call.hj97hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj57hMhj67ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj57hMhjl6ubj)}(h2``pgoff_t index`` Index of first page to be read. h](j)}(h``pgoff_t index``h]j<)}(hjm7h]h pgoff_t index}(hhhjo7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjk7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjg7ubj)}(hhh]j6)}(hIndex of first page to be read.h]hIndex of first page to be read.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjg7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjl6ubj)}(hL``unsigned long req_count`` Total number of pages being read by the caller. h](j)}(h``unsigned long req_count``h]j<)}(hj7h]hunsigned long req_count}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM hj7ubj)}(hhh]j6)}(h/Total number of pages being read by the caller.h]h/Total number of pages being read by the caller.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hjl6ubeh}(h]h ]h"]h$]h&]uh1jhjP6ubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM"hjP6ubj6)}(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.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM"hjP6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_page (C function)c.readahead_pagehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>struct page * readahead_page (struct readahead_control *ractl)h]h)}(h9ubj)}(hhh]j)}(hC``struct readahead_control *ractl`` The current readahead request. h](j)}(h#``struct readahead_control *ractl``h]j<)}(hjc9h]hstruct readahead_control *ractl}(hhhje9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hja9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMFhj]9ubj)}(hhh]j6)}(hThe current readahead request.h]hThe current readahead request.}(hj~9hj|9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjx9hMFhjy9ubah}(h]h ]h"]h$]h&]uh1jhj]9ubeh}(h]h ]h"]h$]h&]uh1jhjx9hMFhjZ9ubah}(h]h ]h"]h$]h&]uh1jhj>9ubj6)}(h **Context**h]jv)}(hj9h]hContext}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMHhj>9ubj6)}(hThe page is locked and has an elevated refcount. The caller should decreases the refcount once the page has been submitted for I/O and unlock the page once all I/O to that page has completed.h]hThe page is locked and has an elevated refcount. The caller should decreases the refcount once the page has been submitted for I/O and unlock the page once all I/O to that page has completed.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMHhj>9ubj6)}(h **Return**h]jv)}(hj9h]hReturn}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMLhj>9ubj6)}(h7A pointer to the next page, or ``NULL`` if we are done.h](hA pointer to the next page, or }(hA pointer to the next page, or hj9hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubh if we are done.}(h if we are done.hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMKhj>9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj:hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj:hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMVubj)}(h h]h }(hhhj,:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj+:hMVubh)}(hhh]h)}(hfolioh]hfolio}(hhhj=:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj::ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj?:modnameN classnameNjijl)}jo]jr)}jereadahead_foliosbc.readahead_folioasbuh1hhj:hhhj+:hMVubj)}(h h]h }(hhhj^:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj+:hMVubj= )}(hj@ h]h*}(hhhjl:hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj:hhhj+:hMVubh)}(hreadahead_folioh]h)}(hj[:h]hreadahead_folio}(hhhj}:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj+:hMVubj )}(h!(struct readahead_control *ractl)h]j )}(hstruct readahead_control *ractlh](j.)}(hj1h]hstruct}(hhhj:hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj:ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj:modnameN classnameNjijl)}jo]jY:c.readahead_folioasbuh1hhj:ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj= )}(hj@ h]h*}(hhhj:hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj:ubh)}(hractlh]hractl}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:ubah}(h]h ]h"]h$]h&]jj uh1j hj:hhhj+:hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj+:hMVubah}(h]j:ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM\hj:hhubj)}(hhh]j6)}(hGet the next folio to read.h]hGet the next folio to read.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMUhj;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj+:hMVubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2;j3j2;j4uh1hhhhjhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj<;h]h Parameters}(hhhj>;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:;ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMYhj6;ubj)}(hhh]j)}(hC``struct readahead_control *ractl`` The current readahead request. h](j)}(h#``struct readahead_control *ractl``h]j<)}(hj[;h]hstruct readahead_control *ractl}(hhhj];hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjY;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMVhjU;ubj)}(hhh]j6)}(hThe current readahead request.h]hThe current readahead request.}(hjv;hjt;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjp;hMVhjq;ubah}(h]h ]h"]h$]h&]uh1jhjU;ubeh}(h]h ]h"]h$]h&]uh1jhjp;hMVhjR;ubah}(h]h ]h"]h$]h&]uh1jhj6;ubj6)}(h **Context**h]jv)}(hj;h]hContext}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMXhj6;ubj6)}(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.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMXhj6;ubj6)}(h **Return**h]jv)}(hj;h]hReturn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhM[hj6;ubj6)}(h8A pointer to the next folio, or ``NULL`` if we are done.h](h A pointer to the next folio, or }(h A pointer to the next folio, or hj;hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;ubh if we are done.}(h if we are done.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMZhj6;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_page_batch (C macro)c.readahead_page_batchhNtauh1hhjhhhNhNubh)}(hhh](h)}(hreadahead_page_batchh]h)}(hreadahead_page_batchh]h)}(hreadahead_page_batchh]h)}(hj<h]hreadahead_page_batch}(hhhj<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:85: ./include/linux/pagemap.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj-<hMubah}(h]j <ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj <hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj <hhhj-<hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jG<j3jG<j4uh1hhhhjhNhNubj6)}(h%``readahead_page_batch (rac, array)``h]j<)}(hjM<h]h!readahead_page_batch (rac, array)}(hhhjO<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjK<ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjhhubjR)}(hhh]j6)}(hGet a batch of pages to read.h]hGet a batch of pages to read.}(hjh<hjf<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjc<ubah}(h]h ]h"]h$]h&]uh1jQhjhhhNhNubjl)}(hX**Parameters** ``rac`` The current readahead request. ``array`` An array of pointers to struct page. **Context** The pages are locked and have an elevated refcount. The caller should decreases the refcount once the page has been submitted for I/O and unlock the page once all I/O to that page has completed. **Return** The number of pages placed in the array. 0 indicates the request is complete.h](j6)}(h**Parameters**h]jv)}(hj<h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj{<ubj)}(hhh](j)}(h'``rac`` The current readahead request. h](j)}(h``rac``h]j<)}(hj<h]hrac}(hhhj<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]j6)}(hThe current readahead request.h]hThe current readahead request.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(h/``array`` An array of pointers to struct page. h](j)}(h ``array``h]j<)}(hj<h]harray}(hhhj<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]j6)}(h$An array of pointers to struct page.h]h$An array of pointers to struct page.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj{<ubj6)}(h **Context**h]jv)}(hj=h]hContext}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj{<ubj6)}(hThe pages are locked and have an elevated refcount. The caller should decreases the refcount once the page has been submitted for I/O and unlock the page once all I/O to that page has completed.h]hThe pages are locked and have an elevated refcount. The caller should decreases the refcount once the page has been submitted for I/O and unlock the page once all I/O to that page has completed.}(hj,=hj*=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj{<ubj6)}(h **Return**h]jv)}(hj;=h]hReturn}(hhhj==hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9=ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj{<ubj6)}(hNThe number of pages placed in the array. 0 indicates the request is complete.h]hNThe number of pages placed in the array. 0 indicates the request is complete.}(hjS=hjQ=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj{<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj=modnameN classnameNjijl)}jo]jr)}je readahead_possbc.readahead_posasbuh1hhj|=hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|=hhhj=hMubh)}(h readahead_posh]h)}(hj=h]h readahead_pos}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|=hhhj=hMubj )}(h(struct readahead_control *rac)h]j )}(hstruct readahead_control *rach](j.)}(hj1h]hstruct}(hhhj=hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj=modnameN classnameNjijl)}jo]j=c.readahead_posasbuh1hhj=ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj= )}(hj@ h]h*}(hhhj>hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj=ubh)}(hrach]hrac}(hhhj)>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubah}(h]h ]h"]h$]h&]jj uh1j hj|=hhhj=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjx=hhhj=hMubah}(h]js=ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhju=hhubj)}(hhh]j6)}(h8The byte offset into the file of this readahead request.h]h8The byte offset into the file of this readahead request.}(hjV>hjT>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjQ>hhubah}(h]h ]h"]h$]h&]uh1jhju=hhhj=hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jl>j3jl>j4uh1hhhhjhNhNubjl)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j6)}(h**Parameters**h]jv)}(hjv>h]h Parameters}(hhhjx>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt>ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjp>ubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j<)}(hj>h]hstruct readahead_control *rac}(hhhj>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]j6)}(hThe readahead request.h]hThe readahead request.}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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>ubah}(h]h ]h"]h$]h&]uh1jhjp>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj>modnameN classnameNjijl)}jo]jr)}jereadahead_lengthsbc.readahead_lengthasbuh1hhj>hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj?hMubh)}(hreadahead_lengthh]h)}(hj?h]hreadahead_length}(hhhj&?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj?hMubj )}(h(struct readahead_control *rac)h]j )}(hstruct readahead_control *rach](j.)}(hj1h]hstruct}(hhhjA?hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj=?ubj)}(h h]h }(hhhjN?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=?ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhj_?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\?ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetja?modnameN classnameNjijl)}jo]j?c.readahead_lengthasbuh1hhj=?ubj)}(h h]h }(hhhj}?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=?ubj= )}(hj@ h]h*}(hhhj?hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj=?ubh)}(hrach]hrac}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj9?ubah}(h]h ]h"]h$]h&]jj uh1j hj>hhhj?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj?hMubah}(h]j>ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj>hhubj)}(hhh]j6)}(h.The number of bytes in this readahead request.h]h.The number of bytes in this readahead request.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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&]j1j,j2j?j3j?j4uh1hhhhjhNhNubjl)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j6)}(h**Parameters**h]jv)}(hj?h]h Parameters}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj?ubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j<)}(hj@h]hstruct readahead_control *rac}(hhhj@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]j6)}(hThe readahead request.h]hThe readahead request.}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/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?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(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}(hhhja@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjc@modnameN classnameNjijl)}jo]jr)}jereadahead_indexsbc.readahead_indexasbuh1hhjZ@hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ@hhhj@hMubh)}(hreadahead_indexh]h)}(hj@h]hreadahead_index}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZ@hhhj@hMubj )}(h(struct readahead_control *rac)h]j )}(hstruct readahead_control *rach](j.)}(hj1h]hstruct}(hhhj@hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]h)}(hreadahead_controlh]hreadahead_control}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj@modnameN classnameNjijl)}jo]j}@c.readahead_indexasbuh1hhj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj= )}(hj@ h]h*}(hhhj@hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj@ubh)}(hrach]hrac}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubah}(h]h ]h"]h$]h&]jj uh1j hjZ@hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjV@hhhj@hMubah}(h]jQ@ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjS@hhubj)}(hhh]j6)}(h6The index of the first page in this readahead request.h]h6The index of the first page in this readahead request.}(hj4Ahj2AhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhj/Ahhubah}(h]h ]h"]h$]h&]uh1jhjS@hhhj@hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jJAj3jJAj4uh1hhhhjhNhNubjl)}(hJ**Parameters** ``struct readahead_control *rac`` The readahead request.h](j6)}(h**Parameters**h]jv)}(hjTAh]h Parameters}(hhhjVAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRAubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjNAubj)}(hhh]j)}(h8``struct readahead_control *rac`` The readahead request.h](j)}(h!``struct readahead_control *rac``h]j<)}(hjsAh]hstruct readahead_control *rac}(hhhjuAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjmAubj)}(hhh]j6)}(hThe readahead request.h]hThe readahead request.}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:85: ./include/linux/pagemap.hhMhjAubah}(h]h ]h"]h$]h&]uh1jhjmAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjjAubah}(h]h ]h"]h$]h&]uh1jhjNAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreadahead_count (C function)c.readahead_counthNtauh1hhjhhhNhNubh)}(hhh](h)}(hUubj)}(h h]h }(hhhjOUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Uubj)}(hcharh]hchar}(hhhj]UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Uubj)}(h h]h }(hhhjkUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Uubj= )}(hj@ h]h*}(hhhjyUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj>Uubh)}(hnameh]hname}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>Uubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:Uubj )}(hstruct device *devh](j.)}(hj1h]hstruct}(hhhjUhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjUubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjUmodnameN classnameNjijl)}jo]jUc.dma_pool_createasbuh1hhjUubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj= )}(hj@ h]h*}(hhhjUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjUubh)}(hdevh]hdev}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:Uubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjVmodnameN classnameNjijl)}jo]jUc.dma_pool_createasbuh1hhj Vubj)}(h h]h }(hhhj0VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Vubh)}(hsizeh]hsize}(hhhj>VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Vubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:Uubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjZVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWVubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj\VmodnameN classnameNjijl)}jo]jUc.dma_pool_createasbuh1hhjSVubj)}(h h]h }(hhhjxVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSVubh)}(halignh]halign}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:Uubj )}(hsize_t boundaryh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjVmodnameN classnameNjijl)}jo]jUc.dma_pool_createasbuh1hhjVubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hboundaryh]hboundary}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj:Uubeh}(h]h ]h"]h$]h&]jj uh1j hjThhhjThKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjThKubah}(h]jTah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjThhubj)}(hhh]j6)}(h4Creates a pool of consistent memory blocks, for dma.h]h4Creates a pool of consistent memory blocks, for dma.}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jWj3jWj4uh1hhhhjThNhNubjl)}(hX**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 **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](j6)}(h**Parameters**h]jv)}(hjWh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chKhjWubj)}(hhh](j)}(h3``const char *name`` name of pool, for diagnostics h](j)}(h``const char *name``h]j<)}(hj:Wh]hconst char *name}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:ZhMbhj;Zubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj:ZhMbhjZubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h **Context**h]jv)}(hj`Zh]hContext}(hhhjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^Zubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMdhjZubj6)}(h!in_interrupt()h]h!in_interrupt()}(hjxZhjvZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMchjZubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMehjZubj6)}(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.}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMdhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_pool_alloc (C function)c.dma_pool_allochNtauh1hhjThhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhMubj= )}(hj@ h]h*}(hhhjZhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjZhhhjZhMubh)}(hdma_pool_alloch]h)}(hdma_pool_alloch]hdma_pool_alloc}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhMubj )}(h<(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)h](j )}(hstruct dma_pool *poolh](j.)}(hj1h]hstruct}(hhhj[hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj[ubj)}(h h]h }(hhhj#[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hhhj4[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6[modnameN classnameNjijl)}jo]jr)}jejZsbc.dma_pool_allocasbuh1hhj[ubj)}(h h]h }(hhhjT[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj= )}(hj@ h]h*}(hhhjb[hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj[ubh)}(hpoolh]hpool}(hhhjo[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hgfp_t mem_flagsh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[modnameN classnameNjijl)}jo]jP[c.dma_pool_allocasbuh1hhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(h mem_flagsh]h mem_flags}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hdma_addr_t *handleh](h)}(hhh]h)}(h dma_addr_th]h dma_addr_t}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[modnameN classnameNjijl)}jo]jP[c.dma_pool_allocasbuh1hhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj= )}(hj@ h]h*}(hhhj[hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj[ubh)}(hhandleh]hhandle}(hhhj \hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubeh}(h]h ]h"]h$]h&]jj uh1j hjZhhhjZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhMubah}(h]jZah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjZhhubj)}(hhh]j6)}(h get a block of consistent memoryh]h get a block of consistent memory}(hj9\hj7\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj4\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jO\j3jO\j4uh1hhhhjThNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjY\h]h Parameters}(hhhj[\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjW\ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjS\ubj)}(hhh](j)}(h?``struct dma_pool *pool`` dma pool that will produce the block h](j)}(h``struct dma_pool *pool``h]j<)}(hjx\h]hstruct dma_pool *pool}(hhhjz\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:97: ./mm/dmapool.chMhjr\ubj)}(hhh]j6)}(h$dma pool that will produce the blockh]h$dma pool that will produce the block}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhjr\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjo\ubj)}(h"``gfp_t mem_flags`` GFP_* bitmask h](j)}(h``gfp_t mem_flags``h]j<)}(hj\h]hgfp_t mem_flags}(hhhj\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:97: ./mm/dmapool.chMhj\ubj)}(hhh]j6)}(h GFP_* bitmaskh]h GFP_* bitmask}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjo\ubj)}(h7``dma_addr_t *handle`` pointer to dma address of block h](j)}(h``dma_addr_t *handle``h]j<)}(hj\h]hdma_addr_t *handle}(hhhj\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:97: ./mm/dmapool.chMhj\ubj)}(hhh]j6)}(hpointer to dma address of blockh]hpointer to dma address of block}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjo\ubeh}(h]h ]h"]h$]h&]uh1jhjS\ubj6)}(h **Return**h]jv)}(hj%]h]hReturn}(hhhj']hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#]ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjS\ubj6)}(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, }(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, hj;]hhhNhNubj<)}(h``NULL``h]hNULL}(hhhjD]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;]ubh is returned.}(h is returned.hj;]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjS\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdma_pool_free (C function)c.dma_pool_freehNtauh1hhjThhhNhNubh)}(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}(hhhj~]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz]hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz]hhhj]hMubh)}(h dma_pool_freeh]h)}(h dma_pool_freeh]h dma_pool_free}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjz]hhhj]hMubj )}(h4(struct dma_pool *pool, void *vaddr, dma_addr_t dma)h](j )}(hstruct dma_pool *poolh](j.)}(hj1h]hstruct}(hhhj]hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj]ubj)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj]modnameN classnameNjijl)}jo]jr)}jej]sbc.dma_pool_freeasbuh1hhj]ubj)}(h h]h }(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj= )}(hj@ h]h*}(hhhj^hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj]ubh)}(hpoolh]hpool}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubj )}(h void *vaddrh](j)}(hvoidh]hvoid}(hhhj-^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)^ubj)}(h h]h }(hhhj;^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)^ubj= )}(hj@ h]h*}(hhhjI^hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)^ubh)}(hvaddrh]hvaddr}(hhhjV^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubj )}(hdma_addr_t dmah](h)}(hhh]h)}(h dma_addr_th]h dma_addr_t}(hhhjr^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjt^modnameN classnameNjijl)}jo]j]c.dma_pool_freeasbuh1hhjk^ubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk^ubh)}(hdmah]hdma}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj]ubeh}(h]h ]h"]h$]h&]jj uh1j hjz]hhhj]hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjv]hhhj]hMubah}(h]jq]ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjs]hhubj)}(hhh]j6)}(hput block back into dma poolh]hput block back into dma pool}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhjs]hhhj]hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j^j3j^j4uh1hhhhjThNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj^ubj)}(hhh](j)}(h9``struct dma_pool *pool`` the dma pool holding the block h](j)}(h``struct dma_pool *pool``h]j<)}(hj _h]hstruct dma_pool *pool}(hhhj _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:97: ./mm/dmapool.chMhj_ubj)}(hhh]j6)}(hthe dma pool holding the blockh]hthe dma pool holding the block}(hj%_hj#_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj _ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj_ubj)}(h)``void *vaddr`` virtual address of block h](j)}(h``void *vaddr``h]j<)}(hjC_h]h void *vaddr}(hhhjE_hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjA_ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj=_ubj)}(hhh]j6)}(hvirtual address of blockh]hvirtual address of block}(hj^_hj\_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX_hMhjY_ubah}(h]h ]h"]h$]h&]uh1jhj=_ubeh}(h]h ]h"]h$]h&]uh1jhjX_hMhj_ubj)}(h(``dma_addr_t dma`` dma address of block h](j)}(h``dma_addr_t dma``h]j<)}(hj|_h]hdma_addr_t dma}(hhhj~_hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjz_ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjv_ubj)}(hhh]j6)}(hdma address of blockh]hdma address of block}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjv_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hj_h]h Description}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj^ubj6)}(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_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_pool_create (C function)c.dmam_pool_createhNtauh1hhjThhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj_hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj_hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hhhj `hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj `hMubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]jr)}jedmam_pool_createsbc.dmam_pool_createasbuh1hhj_hhhj `hMubj)}(h h]h }(hhhj<`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj `hMubj= )}(hj@ h]h*}(hhhjJ`hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj_hhhj `hMubh)}(hdmam_pool_createh]h)}(hj9`h]hdmam_pool_create}(hhhj[`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhj `hMubj )}(hT(const char *name, struct device *dev, size_t size, size_t align, size_t allocation)h](j )}(hconst char *nameh](j.)}(hjh]hconst}(hhhjv`hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjr`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr`ubj)}(hcharh]hchar}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr`ubj= )}(hj@ h]h*}(hhhj`hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjr`ubh)}(hnameh]hname}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn`ubj )}(hstruct device *devh](j.)}(hj1h]hstruct}(hhhj`hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]h)}(hdeviceh]hdevice}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]j7`c.dmam_pool_createasbuh1hhj`ubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj= )}(hj@ h]h*}(hhhjahhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj`ubh)}(hdevh]hdev}(hhhj*ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn`ubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjFahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjHamodnameN classnameNjijl)}jo]j7`c.dmam_pool_createasbuh1hhj?aubj)}(h h]h }(hhhjdahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?aubh)}(hsizeh]hsize}(hhhjrahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?aubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn`ubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjamodnameN classnameNjijl)}jo]j7`c.dmam_pool_createasbuh1hhjaubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(halignh]halign}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn`ubj )}(hsize_t allocationh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjamodnameN classnameNjijl)}jo]j7`c.dmam_pool_createasbuh1hhjaubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(h allocationh]h allocation}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn`ubeh}(h]h ]h"]h$]h&]jj uh1j hj_hhhj `hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhj `hMubah}(h]j_ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj_hhubj)}(hhh]j6)}(hManaged dma_pool_create()h]hManaged dma_pool_create()}(hj/bhj-bhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj*bhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj `hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jEbj3jEbj4uh1hhhhjThNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjObh]h Parameters}(hhhjQbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMbubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjIbubj)}(hhh](j)}(h3``const char *name`` name of pool, for diagnostics h](j)}(h``const char *name``h]j<)}(hjnbh]hconst char *name}(hhhjpbhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjlbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjhbubj)}(hhh]j6)}(hname of pool, for diagnosticsh]hname of pool, for diagnostics}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjhbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjebubj)}(h9``struct device *dev`` device that will be doing the DMA h](j)}(h``struct device *dev``h]j<)}(hjbh]hstruct device *dev}(hhhjbhhhNhNubah}(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.chMhjbubj)}(hhh]j6)}(h!device that will be doing the DMAh]h!device that will be doing the DMA}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjebubj)}(h1``size_t size`` size of the blocks in this pool. h](j)}(h``size_t size``h]j<)}(hjbh]h size_t size}(hhhjbhhhNhNubah}(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.chMhjbubj)}(hhh]j6)}(h size of the blocks in this pool.h]h size of the blocks in this pool.}(hjbhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjebubj)}(hJ``size_t align`` alignment requirement for blocks; must be a power of two h](j)}(h``size_t align``h]j<)}(hjch]h size_t align}(hhhjchhhNhNubah}(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.chMhjcubj)}(hhh]j6)}(h8alignment requirement for blocks; must be a power of twoh]h8alignment requirement for blocks; must be a power of two}(hj4chj2chhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.chMhj/cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj.chMhjebubj)}(hJ``size_t allocation`` returned blocks won't cross this boundary (or zero) h](j)}(h``size_t allocation``h]j<)}(hjRch]hsize_t allocation}(hhhjTchhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPcubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjLcubj)}(hhh]j6)}(h3returned blocks won't cross this boundary (or zero)h]h5returned blocks won’t cross this boundary (or zero)}(hjmchjkchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjgchMhjhcubah}(h]h ]h"]h$]h&]uh1jhjLcubeh}(h]h ]h"]h$]h&]uh1jhjgchMhjebubeh}(h]h ]h"]h$]h&]uh1jhjIbubj6)}(h**Description**h]jv)}(hjch]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjIbubj6)}(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.}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjIbubj6)}(h **Return**h]jv)}(hjch]hReturn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjIbubj6)}(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 }(hEa managed dma allocation pool with the requested characteristics, or hjchhhNhNubj<)}(h``NULL``h]hNULL}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubh if one can’t be created.}(h if one can't be created.hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjIbubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdmam_pool_destroy (C function)c.dmam_pool_destroyhNtauh1hhjThhhNhNubh)}(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}(hhhj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj dhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj dhhhjdhMubh)}(hdmam_pool_destroyh]h)}(hdmam_pool_destroyh]hdmam_pool_destroy}(hhhj.dhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*dubah}(h]h ](jjeh"]h$]h&]jj uh1hhj dhhhjdhMubj )}(h(struct dma_pool *pool)h]j )}(hstruct dma_pool *poolh](j.)}(hj1h]hstruct}(hhhjJdhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjFdubj)}(h h]h }(hhhjWdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFdubh)}(hhh]h)}(hdma_poolh]hdma_pool}(hhhjhdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjedubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjjdmodnameN classnameNjijl)}jo]jr)}jej0dsbc.dmam_pool_destroyasbuh1hhjFdubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFdubj= )}(hj@ h]h*}(hhhjdhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjFdubh)}(hpoolh]hpool}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFdubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBdubah}(h]h ]h"]h$]h&]jj uh1j hj dhhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhMubah}(h]jdah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjdhhubj)}(hhh]j6)}(hManaged dma_pool_destroy()h]hManaged dma_pool_destroy()}(hjdhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jdj3jdj4uh1hhhhjThNhNubjl)}(hy**Parameters** ``struct dma_pool *pool`` dma pool that will be destroyed **Description** Managed dma_pool_destroy().h](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjdubj)}(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}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj eubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhj eubj)}(hhh]j6)}(hdma pool that will be destroyedh]hdma pool that will be destroyed}(hj*ehj(ehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$ehMhj%eubah}(h]h ]h"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]uh1jhj$ehMhjeubah}(h]h ]h"]h$]h&]uh1jhjdubj6)}(h**Description**h]jv)}(hjJeh]h Description}(hhhjLehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHeubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjdubj6)}(hManaged dma_pool_destroy().h]hManaged dma_pool_destroy().}(hjbehj`ehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:97: ./mm/dmapool.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhjThhhNhNubeh}(h] dma-poolsah ]h"] dma poolsah$]h&]uh1hhhhhhhhK_ubh)}(hhh](h)}(h More Memory Management Functionsh]h More Memory Management Functions}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ehhhhhKeubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzap_vma_ptes (C function)c.zap_vma_pteshNtauh1hhj~ehhhNhNubh)}(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}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubh)}(h zap_vma_ptesh]h)}(h zap_vma_ptesh]h zap_vma_ptes}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjehMubj )}(hG(struct vm_area_struct *vma, unsigned long address, unsigned long size)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjehhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjeubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjfmodnameN classnameNjijl)}jo]jr)}jejesbc.zap_vma_ptesasbuh1hhjeubj)}(h h]h }(hhhj#fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj= )}(hj@ h]h*}(hhhj1fhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjeubh)}(hvmah]hvma}(hhhj>fhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjeubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjWfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSfubj)}(h h]h }(hhhjefhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSfubj)}(hlongh]hlong}(hhhjsfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSfubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSfubh)}(haddressh]haddress}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSfubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjeubj )}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hlongh]hlong}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hsizeh]hsize}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjeubeh}(h]h ]h"]h$]h&]jj uh1j hjehhhjehMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjehhubj)}(hhh]j6)}(hremove ptes mapping the vmah]hremove ptes mapping the vma}(hj ghj ghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j#gj3j#gj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj-gh]h Parameters}(hhhj/ghhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+gubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj'gubj)}(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<)}(hjLgh]hstruct vm_area_struct *vma}(hhhjNghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjFgubj)}(hhh]j6)}(h(vm_area_struct holding ptes to be zappedh]h(vm_area_struct holding ptes to be zapped}(hjgghjeghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjaghMhjbgubah}(h]h ]h"]h$]h&]uh1jhjFgubeh}(h]h ]h"]h$]h&]uh1jhjaghMhjCgubj)}(h;``unsigned long address`` starting address of pages to zap h](j)}(h``unsigned long address``h]j<)}(hjgh]hunsigned long address}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjgubj)}(hhh]j6)}(h starting address of pages to zaph]h starting address of pages to zap}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjCgubj)}(h.``unsigned long size`` number of bytes to zap h](j)}(h``unsigned long size``h]j<)}(hjgh]hunsigned long size}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjgubj)}(hhh]j6)}(hnumber of bytes to zaph]hnumber of bytes to zap}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjCgubeh}(h]h ]h"]h$]h&]uh1jhj'gubj6)}(h**Description**h]jv)}(hjgh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj'gubj6)}(h:This function only unmaps ptes assigned to VM_PFNMAP vmas.h]h:This function only unmaps ptes assigned to VM_PFNMAP vmas.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj'gubj6)}(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.}(hj hhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj'gubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_insert_pages (C function)c.vm_insert_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjMhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMCubj)}(h h]h }(hhhj\hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhhj[hhMCubh)}(hvm_insert_pagesh]h)}(hvm_insert_pagesh]hvm_insert_pages}(hhhjnhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhhj[hhMCubj )}(hY(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjhhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjhmodnameN classnameNjijl)}jo]jr)}jejphsbc.vm_insert_pagesasbuh1hhjhubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj= )}(hj@ h]h*}(hhhjhhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhubh)}(hvmah]hvma}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hhhj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hlongh]hlong}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hhhj&ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(haddrh]haddr}(hhhj4ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubj )}(hstruct page **pagesh](j.)}(hj1h]hstruct}(hhhjMihhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjIiubj)}(h h]h }(hhhjZihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIiubh)}(hhh]h)}(hpageh]hpage}(hhhjkihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmimodnameN classnameNjijl)}jo]jhc.vm_insert_pagesasbuh1hhjIiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIiubj= )}(hj@ h]h*}(hhhjihhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjIiubj= )}(hj@ h]h*}(hhhjihhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjIiubh)}(hpagesh]hpages}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubj )}(hunsigned long *numh](j)}(hunsignedh]hunsigned}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hlongh]hlong}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj= )}(hj@ h]h*}(hhhjjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjiubh)}(hnumh]hnum}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubeh}(h]h ]h"]h$]h&]jj uh1j hjIhhhhj[hhMCubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhhj[hhMCubah}(h]j@hah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMPhjBhhhubj)}(hhh]j6)}(h;insert multiple pages into user vma, batching the pmd lock.h]h;insert multiple pages into user vma, batching the pmd lock.}(hjPreferred over vm_insert_page() when inserting multiple pages.h]h>Preferred over vm_insert_page() when inserting multiple pages.}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMIhjVjubj6)}(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.}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMKhjVjubj6)}(h3The same restrictions apply as in vm_insert_page().h]h3The same restrictions apply as in vm_insert_page().}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMNhjVjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_insert_page (C function)c.vm_insert_pagehNtauh1hhj~ehhhNhNubh)}(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}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMcubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhMcubh)}(hvm_insert_pageh]h)}(hvm_insert_pageh]hvm_insert_page}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhjkhMcubj )}(hC(struct vm_area_struct *vma, unsigned long addr, struct page *page)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjlhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjlubj)}(h h]h }(hhhj#lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj4lhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1lubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6lmodnameN classnameNjijl)}jo]jr)}jejksbc.vm_insert_pageasbuh1hhjlubj)}(h h]h }(hhhjTlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj= )}(hj@ h]h*}(hhhjblhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjlubh)}(hvmah]hvma}(hhhjolhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hlongh]hlong}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(haddrh]haddr}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjlhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]h)}(hpageh]hpage}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjlmodnameN classnameNjijl)}jo]jPlc.vm_insert_pageasbuh1hhjlubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj= )}(hj@ h]h*}(hhhj#mhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjlubh)}(hpageh]hpage}(hhhj0mhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjlubeh}(h]h ]h"]h$]h&]jj uh1j hjkhhhjkhMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjkhMcubah}(h]jkah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM~hjkhhubj)}(hhh]j6)}(h insert single page into user vmah]h insert single page into user vma}(hj]mhj[mhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMbhjXmhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMcubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jsmj3jsmj4uh1hhhhj~ehNhNubjl)}(hXe**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 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](j6)}(h**Parameters**h]jv)}(hj}mh]h Parameters}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{mubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMfhjwmubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjmh]hstruct vm_area_struct *vma}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMchjmubj)}(hhh]j6)}(huser vma to map toh]huser vma to map to}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMchjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMchjmubj)}(h8``unsigned long addr`` target user address of this page h](j)}(h``unsigned long addr``h]j<)}(hjmh]hunsigned long addr}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjmubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMdhjmubj)}(hhh]j6)}(h target user address of this pageh]h target user address of this page}(hjmhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMdhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMdhjmubj)}(h)``struct page *page`` source kernel page h](j)}(h``struct page *page``h]j<)}(hjnh]hstruct page *page}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj nubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMehjnubj)}(hhh]j6)}(hsource kernel pageh]hsource kernel page}(hj)nhj'nhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#nhMehj$nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj#nhMehjmubeh}(h]h ]h"]h$]h&]uh1jhjwmubj6)}(h**Description**h]jv)}(hjInh]h Description}(hhhjKnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGnubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMghjwmubj6)}(hQThis allows drivers to insert individual pages they've allocated into a user vma.h]hSThis allows drivers to insert individual pages they’ve allocated into a user vma.}(hjanhj_nhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMghjwmubj6)}(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()).}(hjpnhjnnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMjhjwmubj6)}(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!}(hjnhj}nhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMohjwmubj6)}(h&The page does not need to be reserved.h]h&The page does not need to be reserved.}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMuhjwmubj6)}(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.}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMwhjwmubj6)}(h **Return**h]jv)}(hjnh]hReturn}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM|hjwmubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjnubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM|hjwmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_map_pages (C function)c.vm_map_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjohMubh)}(h vm_map_pagesh]h)}(h vm_map_pagesh]h vm_map_pages}(hhhj!ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjohMubj )}(hD(struct vm_area_struct *vma, struct page **pages, unsigned long num)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj=ohhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj9oubj)}(h h]h }(hhhjJohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9oubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj[ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXoubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj]omodnameN classnameNjijl)}jo]jr)}jej#osbc.vm_map_pagesasbuh1hhj9oubj)}(h h]h }(hhhj{ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9oubj= )}(hj@ h]h*}(hhhjohhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj9oubh)}(hvmah]hvma}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9oubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj5oubj )}(hstruct page **pagesh](j.)}(hj1h]hstruct}(hhhjohhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjoubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]h)}(hpageh]hpage}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjomodnameN classnameNjijl)}jo]jwoc.vm_map_pagesasbuh1hhjoubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj= )}(hj@ h]h*}(hhhjohhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjoubj= )}(hj@ h]h*}(hhhjphhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjoubh)}(hpagesh]hpages}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj5oubj )}(hunsigned long numh](j)}(hunsignedh]hunsigned}(hhhj,phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(pubj)}(h h]h }(hhhj:phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(pubj)}(hlongh]hlong}(hhhjHphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(pubj)}(h h]h }(hhhjVphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(pubh)}(hnumh]hnum}(hhhjdphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(pubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj5oubeh}(h]h ]h"]h$]h&]jj uh1j hjnhhhjohMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjohMubah}(h]jnah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjnhhubj)}(hhh]j6)}(h6maps range of kernel pages starts with non zero offseth]h6maps range of kernel pages starts with non zero offset}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjphhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjohMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jpj3jpj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjph]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjpubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjph]hstruct vm_area_struct *vma}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjpubj)}(hhh]j6)}(huser vma to map toh]huser vma to map to}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjpubj)}(h@``struct page **pages`` pointer to array of source kernel pages h](j)}(h``struct page **pages``h]j<)}(hj qh]hstruct page **pages}(hhhj qhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjqubj)}(hhh]j6)}(h'pointer to array of source kernel pagesh]h'pointer to array of source kernel pages}(hj$qhj"qhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjpubj)}(h4``unsigned long num`` number of pages in page array h](j)}(h``unsigned long num``h]j<)}(hjBqh]hunsigned long num}(hhhjDqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@qubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj:tubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj6tubj)}(hhh]j6)}(h'pointer to array of source kernel pagesh]h'pointer to array of source kernel pages}(hjWthjUthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQthMhjRtubah}(h]h ]h"]h$]h&]uh1jhj6tubeh}(h]h ]h"]h$]h&]uh1jhjQthMhjsubj)}(h4``unsigned long num`` number of pages in page array h](j)}(h``unsigned long num``h]j<)}(hjuth]hunsigned long num}(hhhjwthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjstubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjotubj)}(hhh]j6)}(hnumber of pages in page arrayh]hnumber of pages in page array}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjotubeh}(h]h ]h"]h$]h&]uh1jhjthMhjsubeh}(h]h ]h"]h$]h&]uh1jhjsubj6)}(h**Description**h]jv)}(hjth]h Description}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubj6)}(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.}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubj6)}(h **Context**h]jv)}(hjth]hContext}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubj6)}(h)Process context. Called by mmap handlers.h]h)Process context. Called by mmap handlers.}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubj6)}(h **Return**h]jv)}(hjth]hReturn}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubj6)}(h&0 on success and error code otherwise.h]h&0 on success and error code otherwise.}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ vmf_insert_pfn_prot (C function)c.vmf_insert_pfn_prothNtauh1hhj~ehhhNhNubh)}(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}(hhhjFuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCuubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjHumodnameN classnameNjijl)}jo]jr)}jevmf_insert_pfn_protsbc.vmf_insert_pfn_protasbuh1hhj?uhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM ubj)}(h h]h }(hhhjhuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?uhhhjguhM ubh)}(hvmf_insert_pfn_proth]h)}(hjduh]hvmf_insert_pfn_prot}(hhhjzuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvuubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?uhhhjguhM ubj )}(hT(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjuhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjuubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjumodnameN classnameNjijl)}jo]jbuc.vmf_insert_pfn_protasbuh1hhjuubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj= )}(hj@ h]h*}(hhhjuhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjuubh)}(hvmah]hvma}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hlongh]hlong}(hhhj!vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hhhj/vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(haddrh]haddr}(hhhj=vhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjVvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRvubj)}(h h]h }(hhhjdvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRvubj)}(hlongh]hlong}(hhhjrvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRvubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRvubh)}(hpfnh]hpfn}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubj )}(hpgprot_t pgproth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjvmodnameN classnameNjijl)}jo]jbuc.vmf_insert_pfn_protasbuh1hhjvubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hpgproth]hpgprot}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubeh}(h]h ]h"]h$]h&]jj uh1j hj?uhhhjguhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;uhhhjguhM ubah}(h]j6uah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM6 hj8uhhubj)}(hhh]j6)}(h5insert single pfn into user vma with specified pgproth]h5insert single pfn into user vma with specified pgprot}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jhj8uhhhjguhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj#wh]h Parameters}(hhhj%whhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!wubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjwubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjBwh]hstruct vm_area_struct *vma}(hhhjDwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj@wubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjwubj6)}(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.}(hjOxhjMxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjwubj6)}(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 }(h#pgprot typically only differs from hj\xhhhNhNubjv)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hhhjexhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\xubhG when drivers set caching- and encryption bits different than those of }(hG when drivers set caching- and encryption bits different than those of hj\xhhhNhNubjv)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hhhjxxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\xubhJ, because the caching- or encryption mode may not be known at mmap() time.}(hJ, because the caching- or encryption mode may not be known at mmap() time.hj\xhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM$ hjwubj6)}(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 }(hThis is ok as long as hjxhhhNhNubjv)}(h**vma->vm_page_prot**h]hvma->vm_page_prot}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubhX$ 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()).}(hX" 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()).hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM( hjwubj6)}(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.}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM. hjwubj6)}(h **Context**h]jv)}(hjxh]hContext}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM3 hjwubj6)}(h4Process context. May allocate using ``GFP_KERNEL``.h](h%Process context. May allocate using }(h%Process context. May allocate using hjxhhhNhNubj<)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubh.}(hjyhjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM3 hjwubj6)}(h **Return**h]jv)}(hjyh]hReturn}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM5 hjwubj6)}(hvm_fault_t value.h]hvm_fault_t value.}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM4 hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn (C function)c.vmf_insert_pfnhNtauh1hhj~ehhhNhNubh)}(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}(hhhjHyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEyubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjJymodnameN classnameNjijl)}jo]jr)}jevmf_insert_pfnsbc.vmf_insert_pfnasbuh1hhjAyhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMT ubj)}(h h]h }(hhhjjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAyhhhjiyhMT ubh)}(hvmf_insert_pfnh]h)}(hjfyh]hvmf_insert_pfn}(hhhj|yhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxyubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAyhhhjiyhMT ubj )}(hC(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjyhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjyubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjymodnameN classnameNjijl)}jo]jdyc.vmf_insert_pfnasbuh1hhjyubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj= )}(hj@ h]h*}(hhhjyhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjyubh)}(hvmah]hvma}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjyubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hlongh]hlong}(hhhj#zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hhhj1zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(haddrh]haddr}(hhhj?zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjyubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjXzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTzubj)}(h h]h }(hhhjfzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTzubj)}(hlongh]hlong}(hhhjtzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTzubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTzubh)}(hpfnh]hpfn}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTzubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjyubeh}(h]h ]h"]h$]h&]jj uh1j hjAyhhhjiyhMT ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=yhhhjiyhMT ubah}(h]j8yah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMf hj:yhhubj)}(hhh]j6)}(hinsert single pfn into user vmah]hinsert single pfn into user vma}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMS hjzhhubah}(h]h ]h"]h$]h&]uh1jhj:yhhhjiyhMT ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jzj3jzj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjzh]h Parameters}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMW hjzubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` user vma to map to h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjzh]hstruct vm_area_struct *vma}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMT hjzubj)}(hhh]j6)}(huser vma to map toh]huser vma to map to}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{hMT hj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMT hjzubj)}(h8``unsigned long addr`` target user address of this page h](j)}(h``unsigned long addr``h]j<)}(hj5{h]hunsigned long addr}(hhhj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3{ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMU hj/{ubj)}(hhh]j6)}(h target user address of this pageh]h target user address of this page}(hjP{hjN{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJ{hMU hjK{ubah}(h]h ]h"]h$]h&]uh1jhj/{ubeh}(h]h ]h"]h$]h&]uh1jhjJ{hMU hjzubj)}(h(``unsigned long pfn`` source kernel pfn h](j)}(h``unsigned long pfn``h]j<)}(hjn{h]hunsigned long pfn}(hhhjp{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjl{ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMV hjh{ubj)}(hhh]j6)}(hsource kernel pfnh]hsource kernel pfn}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj{hMV hj{ubah}(h]h ]h"]h$]h&]uh1jhjh{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMV hjzubeh}(h]h ]h"]h$]h&]uh1jhjzubj6)}(h**Description**h]jv)}(hj{h]h Description}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMX hjzubj6)}(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{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMX hjzubj6)}(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.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM[ hjzubj6)}(hvma cannot be a COW mapping.h]hvma cannot be a COW mapping.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM^ hjzubj6)}(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.}(hj{hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM` hjzubj6)}(h **Context**h]jv)}(hj{h]hContext}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMc hjzubj6)}(h4Process context. May allocate using ``GFP_KERNEL``.h](h%Process context. May allocate using }(h%Process context. May allocate using hj|hhhNhNubj<)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh.}(hjyhj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMc hjzubj6)}(h **Return**h]jv)}(hj7|h]hReturn}(hhhj9|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5|ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMe hjzubj6)}(hvm_fault_t value.h]hvm_fault_t value.}(hjO|hjM|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMd hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌremap_pfn_range (C function)c.remap_pfn_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhj||hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMY ubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|hhhj|hMY ubh)}(hremap_pfn_rangeh]h)}(hremap_pfn_rangeh]hremap_pfn_range}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjx|hhhj|hMY 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.)}(hj1h]hstruct}(hhhj|hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj|ubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj|modnameN classnameNjijl)}jo]jr)}jej|sbc.remap_pfn_rangeasbuh1hhj|ubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj= )}(hj@ h]h*}(hhhj}hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj|ubh)}(hvmah]hvma}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj+}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'}ubj)}(h h]h }(hhhj9}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'}ubj)}(hlongh]hlong}(hhhjG}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'}ubj)}(h h]h }(hhhjU}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'}ubh)}(haddrh]haddr}(hhhjc}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhj|}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx}ubj)}(hlongh]hlong}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx}ubh)}(hpfnh]hpfn}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubj )}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hlongh]hlong}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hsizeh]hsize}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubj )}(h pgprot_t proth](h)}(hhh]h)}(hpgprot_th]hpgprot_t}(hhhj!~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#~modnameN classnameNjijl)}jo]j|c.remap_pfn_rangeasbuh1hhj~ubj)}(h h]h }(hhhj?~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hproth]hprot}(hhhjM~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubeh}(h]h ]h"]h$]h&]jj uh1j hjx|hhhj|hMY ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjt|hhhj|hMY ubah}(h]jo|ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMc hjq|hhubj)}(hhh]j6)}(h remap kernel memory to userspaceh]h remap kernel memory to userspace}(hjz~hjx~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMX hju~hhubah}(h]h ]h"]h$]h&]uh1jhjq|hhhj|hMY ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM\ hj~ubj)}(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}(hhhj~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.chMY hj~ubj)}(hhh]j6)}(huser vma to map toh]huser vma to map to}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMY hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMY hj~ubj)}(hD``unsigned long addr`` target page aligned user address to start at h](j)}(h``unsigned long addr``h]j<)}(hj~h]hunsigned long addr}(hhhj~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.chMZ hj~ubj)}(hhh]j6)}(h,target page aligned user address to start ath]h,target page aligned user address to start at}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMZ hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMZ hj~ubj)}(hJ``unsigned long pfn`` page frame number of kernel physical memory address h](j)}(h``unsigned long pfn``h]j<)}(hj+h]hunsigned long pfn}(hhhj-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]j6)}(h3page frame number of kernel physical memory addressh]h3page frame number of kernel physical memory address}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hM[ hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM[ hj~ubj)}(h,``unsigned long size`` size of mapping area h](j)}(h``unsigned long size``h]j<)}(hjdh]hunsigned long size}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM\ hj^ubj)}(hhh]j6)}(hsize of mapping areah]hsize of mapping area}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhM\ hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM\ 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}(hhhjhhhNhNubah}(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]j6)}(h&page protection flags for this mappingh]h&page protection flags for this mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM] hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM] hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM_ hj~ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM_ hj~ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMa hj~ubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMa hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_iomap_memory (C function)c.vm_iomap_memoryhNtauh1hhj~ehhhNhNubh)}(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}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMu ubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjahMu ubh)}(hvm_iomap_memoryh]h)}(hvm_iomap_memoryh]hvm_iomap_memory}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjahMu ubj )}(hB(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejvsbc.vm_iomap_memoryasbuh1hhjubj)}(h h]h }(hhhj΀hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj܀hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hphys_addr_t starth](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jʀc.vm_iomap_memoryasbuh1hhjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long lenh](j)}(hunsignedh]hunsigned}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hlongh]hlong}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hlenh]hlen}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjOhhhjahMu ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjahMu ubah}(h]jFah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjHhhubj)}(hhh]j6)}(hremap memory to userspaceh]hremap memory to userspace}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMt hjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahMu ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jŁj3jŁj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjρh]h Parameters}(hhhjсhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj́ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMx hjɁubj)}(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}(hhhjhhhNhNubah}(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.chMu hjubj)}(hhh]j6)}(huser vma to map toh]huser vma to map to}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMu hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMu hjubj)}(h@``phys_addr_t start`` start of the physical memory to be mapped h](j)}(h``phys_addr_t start``h]j<)}(hj'h]hphys_addr_t start}(hhhj)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.chMv hj!ubj)}(hhh]j6)}(h)start of the physical memory to be mappedh]h)start of the physical memory to be mapped}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMv hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMv hjubj)}(h#``unsigned long len`` size of area h](j)}(h``unsigned long len``h]j<)}(hj`h]hunsigned long len}(hhhjbhhhNhNubah}(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.chMw hjZubj)}(hhh]j6)}(h size of areah]h size of area}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMw hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMw hjubeh}(h]h ]h"]h$]h&]uh1jhjɁubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMy hjɁubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMy hjɁubj6)}(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.}(hj‚hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM} hjɁubj6)}(h **Return**h]jv)}(hjтh]hReturn}(hhhjӂhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjςubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjɁubj6)}(h0``0`` on success, negative error code otherwise.h](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh+ on success, negative error code otherwise.}(h+ on success, negative error code otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM hjɁubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ unmap_mapping_pages (C function)c.unmap_mapping_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubh)}(hunmap_mapping_pagesh]h)}(hunmap_mapping_pagesh]hunmap_mapping_pages}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj3hMubj )}(hJ(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjbhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj^ubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejHsbc.unmap_mapping_pagesasbuh1hhj^ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj^ubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(h pgoff_t starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj׃hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԃubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjكmodnameN classnameNjijl)}jo]jc.unmap_mapping_pagesasbuh1hhjЃubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЃubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjЃubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]jc.unmap_mapping_pagesasbuh1hhjubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnrh]hnr}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(hbool even_cowsh](j)}(hj7h]hbool}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(h even_cowsh]h even_cows}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubeh}(h]h ]h"]h$]h&]jj uh1j hj!hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj3hMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjhhubj)}(hhh]j6)}(hUnmap pages from processes.h]hUnmap pages from processes.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j„j3j„j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj̄h]h Parameters}(hhhj΄hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʄubah}(h]h ]h"]h$]h&]uh1j5hL/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<)}(hjh]hstruct address_space *mapping}(hhhjhhhNhNubah}(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]j6)}(h2The address space containing pages to be unmapped.h]h2The address space containing pages to be unmapped.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``pgoff_t start`` Index of first page to be unmapped. h](j)}(h``pgoff_t start``h]j<)}(hj$h]h pgoff_t start}(hhhj&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.chMhjubj)}(hhh]j6)}(h#Index of first page to be unmapped.h]h#Index of first page to be unmapped.}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(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}(hhhj_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.chMhjWubj)}(hhh]j6)}(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.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubj)}(h>``bool even_cows`` Whether to unmap even private COWed pages. h](j)}(h``bool even_cows``h]j<)}(hjh]hbool even_cows}(hhhjhhhNhNubah}(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]j6)}(h*Whether to unmap even private COWed pages.h]h*Whether to unmap even private COWed pages.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjƄubj6)}(h**Description**h]jv)}(hjхh]h Description}(hhhjӅhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjυubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjƄubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjƄubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ unmap_mapping_range (C function)c.unmap_mapping_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj$hMubh)}(hunmap_mapping_rangeh]h)}(hunmap_mapping_rangeh]hunmap_mapping_range}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj$hMubj )}(h\(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjShhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjOubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjsmodnameN classnameNjijl)}jo]jr)}jej9sbc.unmap_mapping_rangeasbuh1hhjOubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjOubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubj )}(hloff_t const holebeginh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjȆhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjņubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjʆmodnameN classnameNjijl)}jo]jc.unmap_mapping_rangeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h holebeginh]h holebegin}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubj )}(hloff_t const holelenh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj-modnameN classnameNjijl)}jo]jc.unmap_mapping_rangeasbuh1hhj$ubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj.)}(hjh]hconst}(hhhjWhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj$ubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hholelenh]hholelen}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubj )}(h int even_cowsh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h even_cowsh]h even_cows}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj$hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj$hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj hhubj)}(hhh]j6)}(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.}(hjԇhj҇hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjχhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj$hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubj)}(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}(hhhjhhhNhNubah}(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.chMhj ubj)}(hhh]j6)}(h2the address space containing mmaps to be unmapped.h]h2the address space containing mmaps to be unmapped.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(hX$``loff_t const holebegin`` byte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache(), which must keep the partial page. In contrast, we must get rid of partial pages. h](j)}(h``loff_t const holebegin``h]j<)}(hjLh]hloff_t const holebegin}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjFubj)}(hhh]j6)}(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.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(h``loff_t const holelen`` size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file. h](j)}(h``loff_t const holelen``h]j<)}(hjh]hloff_t const holelen}(hhhjhhhNhNubah}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h``int even_cows`` 1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data.h](j)}(h``int even_cows``h]j<)}(hjh]h int even_cows}(hhhjˆ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]j6)}(h{1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data.h]h}1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don’t throw away private data.}(hjۈhjوhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjՈhMhjֈubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՈhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfollow_pte (C function) c.follow_ptehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hdint follow_pte (struct vm_area_struct *vma, unsigned long address, pte_t **ptepp, spinlock_t **ptlp)h]h)}(hcint follow_pte(struct vm_area_struct *vma, unsigned long address, pte_t **ptepp, spinlock_t **ptlp)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM8ubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hM8ubh)}(h follow_pteh]h)}(h follow_pteh]h follow_pte}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hM8ubj )}(hU(struct vm_area_struct *vma, unsigned long address, pte_t **ptepp, spinlock_t **ptlp)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjVhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjRubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjvmodnameN classnameNjijl)}jo]jr)}jej<sb c.follow_pteasbuh1hhjRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjRubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjȉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubj)}(h h]h }(hhhj։hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubh)}(haddressh]haddress}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĉubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubj )}(h pte_t **ptepph](h)}(hhh]h)}(hpte_th]hpte_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.follow_pteasbuh1hhjubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjHhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(hj@ h]h*}(hhhjUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hptepph]hptepp}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubj )}(hspinlock_t **ptlph](h)}(hhh]h)}(h spinlock_th]h spinlock_t}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.follow_pteasbuh1hhjwubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjwubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjwubh)}(hptlph]hptlp}(hhhjĊhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj'hM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hM8ubah}(h]j ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMQhjhhubj)}(hhh]j6)}(h%look up PTE at a user virtual addressh]h%look up PTE at a user virtual address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hM8ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hXM**Parameters** ``struct vm_area_struct *vma`` the memory mapping ``unsigned long address`` user virtual address ``pte_t **ptepp`` location to store found PTE ``spinlock_t **ptlp`` location to store the lock for the PTE **Description** On a successful return, the pointer to the PTE is stored in **ptepp**; the corresponding lock is taken and its location is stored in **ptlp**. The contents of the PTE are only stable until **ptlp** is released using pte_unmap_unlock(). This function will fail if the PTE is non-present. Present PTEs may include PTEs that map refcounted pages, such as anonymous folios in COW mappings. Callers must be careful when relying on PTE content after pte_unmap_unlock(). Especially if the PTE maps a refcounted page, callers must 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. This function must not be used to modify PTE content. **Return** zero on success, -ve otherwise.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM;hj ubj)}(hhh](j)}(h2``struct vm_area_struct *vma`` the memory mapping h](j)}(h``struct vm_area_struct *vma``h]j<)}(hj0h]hstruct vm_area_struct *vma}(hhhj2hhhNhNubah}(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.chM8hj*ubj)}(hhh]j6)}(hthe memory mappingh]hthe memory mapping}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhM8hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM8hj'ubj)}(h/``unsigned long address`` user virtual address h](j)}(h``unsigned long address``h]j<)}(hjih]hunsigned long address}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM9hjcubj)}(hhh]j6)}(huser virtual addressh]huser virtual address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hM9hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM9hj'ubj)}(h.``pte_t **ptepp`` location to store found PTE h](j)}(h``pte_t **ptepp``h]j<)}(hjh]h pte_t **ptepp}(hhhjhhhNhNubah}(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]j6)}(hlocation to store found PTEh]hlocation to store found PTE}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hj'ubj)}(h=``spinlock_t **ptlp`` location to store the lock for the PTE h](j)}(h``spinlock_t **ptlp``h]j<)}(hjۋh]hspinlock_t **ptlp}(hhhj݋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]j6)}(h&location to store the lock for the PTEh]h&location to store the lock for the PTE}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjՋubeh}(h]h ]h"]h$]h&]uh1jhjhM;hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chM=hj ubj6)}(hOn a successful return, the pointer to the PTE is stored in **ptepp**; the corresponding lock is taken and its location is stored in **ptlp**.h](h` for an iomem mapping. This callback is used by access_process_vm() when the **vma** is not page based.h](j6)}(h**Parameters**h]jv)}(hj؎h]h Parameters}(hhhjڎhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֎ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjҎubj)}(hhh](j)}(h1``struct vm_area_struct *vma`` the vma to access h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjh]hstruct vm_area_struct *vma}(hhhjhhhNhNubah}(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]j6)}(hthe vma to accessh]hthe vma to access}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hM``unsigned long addr`` userspace address, not relative offset within **vma** h](j)}(h``unsigned long addr``h]j<)}(hj0h]hunsigned long addr}(hhhj2hhhNhNubah}(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]j6)}(h5userspace address, not relative offset within **vma**h](h.userspace address, not relative offset within }(h.userspace address, not relative offset within hjIhhhNhNubjv)}(h**vma**h]hvma}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubeh}(h]h ]h"]h$]h&]uh1j5hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h#``void *buf`` buffer to read/write h](j)}(h ``void *buf``h]j<)}(hjxh]h void *buf}(hhhjzhhhNhNubah}(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.chMhjrubj)}(hhh]j6)}(hbuffer to read/writeh]hbuffer to read/write}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int len`` length of transfer h](j)}(h ``int len``h]j<)}(hjh]hint len}(hhhjhhhNhNubah}(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]j6)}(hlength of transferh]hlength of transfer}(hj̏hjʏhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjƏhMhjǏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƏhMhjubj)}(h@``int write`` set to FOLL_WRITE when writing, otherwise reading h](j)}(h ``int write``h]j<)}(hjh]h int write}(hhhjhhhNhNubah}(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]j6)}(h1set to FOLL_WRITE when writing, otherwise readingh]h1set to FOLL_WRITE when writing, otherwise reading}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjҎubj6)}(h**Description**h]jv)}(hj%h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhjҎubj6)}(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 }(h%This is a generic implementation for hj;hhhNhNubh)}(h<:c:type:`vm_operations_struct.access `h]j<)}(hjFh]hvm_operations_struct.access}(hhhjHhhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarn c:parent_keyjl)}jo]sbjvm_operations_structuh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./mm/memory.chMhj;ubhM for an iomem mapping. This callback is used by access_process_vm() when the }(hM for an iomem mapping. This callback is used by access_process_vm() when the hj;hhhNhNubjv)}(h**vma**h]hvma}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh is not page based.}(h is not page based.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjghMhjҎubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$get_pfnblock_flags_mask (C function)c.get_pfnblock_flags_maskhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM^ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubj)}(hlongh]hlong}(hhhjÐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubj)}(h h]h }(hhhjѐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubh)}(hget_pfnblock_flags_maskh]h)}(hget_pfnblock_flags_maskh]hget_pfnblock_flags_mask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߐubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM^ubj )}(h@(const struct page *page, unsigned long pfn, unsigned long mask)h](j )}(hconst struct page *pageh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj:modnameN classnameNjijl)}jo]jr)}jejsbc.get_pfnblock_flags_maskasbuh1hhjubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjfhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hhhjđhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hhhjݑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjّubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjّubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjّubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjّubh)}(hmaskh]hmask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjّubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM^ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMdhjhhubj)}(hhh]j6)}(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}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM]hj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jXj3jXj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjbh]h Parameters}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMahj\ubj)}(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}(hhhjhhhNhNubah}(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^hj{ubj)}(hhh]j6)}(h%The page within the block of interesth]h%The page within the block of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM^hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjxubj)}(h3``unsigned long pfn`` The target page frame number h](j)}(h``unsigned long pfn``h]j<)}(hjh]hunsigned long pfn}(hhhjhhhNhNubah}(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]j6)}(hThe target page frame numberh]hThe target page frame number}(hjՒhjӒhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjϒhM_hjВubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϒhM_hjxubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h-mask of bits that the caller is interested inh]h-mask of bits that the caller is interested in}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM`hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h **Return**h]jv)}(hj.h]hReturn}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMbhj\ubj6)}(hpageblock_bits flagsh]hpageblock_bits flags}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMbhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$set_pfnblock_flags_mask (C function)c.set_pfnblock_flags_maskhNtauh1hhj~ehhhNhNubh)}(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}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhMubh)}(hset_pfnblock_flags_maskh]h)}(hset_pfnblock_flags_maskh]hset_pfnblock_flags_mask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjhMubj )}(hO(struct page *page, unsigned long flags, unsigned long pfn, unsigned long mask)h](j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjΓhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˓ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjГmodnameN classnameNjijl)}jo]jr)}jejsbc.set_pfnblock_flags_maskasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hpfnh]hpfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hhhjĔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjҔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmaskh]hmask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjohhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhhubj)}(hhh]j6)}(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}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?j3j?j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjIh]h Parameters}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjCubj)}(hhh](j)}(h<``struct page *page`` The page within the block of interest h](j)}(h``struct page *page``h]j<)}(hjhh]hstruct page *page}(hhhjjhhhNhNubah}(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]j6)}(h%The page within the block of interesth]h%The page within the block of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubj)}(h)``unsigned long flags`` The flags to set h](j)}(h``unsigned long flags``h]j<)}(hjh]hunsigned long flags}(hhhjhhhNhNubah}(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]j6)}(hThe flags to seth]hThe flags to set}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubj)}(h3``unsigned long pfn`` The target page frame number h](j)}(h``unsigned long pfn``h]j<)}(hjڕh]hunsigned long pfn}(hhhjܕ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]j6)}(hThe target page frame numberh]hThe target page frame number}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԕubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubj)}(hD``unsigned long mask`` mask of bits that the caller is interested inh](j)}(h``unsigned long mask``h]j<)}(hjh]hunsigned long mask}(hhhjhhhNhNubah}(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]j6)}(h-mask of bits that the caller is interested inh]h-mask of bits that the caller is interested in}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)move_freepages_block_isolate (C function)c.move_freepages_block_isolatehNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjzhMubh)}(hmove_freepages_block_isolateh]h)}(hmove_freepages_block_isolateh]hmove_freepages_block_isolate}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjzhMubj )}(h7(struct zone *zone, struct page *page, int migratetype)h](j )}(hstruct zone *zoneh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzoneh]hzone}(hhhjǖhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĖubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjɖmodnameN classnameNjijl)}jo]jr)}jejsbc.move_freepages_block_isolateasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzoneh]hzone}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jc.move_freepages_block_isolateasbuh1hhjubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjehhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint migratetypeh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h migratetypeh]h migratetype}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjihhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhjzhMubah}(h]j`ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjbhhubj)}(hhh]j6)}(h+move free pages in block for page isolationh]h+move free pages in block for page isolation}(hjԗhjҗhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjϗhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh](j)}(h``struct zone *zone`` the zone h](j)}(h``struct zone *zone``h]j<)}(hjh]hstruct zone *zone}(hhhjhhhNhNubah}(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]j6)}(hthe zoneh]hthe zone}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h)``struct page *page`` the pageblock page h](j)}(h``struct page *page``h]j<)}(hjLh]hstruct page *page}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjFubj)}(hhh]j6)}(hthe pageblock pageh]hthe pageblock page}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(h8``int migratetype`` migratetype to set on the pageblock h](j)}(h``int migratetype``h]j<)}(hjh]hint migratetype}(hhhjhhhNhNubah}(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]j6)}(h#migratetype to set on the pageblockh]h#migratetype to set on the pageblock}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhj˜hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjؘhj֘hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(h>Returns ``true`` if pages could be moved, ``false`` otherwise.h](hReturns }(hReturns hjhhhNhNubj<)}(h``true``h]htrue}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if pages could be moved, }(h if pages could be moved, hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh otherwise.}(h otherwise.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__putback_isolated_page (C function)c.__putback_isolated_pagehNtauh1hhj~ehhhNhNubh)}(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}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM ubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjghM ubh)}(h__putback_isolated_pageh]h)}(h__putback_isolated_pageh]h__putback_isolated_page}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjghM ubj )}(h/(struct page *page, unsigned int order, int mt)h](j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej|sbc.__putback_isolated_pageasbuh1hhjubj)}(h h]h }(hhhjԙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint mth](j)}(hinth]hint}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hmth]hmt}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjUhhhjghM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjghM ubah}(h]jLah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjNhhubj)}(hhh]j6)}(h/Return a now-isolated page back where we got ith]h/Return a now-isolated page back where we got it}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjghM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjšh]h Parameters}(hhhjĚhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjubj)}(hhh](j)}(h-``struct page *page`` Page that was isolated h](j)}(h``struct page *page``h]j<)}(hjh]hstruct page *page}(hhhjhhhNhNubah}(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]j6)}(hPage that was isolatedh]hPage that was isolated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjۚubeh}(h]h ]h"]h$]h&]uh1jhjhM hjؚubj)}(h2``unsigned int order`` Order of the isolated page h](j)}(h``unsigned int order``h]j<)}(hjh]hunsigned int order}(hhhjhhhNhNubah}(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]j6)}(hOrder of the isolated pageh]hOrder of the isolated page}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hM hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM hjؚubj)}(h.``int mt`` The page's pageblock's migratetype h](j)}(h ``int mt``h]j<)}(hjSh]hint mt}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjQubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjMubj)}(hhh]j6)}(h"The page's pageblock's migratetypeh]h&The page’s pageblock’s migratetype}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhM hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjؚubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__free_pages (C function)c.__free_pageshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h9void __free_pages (struct page *page, unsigned int order)h]h)}(h8void __free_pages(struct page *page, unsigned int order)h](j)}(hvoidh]hvoid}(hhhjӛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϛhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϛhhhjhMubh)}(h __free_pagesh]h)}(h __free_pagesh]h __free_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjϛhhhjhMubj )}(h'(struct page *page, unsigned int order)h](j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hpageh]hpage}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0modnameN classnameNjijl)}jo]jr)}jejsbc.__free_pagesasbuh1hhj ubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj\hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hpageh]hpage}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(horderh]horder}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjϛhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj˛hhhjhMubah}(h]jƛah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjțhhubj)}(hhh]j6)}(h(Free pages allocated with alloc_pages().h]h(Free pages allocated with alloc_pages().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct page *page`` The page pointer returned from alloc_pages(). ``unsigned int order`` The order of the allocation. **Description** This function can free multi-page allocations that are not compound pages. It does not check that the **order** passed in matches that of the allocation, so it is easy to leak memory. Freeing more memory than was allocated will probably emit a warning. If the last reference to this page is speculative, it will be released by put_page() which only frees the first page of a non-compound allocation. To prevent the remaining pages from being leaked, we free the subsequent pages here. If you want to use the page's reference count to decide when to free the allocation, you should allocate a compound page, and use put_page() instead of __free_pages(). **Context** May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh](j)}(hD``struct page *page`` The page pointer returned from alloc_pages(). h](j)}(h``struct page *page``h]j<)}(hj&h]hstruct page *page}(hhhj(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]j6)}(h-The page pointer returned from alloc_pages().h]h-The page pointer returned from alloc_pages().}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h4``unsigned int order`` The order of the allocation. h](j)}(h``unsigned int order``h]j<)}(hj_h]hunsigned int order}(hhhjahhhNhNubah}(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.chMhjYubj)}(hhh]j6)}(hThe order of the allocation.h]hThe order of the allocation.}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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 }(hgThis function can free multi-page allocations that are not compound pages. It does not check that the hjhhhNhNubjv)}(h **order**h]horder}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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().}(hj՝hjӝhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages_exact (C function)c.alloc_pages_exacthNtauh1hhj~ehhhNhNubh)}(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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMOubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hMOubj= )}(hj@ h]h*}(hhhjFhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj%hhhj7hMOubh)}(halloc_pages_exacth]h)}(halloc_pages_exacth]halloc_pages_exact}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMOubj )}(h(size_t size, gfp_t gfp_mask)h](j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjxmodnameN classnameNjijl)}jo]jr)}jejYsbc.alloc_pages_exactasbuh1hhjoubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjkubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjžmodnameN classnameNjijl)}jo]jc.alloc_pages_exactasbuh1hhjubj)}(h h]h }(hhhjޞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjkubeh}(h]h ]h"]h$]h&]jj uh1j hj%hhhj7hMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMOubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM\hjhhubj)}(hhh]j6)}(h5allocate an exact number physically-contiguous pages.h]h5allocate an exact number physically-contiguous pages.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMOubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j/j3j/j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj9h]h Parameters}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMRhj3ubj)}(hhh](j)}(h0``size_t size`` the number of bytes to allocate h](j)}(h``size_t size``h]j<)}(hjXh]h size_t size}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjVubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMOhjRubj)}(hhh]j6)}(hthe number of bytes to allocateh]hthe number of bytes to allocate}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjmhMOhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMOhjOubj)}(hM``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP h](j)}(h``gfp_t gfp_mask``h]j<)}(hjh]hgfp_t gfp_mask}(hhhjhhhNhNubah}(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.chMPhjubj)}(hhh]j6)}(h9GFP flags for the allocation, must not contain __GFP_COMPh]h9GFP flags for the allocation, must not contain __GFP_COMP}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj6)}(h**Description**h]jv)}(hj̟h]h Description}(hhhjΟhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjʟubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMRhj3ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMRhj3ubj6)}(h0This function is also limited by MAX_PAGE_ORDER.h]h0This function is also limited by MAX_PAGE_ORDER.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMVhj3ubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMXhj3ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMZhj3ubj6)}(h;pointer to the allocated area or ``NULL`` in case of error.h](h!pointer to the allocated area or }(h!pointer to the allocated area or hj'hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubh in case of error.}(h in case of error.hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMZhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"alloc_pages_exact_nid (C function)c.alloc_pages_exact_nidhNtauh1hhj~ehhhNhNubh)}(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}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMkubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMkubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjfhhhjxhMkubh)}(halloc_pages_exact_nidh]h)}(halloc_pages_exact_nidh]halloc_pages_exact_nid}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjxhMkubj )}(h&(int nid, size_t size, gfp_t gfp_mask)h](j )}(hint nidh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hhhjРhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.alloc_pages_exact_nidasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj8modnameN classnameNjijl)}jo]jc.alloc_pages_exact_nidasbuh1hhj/ubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hgfp_maskh]hgfp_mask}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjfhhhjxhMkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjxhMkubah}(h]j]ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMuhj_hhubj)}(hhh]j6)}(hBallocate an exact number of physically-contiguous pages on a node.h]hBallocate an exact number of physically-contiguous pages on a node.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMjhjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhMkubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMnhjubj)}(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}(hhhjС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.chMlhjȡubj)}(hhh]j6)}(h6the preferred node ID where memory should be allocatedh]h6the preferred node ID where memory should be allocated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjȡubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjšubj)}(h0``size_t size`` the number of bytes to allocate h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhj 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.chMmhjubj)}(hhh]j6)}(hthe number of bytes to allocateh]hthe number of bytes to allocate}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjšubj)}(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}(hhhjBhhhNhNubah}(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.chMnhj:ubj)}(hhh]j6)}(h9GFP flags for the allocation, must not contain __GFP_COMPh]h9GFP flags for the allocation, must not contain __GFP_COMP}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhMnhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMnhjšubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj{h]h Description}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMphjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMphjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMshjubj6)}(h;pointer to the allocated area or ``NULL`` in case of error.h](h!pointer to the allocated area or }(h!pointer to the allocated area or hjhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh in case of error.}(h in case of error.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMshjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfree_pages_exact (C function)c.free_pages_exacthNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(hfree_pages_exacth]h)}(hfree_pages_exacth]hfree_pages_exact}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(void *virt, size_t size)h](j )}(h void *virth](j)}(hvoidh]hvoid}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj= )}(hj@ h]h*}(hhhjThhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj4ubh)}(hvirth]hvirt}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj0ubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.free_pages_exactasbuh1hhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj0ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubj)}(hhh]j6)}(h0release memory allocated via alloc_pages_exact()h]h0release memory allocated via alloc_pages_exact()}(hjأhj֣hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjӣhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh](j)}(h8``void *virt`` the value returned by alloc_pages_exact. h](j)}(h``void *virt``h]j<)}(hjh]h void *virt}(hhhjhhhNhNubah}(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]j6)}(h(the value returned by alloc_pages_exact.h]h(the value returned by alloc_pages_exact.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(hQ``size_t size`` size of allocation, same value as passed to alloc_pages_exact(). h](j)}(h``size_t size``h]j<)}(hjPh]h size_t size}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjJubj)}(hhh]j6)}(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().}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnr_free_zone_pages (C function)c.nr_free_zone_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjФhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̤hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhjߤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̤hhhjޤhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̤hhhjޤhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̤hhhjޤhMubh)}(hnr_free_zone_pagesh]h)}(hnr_free_zone_pagesh]hnr_free_zone_pages}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj̤hhhjޤhMubj )}(h (int offset)h]j )}(h int offseth](j)}(hinth]hint}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hoffseth]hoffset}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj!ubah}(h]h ]h"]h$]h&]jj uh1j hj̤hhhjޤhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjȤhhhjޤhMubah}(h]jäah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjŤhhubj)}(hhh]j6)}(h+count number of pages beyond high watermarkh]h+count number of pages beyond high watermark}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhjŤhhhjޤhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j)}(h2``int offset`` The zone index of the highest zone h](j)}(h``int offset``h]j<)}(hjh]h int offset}(hhhjhhhNhNubah}(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]j6)}(h"The zone index of the highest zoneh]h"The zone index of the highest zone}(hj̥hjʥhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjƥhMhjǥubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƥhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubjR)}(hhh]j6)}(h/nr_free_zone_pages = managed_pages - high_pagesh]h/nr_free_zone_pages = managed_pages - high_pages}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubah}(h]h ]h"]h$]h&]uh1jQhjubj6)}(h **Return**h]jv)}(hj+h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(h&number of pages beyond high watermark.h]h&number of pages beyond high watermark.}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!nr_free_buffer_pages (C function)c.nr_free_buffer_pageshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h)unsigned long nr_free_buffer_pages (void)h]h)}(h(unsigned long nr_free_buffer_pages(void)h](j)}(hunsignedh]hunsigned}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubh)}(hnr_free_buffer_pagesh]h)}(hnr_free_buffer_pagesh]hnr_free_buffer_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj~hMubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhjɦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŦubah}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjlhhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjehhubj)}(hhh]j6)}(h+count number of pages beyond high watermarkh]h+count number of pages beyond high watermark}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj5h]hvoid}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj/ubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjPhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjph]h Description}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ find_next_best_node (C function)c.find_next_best_nodehNtauh1hhj~ehhhNhNubh)}(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}(hhhjܧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjاhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjاhhhjhMubh)}(hfind_next_best_nodeh]h)}(hfind_next_best_nodeh]hfind_next_best_node}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjاhhhjhMubj )}(h&(int node, nodemask_t *used_node_mask)h](j )}(hint nodeh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnodeh]hnode}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hnodemask_t *used_node_maskh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjSmodnameN classnameNjijl)}jo]jr)}jejsbc.find_next_best_nodeasbuh1hhjJubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjJubh)}(hused_node_maskh]hused_node_mask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjاhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjԧhhhjhMubah}(h]jϧah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjѧhhubj)}(hhh]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jϨj3jϨj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj٨h]h Parameters}(hhhjۨhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjרubah}(h]h ]h"]h$]h&]uh1j5hP/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}(hhhjhhhNhNubah}(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]j6)}(h(node whose fallback list we're appendingh]h*node whose fallback list we’re appending}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h@``nodemask_t *used_node_mask`` nodemask_t of already used nodes h](j)}(h``nodemask_t *used_node_mask``h]j<)}(hj1h]hnodemask_t *used_node_mask}(hhhj3hhhNhNubah}(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]j6)}(h nodemask_t of already used nodesh]h nodemask_t of already used nodes}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjӨubj6)}(h**Description**h]jv)}(hjlh]h Description}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjӨubj6)}(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 }(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 hjhhhNhNubjv)}(h**node**h]hnode}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX.’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.}(hX*'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.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjӨubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjӨubj6)}(hBnode id of the found node or ``NUMA_NO_NODE`` if no node is found.h](hnode id of the found node or }(hnode id of the found node or hjhhhNhNubj<)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjƩhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh if no node is found.}(h if no node is found.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjӨubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"setup_per_zone_wmarks (C function)c.setup_per_zone_wmarkshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h!void setup_per_zone_wmarks (void)h]h)}(h void setup_per_zone_wmarks(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMjubh)}(hsetup_per_zone_wmarksh]h)}(hsetup_per_zone_wmarksh]hsetup_per_zone_wmarks}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMjubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]noemphjj uh1j hj5ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMjubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMjubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMohjhhubj)}(hhh]j6)}(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}}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMihjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMjubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMmhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(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.chMphjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjĪhjªhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMrhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_contig_range (C function)c.alloc_contig_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hMubh)}(halloc_contig_rangeh]h)}(halloc_contig_rangeh]halloc_contig_range}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(hN(unsigned long start, unsigned long end, unsigned migratetype, gfp_t gfp_mask)h](j )}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubj )}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjūhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjӫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hendh]hend}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubj )}(hunsigned migratetypeh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h migratetypeh]h migratetype}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjBmodnameN classnameNjijl)}jo]jr)}jejLsbc.alloc_contig_rangeasbuh1hhj9ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hgfp_maskh]hgfp_mask}(hhhjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubeh}(h]h ]h"]h$]h&]jj uh1j hj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjhhubj)}(hhh]jx)}(hhh]jx)}(h&tries to allocate given range of pagesh]j6)}(hjh]h&tries to allocate given range of pages}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjhhhjhNubah}(h]h ]h"]h$]h&]jxjxuh1jxhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jìj3jìj4uh1hhhhj~ehNhNubjl)}(hXH**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 to use during compaction **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](j6)}(h**Parameters**h]jv)}(hjͬh]h Parameters}(hhhjϬhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjˬubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjǬubj)}(hhh](j)}(h.``unsigned long start`` start PFN to allocate h](j)}(h``unsigned long start``h]j<)}(hjh]hunsigned long start}(hhhjhhhNhNubah}(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]j6)}(hstart PFN to allocateh]hstart PFN to allocate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``unsigned long end`` one-past-the-last PFN to allocate h](j)}(h``unsigned long end``h]j<)}(hj%h]hunsigned long end}(hhhj'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.chM hjubj)}(hhh]j6)}(h!one-past-the-last PFN to allocateh]h!one-past-the-last PFN to allocate}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hM hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM hjubj)}(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<)}(hj^h]hunsigned migratetype}(hhhj`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.chM hjXubj)}(hhh]j6)}(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.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chM hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM hjubj)}(h5``gfp_t gfp_mask`` GFP mask to use during compaction h](j)}(h``gfp_t gfp_mask``h]j<)}(hjh]hgfp_t gfp_mask}(hhhjhhhNhNubah}(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]j6)}(h!GFP mask to use during compactionh]h!GFP mask to use during compaction}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjǬubj6)}(h**Description**h]jv)}(hjӭh]h Description}(hhhjխhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjѭubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjǬubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjǬubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjǬubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjǬubj6)}(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().}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjǬubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_contig_pages (C function)c.alloc_contig_pageshNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjNhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjJhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj[hMubh)}(hhh]h)}(hpageh]hpage}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjomodnameN classnameNjijl)}jo]jr)}jealloc_contig_pagessbc.alloc_contig_pagesasbuh1hhjJhhhj[hMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj[hMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjJhhhj[hMubh)}(halloc_contig_pagesh]h)}(hjh]halloc_contig_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhj[hMubj )}(hG(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)h](j )}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hhhjȮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĮubj)}(h h]h }(hhhj֮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĮubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĮubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĮubh)}(hnr_pagesh]hnr_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĮubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.alloc_contig_pagesasbuh1hhjubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfp_maskh]hgfp_mask}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint nidh](j)}(hinth]hint}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hnidh]hnid}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hnodemask_t *nodemaskh](h)}(hhh]h)}(h nodemask_th]h nodemask_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.alloc_contig_pagesasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjůhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hnodemaskh]hnodemask}(hhhjүhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjJhhhj[hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhj[hMubah}(h]jAah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjChhubj)}(hhh]jx)}(hhh]jx)}(h4tries to find and allocate contiguous range of pagesh]j6)}(hjh]h4tries to find and allocate contiguous range of pages}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjhhhjhNubah}(h]h ]h"]h$]h&]jxjxuh1jxhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj[hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j'j3j'j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``unsigned long nr_pages`` Number of contiguous pages to allocate ``gfp_t gfp_mask`` GFP mask to limit search and used during compaction ``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](j6)}(h**Parameters**h]jv)}(hj1h]h Parameters}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj)}(hhh](j)}(hB``unsigned long nr_pages`` Number of contiguous pages to allocate h](j)}(h``unsigned long nr_pages``h]j<)}(hjPh]hunsigned long nr_pages}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhjJubj)}(hhh]j6)}(h&Number of contiguous pages to allocateh]h&Number of contiguous pages to allocate}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(hG``gfp_t gfp_mask`` GFP mask to limit search and used during compaction h](j)}(h``gfp_t gfp_mask``h]j<)}(hjh]hgfp_t gfp_mask}(hhhjhhhNhNubah}(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]j6)}(h3GFP mask to limit search and used during compactionh]h3GFP mask to limit search and used during compaction}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubj)}(h``int nid`` Target node h](j)}(h ``int nid``h]j<)}(hj°h]hint nid}(hhhjİ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.chMhjubj)}(hhh]j6)}(h Target nodeh]h Target node}(hjݰhj۰hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjװhMhjذubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjװhMhjGubj)}(h7``nodemask_t *nodemask`` Mask for other possible nodes h](j)}(h``nodemask_t *nodemask``h]j<)}(hjh]hnodemask_t *nodemask}(hhhjhhhNhNubah}(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]j6)}(hMask for other possible nodesh]hMask for other possible nodes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubj6)}(h**Description**h]jv)}(hj6h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj6)}(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.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj6)}(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).}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj6)}(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.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj6)}(h **Return**h]jv)}(hj{h]hReturn}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubj6)}(hBpointer to contiguous pages on success, or NULL if not successful.h]hBpointer to contiguous pages on success, or NULL if not successful.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./mm/page_alloc.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnuma_nearest_node (C function)c.numa_nearest_nodehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKubj)}(h h]h }(hhhjϱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjαhKubh)}(hnuma_nearest_nodeh]h)}(hnuma_nearest_nodeh]hnuma_nearest_node}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݱubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjαhKubj )}(h(int node, unsigned int state)h](j )}(hint nodeh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnodeh]hnode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned int stateh](j)}(hunsignedh]hunsigned}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hinth]hint}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hstateh]hstate}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjαhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjαhKubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjhhubj)}(hhh]j6)}(hFind nearest node by stateh]hFind nearest node by state}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjαhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjubj)}(hhh](j)}(h)``int node`` Node id to start the search h](j)}(h ``int node``h]j<)}(hjֲh]hint node}(hhhjز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.chKhjвubj)}(hhh]j6)}(hNode id to start the searchh]hNode id to start the search}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjвubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͲubj)}(h2``unsigned int state`` State to filter the search h](j)}(h``unsigned int state``h]j<)}(hjh]hunsigned int state}(hhhjhhhNhNubah}(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.chKhj ubj)}(hhh]j6)}(hState to filter the searchh]hState to filter the search}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjͲubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjubj6)}(h?Lookup the closest node by distance if **nid** is not in state.h](h'Lookup the closest node by distance if }(h'Lookup the closest node by distance if hj`hhhNhNubjv)}(h**nid**h]hnid}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubh is not in state.}(h is not in state.hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjubj6)}(hGthis **node** if it is in state, otherwise the closest node by distanceh](hthis }(hthis hjhhhNhNubjv)}(h**node**h]hnode}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh: if it is in state, otherwise the closest node by distance}(h: if it is in state, otherwise the closest node by distancehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages_mpol (C function)c.alloc_pages_mpolhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj޳hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjڳhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڳhhhjhMubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jealloc_pages_mpolsbc.alloc_pages_mpolasbuh1hhjڳhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڳhhhjhMubj= )}(hj@ h]h*}(hhhj,hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjڳhhhjhMubh)}(halloc_pages_mpolh]h)}(hjh]halloc_pages_mpol}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjڳhhhjhMubj )}(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}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj]modnameN classnameNjijl)}jo]jc.alloc_pages_mpolasbuh1hhjTubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjʴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(horderh]horder}(hhhjشhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hstruct mempolicy *polh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.alloc_pages_mpolasbuh1hhjubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj;hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpolh]hpol}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(h pgoff_t ilxh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjfmodnameN classnameNjijl)}jo]jc.alloc_pages_mpolasbuh1hhj]ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hilxh]hilx}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hint nidh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnidh]hnid}(hhhjŵhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubeh}(h]h ]h"]h$]h&]jj uh1j hjڳhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjֳhhhjhMubah}(h]jѳah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjӳhhubj)}(hhh]j6)}(h+Allocate pages according to NUMA mempolicy.h]h+Allocate pages according to NUMA mempolicy.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjӳhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhj ubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j<)}(hj1h]h gfp_t gfp}(hhhj3hhhNhNubah}(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.chMhj+ubj)}(hhh]j6)}(h GFP flags.h]h GFP flags.}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(h5``unsigned int order`` Order of the page allocation. h](j)}(h``unsigned int order``h]j<)}(hjjh]hunsigned int order}(hhhjlhhhNhNubah}(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.chMhjdubj)}(hhh]j6)}(hOrder of the page allocation.h]hOrder of the page allocation.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubj)}(h9``struct mempolicy *pol`` Pointer to the NUMA mempolicy. h](j)}(h``struct mempolicy *pol``h]j<)}(hjh]hstruct mempolicy *pol}(hhhjhhhNhNubah}(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]j6)}(hPointer to the NUMA mempolicy.h]hPointer to the NUMA mempolicy.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubj)}(hS``pgoff_t ilx`` Index for interleave mempolicy (also distinguishes alloc_pages()). h](j)}(h``pgoff_t ilx``h]j<)}(hjܶh]h pgoff_t ilx}(hhhj޶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.chMhjֶubj)}(hhh]j6)}(hBIndex for interleave mempolicy (also distinguishes alloc_pages()).h]hBIndex for interleave mempolicy (also distinguishes alloc_pages()).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjֶubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(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}(hhhjhhhNhNubah}(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]j6)}(hEPreferred node (usually numa_node_id() but **mpol** may override it).h](h+Preferred node (usually numa_node_id() but }(h+Preferred node (usually numa_node_id() but hj.hhhNhNubjv)}(h**mpol**h]hmpol}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh may override it).}(h may override it).hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h **Return**h]jv)}(hjdh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhj ubj6)}(h0The page on success or NULL if allocation fails.h]h0The page on success or NULL if allocation fails.}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvma_alloc_folio (C function)c.vma_alloc_foliohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(htstruct folio * vma_alloc_folio (gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr, bool hugepage)h]h)}(hrstruct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr, bool hugepage)h](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(hfolioh]hfolio}(hhhjȷhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjŷubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjʷmodnameN classnameNjijl)}jo]jr)}jevma_alloc_foliosbc.vma_alloc_folioasbuh1hhjhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hvma_alloc_folioh]h)}(hjh]hvma_alloc_folio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hU(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr, bool hugepage)h](j )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jc.vma_alloc_folioasbuh1hhjubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int orderh](j)}(hinth]hint}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(horderh]horder}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.vma_alloc_folioasbuh1hhjubj)}(h h]h }(hhhjܸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(haddrh]haddr}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h bool hugepageh](j)}(hj7h]hbool}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhugepageh]hhugepage}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhhubj)}(hhh]j6)}(hAllocate a folio for a VMA.h]hAllocate a folio for a VMA.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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**. ``bool hugepage`` Unused (was: For hugepages try only preferred node if possible). **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 alloc_pages_mpol() is more appropriate. **Return** The folio on success or NULL if allocation fails.h](j6)}(h**Parameters**h]jv)}(hjɹh]h Parameters}(hhhj˹hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjǹubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjùubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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]j6)}(h GFP flags.h]h GFP flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߹ubj)}(h"``int order`` Order of the folio. h](j)}(h ``int order``h]j<)}(hj!h]h int order}(hhhj#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.chMhjubj)}(hhh]j6)}(hOrder of the folio.h]hOrder of the folio.}(hj<hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj߹ubj)}(h/``struct vm_area_struct *vma`` Pointer to VMA. h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjZh]hstruct vm_area_struct *vma}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjXubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjTubj)}(hhh]j6)}(hPointer to VMA.h]hPointer to VMA.}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhj߹ubj)}(hS``unsigned long addr`` Virtual address of the allocation. Must be inside **vma**. h](j)}(h``unsigned long addr``h]j<)}(hjh]hunsigned long addr}(hhhjhhhNhNubah}(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]j6)}(h;Virtual address of the allocation. Must be inside **vma**.h](h3Virtual address of the allocation. Must be inside }(h3Virtual address of the allocation. Must be inside hjhhhNhNubjv)}(h**vma**h]hvma}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߹ubj)}(hS``bool hugepage`` Unused (was: For hugepages try only preferred node if possible). h](j)}(h``bool hugepage``h]j<)}(hjߺh]h bool hugepage}(hhhjhhhNhNubah}(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.chMhjٺubj)}(hhh]j6)}(h@Unused (was: For hugepages try only preferred node if possible).h]h@Unused (was: For hugepages try only preferred node if possible).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjٺubeh}(h]h ]h"]h$]h&]uh1jhjhMhj߹ubeh}(h]h ]h"]h$]h&]uh1jhjùubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjùubj6)}(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 alloc_pages_mpol() is more appropriate.h](h+Allocate a folio for a specific address in }(h+Allocate a folio for a specific address in hj0hhhNhNubjv)}(h**vma**h]hvma}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubhX6, 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 alloc_pages_mpol() is more appropriate.}(hX6, 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 alloc_pages_mpol() is more appropriate.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjùubj6)}(h **Return**h]jv)}(hjUh]hReturn}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjùubj6)}(h1The folio on success or NULL if allocation fails.h]h1The folio on success or NULL if allocation fails.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMhjùubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌalloc_pages (C function) c.alloc_pageshNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je alloc_pagessb c.alloc_pagesasbuh1hhjhhhjhM ubj)}(h h]h }(hhhjڻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhM ubh)}(h alloc_pagesh]h)}(hj׻h]h alloc_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(gfp_t gfp, unsigned int order)h](j )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jջ c.alloc_pagesasbuh1hhjubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hinth]hint}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(horderh]horder}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubj)}(hhh]j6)}(hAllocate pages.h]hAllocate pages.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/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&]j1j,j2j׼j3j׼j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj߼ubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags. h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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]j6)}(h GFP flags.h]h GFP flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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<)}(hj9h]hunsigned int order}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj3ubj)}(hhh]j6)}(h,Power of two of number of pages to allocate.h]h,Power of two of number of pages to allocate.}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhM hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM hjubeh}(h]h ]h"]h$]h&]uh1jhjۼubj6)}(h**Description**h]jv)}(hjth]h Description}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj6)}(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 << }(hAllocate 1 << hjhhhNhNubjv)}(h **order**h]horder}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 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&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj6)}(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.}(hjǽhjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj6)}(h **Return**h]jv)}(hjֽh]hReturn}(hhhjؽhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjԽubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubj6)}(h0The page on success or NULL if allocation fails.h]h0The page on success or NULL if allocation fails.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjۼubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_misplaced (C function)c.mpol_misplacedhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hM ubh)}(hmpol_misplacedh]h)}(hmpol_misplacedh]hmpol_misplaced}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj)hM ubj )}(h?(struct folio *folio, struct vm_fault *vmf, unsigned long addr)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjTubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]h)}(hfolioh]hfolio}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjxmodnameN classnameNjijl)}jo]jr)}jej>sbc.mpol_misplacedasbuh1hhjTubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjTubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hstruct vm_fault *vmfh](j.)}(hj1h]hstruct}(hhhjʾhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjƾubj)}(h h]h }(hhhj׾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƾubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mpol_misplacedasbuh1hhjƾubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƾubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjƾubh)}(hvmfh]hvmf}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƾubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hlongh]hlong}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(haddrh]haddr}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj)hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubj)}(hhh]j6)}(h3check whether current folio node is valid in policyh]h3check whether current folio node is valid in policy}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj)}(hhh](j)}(h,``struct folio *folio`` folio to be checked h](j)}(h``struct folio *folio``h]j<)}(hj޿h]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(hfolio to be checkedh]hfolio to be checked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjؿubeh}(h]h ]h"]h$]h&]uh1jhjhM 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}(hhhjhhhNhNubah}(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]j6)}(hstructure describing the faulth]hstructure describing the fault}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM 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<)}(hjPh]hunsigned long addr}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjNubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjJubj)}(hhh]j6)}(hIvirtual address in **vma** for shared policy lookup and interleave policyh](hvirtual address in }(hvirtual address in hjihhhNhNubjv)}(h**vma**h]hvma}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubh/ for shared policy lookup and interleave policy}(h/ for shared policy lookup and interleave policyhjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjտubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mpol_shared_policy_init (C function)c.mpol_shared_policy_inithNtauh1hhj~ehhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hmpol_shared_policy_inith]h)}(hmpol_shared_policy_inith]hmpol_shared_policy_init}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h2(struct shared_policy *sp, struct mempolicy *mpol)h](j )}(hstruct shared_policy *sph](j.)}(hj1h]hstruct}(hhhjHhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjDubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]h)}(h shared_policyh]h shared_policy}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjhmodnameN classnameNjijl)}jo]jr)}jej.sbc.mpol_shared_policy_initasbuh1hhjDubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjDubh)}(hsph]hsp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubj )}(hstruct mempolicy *mpolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mpol_shared_policy_initasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmpolh]hmpol}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubj)}(hhh]j6)}(h"initialize shared policy for inodeh]h"initialize shared policy for inode}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jTj3jTj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^h]h Parameters}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjXubj)}(hhh](j)}(h<``struct shared_policy *sp`` pointer to inode shared policy h](j)}(h``struct shared_policy *sp``h]j<)}(hj}h]hstruct shared_policy *sp}(hhhjhhhNhNubah}(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]j6)}(hpointer to inode shared policyh]hpointer to inode shared policy}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM hjtubj)}(h7``struct mempolicy *mpol`` struct mempolicy to install h](j)}(h``struct mempolicy *mpol``h]j<)}(hjh]hstruct mempolicy *mpol}(hhhjhhhNhNubah}(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]j6)}(hstruct mempolicy to installh]hstruct mempolicy to install}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjtubeh}(h]h ]h"]h$]h&]uh1jhjXubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjXubj6)}(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 }(hInstall non-NULL hjhhhNhNubjv)}(h**mpol**h]hmpol}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh^ in inode’s shared policy rb-tree. On entry, the current task has a reference on a non-NULL }(h\ in inode's shared policy rb-tree. On entry, the current task has a reference on a non-NULL hjhhhNhNubjv)}(h**mpol**h]hmpol}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh_. This must be released on exit. This is called at get_inode() calls and we can use GFP_KERNEL.}(h_. 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&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_parse_str (C function)c.mpol_parse_strhNtauh1hhj~ehhhNhNubh)}(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}(hhhj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMT ubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhMT ubh)}(hmpol_parse_strh]h)}(hmpol_parse_strh]hmpol_parse_str}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjkhMT ubj )}(h$(char *str, struct mempolicy **mpol)h](j )}(h char *strh](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hstrh]hstr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mempolicy **mpolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mpol_parse_strasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(hj@ h]h*}(hhhj5hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmpolh]hmpol}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjYhhhjkhMT ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjkhMT ubah}(h]jPah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM\ hjRhhubj)}(hhh]j6)}(h7parse string to mempolicy, for tmpfs mpol mount option.h]h7parse string to mempolicy, for tmpfs mpol mount option.}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMS hjjhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhMT ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMW hjubj)}(hhh](j)}(h3``char *str`` string containing mempolicy to parse h](j)}(h ``char *str``h]j<)}(hjh]h char *str}(hhhjhhhNhNubah}(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.chMT hjubj)}(hhh]j6)}(h$string containing mempolicy to parseh]h$string containing mempolicy to parse}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMT hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMT hjubj)}(hV``struct mempolicy **mpol`` pointer to struct mempolicy pointer, returned on success. h](j)}(h``struct mempolicy **mpol``h]j<)}(hjh]hstruct mempolicy **mpol}(hhhjhhhNhNubah}(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.chMU hjubj)}(hhh]j6)}(h9pointer to struct mempolicy pointer, returned on success.h]h9pointer to struct mempolicy pointer, returned on success.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMU hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMU hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj"h]h Description}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMW hjubj)}(hhh]j)}(h/Format of input: [=][:] h](j)}(hFormat of input:h]hFormat of input:}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMX hj;ubj)}(hhh]j6)}(h[=][:]h]h[=][:]}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMX hjNubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjMhMX hj8ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjsh]hReturn}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMZ hjubj6)}(h``0`` on success, else ``1``h](j<)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh on success, else }(h on success, else hjhhhNhNubj<)}(h``1``h]h1}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chMZ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmpol_to_str (C function) c.mpol_to_strhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(h mpol_to_strh]h)}(h mpol_to_strh]h mpol_to_str}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h1(char *buffer, int maxlen, struct mempolicy *pol)h](j )}(h char *bufferh](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hbufferh]hbuffer}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(h int maxlenh](j)}(hinth]hint}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hmaxlenh]hmaxlen}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hstruct mempolicy *polh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mempolicyh]h mempolicy}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.mpol_to_strasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpolh]hpol}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjhhubj)}(hhh]j6)}(h)format a mempolicy structure for printingh]h)format a mempolicy structure for printing}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j%j3j%j4uh1hhhhj~ehNhNubjl)}(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 32 for the longest mode, "interleave", the longest flag, "relative", and to display at least a few node ids.h](j6)}(h**Parameters**h]jv)}(hj/h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj)ubj)}(hhh](j)}(h7``char *buffer`` to contain formatted mempolicy string h](j)}(h``char *buffer``h]j<)}(hjNh]h char *buffer}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hjHubj)}(hhh]j6)}(h%to contain formatted mempolicy stringh]h%to contain formatted mempolicy string}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchM hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM hjEubj)}(h$``int maxlen`` length of **buffer** h](j)}(h``int maxlen``h]j<)}(hjh]h int maxlen}(hhhjhhhNhNubah}(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]j6)}(hlength of **buffer**h](h length of }(h length of hjhhhNhNubjv)}(h **buffer**h]hbuffer}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjEubj)}(h?``struct mempolicy *pol`` pointer to mempolicy to be formatted h](j)}(h``struct mempolicy *pol``h]j<)}(hjh]hstruct mempolicy *pol}(hhhjhhhNhNubah}(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]j6)}(h$pointer to mempolicy to be formattedh]h$pointer to mempolicy to be formatted}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj)ubj6)}(hConvert **pol** into a string. If **buffer** is too short, truncate the string. Recommend a **maxlen** of at least 32 for the longest mode, "interleave", the longest flag, "relative", and to display at least a few node ids.h](hConvert }(hConvert hj hhhNhNubjv)}(h**pol**h]hpol}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh into a string. If }(h into a string. If hj hhhNhNubjv)}(h **buffer**h]hbuffer}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh0 is too short, truncate the string. Recommend a }(h0 is too short, truncate the string. Recommend a hj hhhNhNubjv)}(h **maxlen**h]hmaxlen}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh of at least 32 for the longest mode, “interleave”, the longest flag, “relative”, and to display at least a few node ids.}(hy of at least 32 for the longest mode, "interleave", the longest flag, "relative", and to display at least a few node ids.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./mm/mempolicy.chM hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio (C struct)c.foliohNtauh1hhj~ehhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhNubh)}(hhh](h)}(hfolioh]h)}(h struct folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolioh]h)}(hjh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhKhjhhubj)}(hhh]j6)}(h%Represents a contiguous set of bytes.h]h%Represents a contiguous set of bytes.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/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&]j1j,j2jj3jj4uh1hhhhj~ehj~hNubjl)}(hX **Definition**:: struct folio { unsigned long flags; union { struct list_head lru; unsigned int mlock_count; }; struct address_space *mapping; pgoff_t index; union { void *private; swp_entry_t swap; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_SLAB_OBJ_EXT; unsigned long memcg_data; #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 _entire_mapcount; atomic_t _nr_pages_mapped; atomic_t _pincount; #ifdef CONFIG_64BIT; unsigned int _folio_nr_pages; #endif; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; struct list_head _deferred_list; }; **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(). ``mapping`` The file this page belongs to, or refers to the anon_vma for anonymous memory. ``index`` Offset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap. ``{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. ``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(). ``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ``_nr_pages_mapped`` Do not use outside of rmap and debug code. ``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ``_folio_nr_pages`` Do not use directly, call folio_nr_pages(). ``_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(). ``_deferred_list`` Folios to be split under memory pressure.h](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh:}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubjw.)}(hX4struct folio { unsigned long flags; union { struct list_head lru; unsigned int mlock_count; }; struct address_space *mapping; pgoff_t index; union { void *private; swp_entry_t swap; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_SLAB_OBJ_EXT; unsigned long memcg_data; #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 _entire_mapcount; atomic_t _nr_pages_mapped; atomic_t _pincount; #ifdef CONFIG_64BIT; unsigned int _folio_nr_pages; #endif; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; struct list_head _deferred_list; };h]hX4struct folio { unsigned long flags; union { struct list_head lru; unsigned int mlock_count; }; struct address_space *mapping; pgoff_t index; union { void *private; swp_entry_t swap; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_SLAB_OBJ_EXT; unsigned long memcg_data; #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 _entire_mapcount; atomic_t _nr_pages_mapped; atomic_t _pincount; #ifdef CONFIG_64BIT; unsigned int _folio_nr_pages; #endif; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; struct list_head _deferred_list; };}(hhhj ubah}(h]h ]h"]h$]h&]jj uh1jv.hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM=hjubj)}(hhh](j)}(h'``flags`` Identical to the page flags. h](j)}(h ``flags``h]j<)}(hj:h]hflags}(hhhj<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.hhMhj4ubj)}(hhh]j6)}(hIdentical to the page flags.h]hIdentical to the page flags.}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j<)}(hjsh]h{unnamed_union}}(hhhjuhhhNhNubah}(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]j6)}(h anonymoush]h anonymous}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(hK``lru`` Least Recently Used list; tracks how recently this folio was used. h](j)}(h``lru``h]j<)}(hjh]hlru}(hhhjhhhNhNubah}(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]j6)}(hBLeast Recently Used list; tracks how recently this folio was used.h]hBLeast Recently Used list; tracks how recently this folio was used.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(hG``mlock_count`` Number of times this folio has been pinned by mlock(). h](j)}(h``mlock_count``h]j<)}(hjh]h mlock_count}(hhhjhhhNhNubah}(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]j6)}(h6Number of times this folio has been pinned by mlock().h]h6Number of times this folio has been pinned by mlock().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(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}(hhhj 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]j6)}(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.}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj1ubj)}(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<)}(hjXh]hindex}(hhhjZhhhNhNubah}(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.hhMhjRubj)}(hhh]j6)}(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.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj1ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j<)}(hjh]h{unnamed_union}}(hhhjhhhNhNubah}(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]j6)}(h anonymoush]h anonymous}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(hD``private`` Filesystem per-folio data (see folio_attach_private()). h](j)}(h ``private``h]j<)}(hjh]hprivate}(hhhjhhhNhNubah}(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]j6)}(h7Filesystem per-folio data (see folio_attach_private()).h]h7Filesystem per-folio data (see folio_attach_private()).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h9``swap`` Used for swp_entry_t if folio_test_swapcache(). h](j)}(h``swap``h]j<)}(hjh]hswap}(hhhjhhhNhNubah}(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]j6)}(h/Used for swp_entry_t if folio_test_swapcache().h]h/Used for swp_entry_t if folio_test_swapcache().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(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<)}(hj=h]h _mapcount}(hhhj?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.hhMhj7ubj)}(hhh]j6)}(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.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj1ubj)}(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<)}(hjwh]h _refcount}(hhhjyhhhNhNubah}(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.hhM hjqubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hj1ubj)}(h*``memcg_data`` Memory Control Group data. h](j)}(h``memcg_data``h]j<)}(hjh]h memcg_data}(hhhjhhhNhNubah}(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]j6)}(hMemory Control Group data.h]hMemory Control Group data.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hj1ubj)}(h6``virtual`` Virtual address in the kernel direct map. h](j)}(h ``virtual``h]j<)}(hjh]hvirtual}(hhhjhhhNhNubah}(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]j6)}(h)Virtual address in the kernel direct map.h]h)Virtual address in the kernel direct map.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hj1ubj)}(hK``_last_cpupid`` IDs of last CPU and last process that accessed the folio. h](j)}(h``_last_cpupid``h]j<)}(hj#h]h _last_cpupid}(hhhj%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#hjubj)}(hhh]j6)}(h9IDs of last CPU and last process that accessed the folio.h]h9IDs of last CPU and last process that accessed the folio.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hM#hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM#hj1ubj)}(h@``_large_mapcount`` Do not use directly, call folio_mapcount(). h](j)}(h``_large_mapcount``h]j<)}(hj\h]h_large_mapcount}(hhhj^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.hhM%hjVubj)}(hhh]j6)}(h+Do not use directly, call folio_mapcount().h]h+Do not use directly, call folio_mapcount().}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhM%hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM%hj1ubj)}(hH``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). h](j)}(h``_entire_mapcount``h]j<)}(hjh]h_entire_mapcount}(hhhjhhhNhNubah}(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]j6)}(h2Do not use directly, call folio_entire_mapcount().h]h2Do not use directly, call folio_entire_mapcount().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hj1ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h*Do not use outside of rmap and debug code.h]h*Do not use outside of rmap and debug code.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hj1ubj)}(hB``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). h](j)}(h ``_pincount``h]j<)}(hjh]h _pincount}(hhhj 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]j6)}(h3Do not use directly, call folio_maybe_dma_pinned().h]h3Do not use directly, call folio_maybe_dma_pinned().}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hj1ubj)}(h@``_folio_nr_pages`` Do not use directly, call folio_nr_pages(). h](j)}(h``_folio_nr_pages``h]j<)}(hj@h]h_folio_nr_pages}(hhhjBhhhNhNubah}(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]j6)}(h+Do not use directly, call folio_nr_pages().h]h+Do not use directly, call folio_nr_pages().}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhM(hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM(hj1ubj)}(hE``_hugetlb_subpool`` Do not use directly, use accessor in hugetlb.h. h](j)}(h``_hugetlb_subpool``h]j<)}(hjyh]h_hugetlb_subpool}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM)hjsubj)}(hhh]j6)}(h/Do not use directly, use accessor in hugetlb.h.h]h/Do not use directly, use accessor in hugetlb.h.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM)hj1ubj)}(hK``_hugetlb_cgroup`` Do not use directly, use accessor in hugetlb_cgroup.h. h](j)}(h``_hugetlb_cgroup``h]j<)}(hjh]h_hugetlb_cgroup}(hhhjhhhNhNubah}(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]j6)}(h6Do not use directly, use accessor in hugetlb_cgroup.h.h]h6Do not use directly, use accessor in hugetlb_cgroup.h.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hj1ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h6Do not use directly, use accessor in hugetlb_cgroup.h.h]h6Do not use directly, use accessor in hugetlb_cgroup.h.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hj1ubj)}(hE``_hugetlb_hwpoison`` Do not use directly, call raw_hwp_list_head(). h](j)}(h``_hugetlb_hwpoison``h]j<)}(hj$h]h_hugetlb_hwpoison}(hhhj&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,hjubj)}(hhh]j6)}(h.Do not use directly, call raw_hwp_list_head().h]h.Do not use directly, call raw_hwp_list_head().}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hM,hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM,hj1ubj)}(h<``_deferred_list`` Folios to be split under memory pressure.h](j)}(h``_deferred_list``h]j<)}(hj]h]h_deferred_list}(hhhj_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,hjWubj)}(hhh]j6)}(h)Folios to be split under memory pressure.h]h)Folios to be split under memory pressure.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM-hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM,hj1ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhj~hNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM0hj~ehhubj6)}(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 }(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 hjhhhNhNubj<)}(h ``PAGE_SIZE``h]h PAGE_SIZE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubh. 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. 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.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM.hj~ehhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌptdesc (C struct)c.ptdeschNtauh1hhj~ehhhj~hNubh)}(hhh](h)}(hptdesch]h)}(h struct ptdesch](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hptdesch]h)}(hjh]hptdesc}(hhhjhhhNhNubah}(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&]juh1hhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM9hjhhubj)}(hhh]j6)}(h"Memory descriptor for page tables.h]h"Memory descriptor for page tables.}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhj~ehj~hNubjl)}(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; }; 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 and x86. ``{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. ``{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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjUubh:}(hjhjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjQubjw.)}(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; }; 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; }; 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; };}(hhhjrubah}(h]h ]h"]h$]h&]jj uh1jv.hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjQubj6)}(h **Members**h]jv)}(hjh]hMembers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjQubj)}(hhh](j)}(h3``__page_flags`` Same as page flags. Powerpc only. h](j)}(h``__page_flags``h]j<)}(hjh]h __page_flags}(hhhjhhhNhNubah}(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]j6)}(h!Same as page flags. Powerpc only.h]h!Same as page flags. Powerpc only.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j<)}(hjh]h{unnamed_union}}(hhhjhhhNhNubah}(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]j6)}(h anonymoush]h anonymous}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``pt_rcu_head`` For freeing page table pages. h](j)}(h``pt_rcu_head``h]j<)}(hjh]h pt_rcu_head}(hhhjhhhNhNubah}(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]j6)}(hFor freeing page table pages.h]hFor freeing page table pages.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(h=``pt_list`` List of used page tables. Used for s390 and x86. h](j)}(h ``pt_list``h]j<)}(hjMh]hpt_list}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjGubj)}(hhh]j6)}(h0List of used page tables. Used for s390 and x86.h]h0List of used page tables. Used for s390 and x86.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j<)}(hjh]h{unnamed_struct}}(hhhjhhhNhNubah}(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]j6)}(h anonymoush]h anonymous}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``_pt_pad_1`` Padding that aliases with page's compound head. h](j)}(h ``_pt_pad_1``h]j<)}(hjh]h _pt_pad_1}(hhhjhhhNhNubah}(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]j6)}(h/Padding that aliases with page's compound head.h]h1Padding that aliases with page’s compound head.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``pmd_huge_pte`` Protected by ptdesc->ptl, used for THPs. h](j)}(h``pmd_huge_pte``h]j<)}(hjh]h pmd_huge_pte}(hhhjhhhNhNubah}(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]j6)}(h(Protected by ptdesc->ptl, used for THPs.h]h(Protected by ptdesc->ptl, used for THPs.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hG``__page_mapping`` Aliases with page->mapping. Unused for page tables. h](j)}(h``__page_mapping``h]j<)}(hj1h]h__page_mapping}(hhhj3hhhNhNubah}(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]j6)}(h3Aliases with page->mapping. Unused for page tables.h]h3Aliases with page->mapping. Unused for page tables.}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j<)}(hjjh]h{unnamed_union}}(hhhjlhhhNhNubah}(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.hhMhjdubj)}(hhh]j6)}(h anonymoush]h anonymous}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``pt_index`` Used for s390 gmap. h](j)}(h ``pt_index``h]j<)}(hjh]hpt_index}(hhhjhhhNhNubah}(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]j6)}(hUsed for s390 gmap.h]hUsed for s390 gmap.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``pt_mm`` Used for x86 pgds. h](j)}(h ``pt_mm``h]j<)}(hjh]hpt_mm}(hhhjhhhNhNubah}(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]j6)}(hUsed for x86 pgds.h]hUsed for x86 pgds.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``pt_frag_refcount`` For fragmented page table tracking. Powerpc only. h](j)}(h``pt_frag_refcount``h]j<)}(hjh]hpt_frag_refcount}(hhhjhhhNhNubah}(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]j6)}(h1For fragmented page table tracking. Powerpc only.h]h1For fragmented page table tracking. Powerpc only.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j<)}(hjNh]h{unnamed_union}}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjHubj)}(hhh]j6)}(h anonymoush]h anonymous}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjubj)}(h2``_pt_pad_2`` Padding to ensure proper alignment. h](j)}(h ``_pt_pad_2``h]j<)}(hjh]h _pt_pad_2}(hhhjhhhNhNubah}(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]j6)}(h#Padding to ensure proper alignment.h]h#Padding to ensure proper alignment.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``ptl`` Lock for the page table. h](j)}(h``ptl``h]j<)}(hjh]hptl}(hhhjhhhNhNubah}(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]j6)}(hLock for the page table.h]hLock for the page table.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``ptl`` Lock for the page table. h](j)}(h``ptl``h]j<)}(hjh]hptl}(hhhjhhhNhNubah}(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]j6)}(hLock for the page table.h]hLock for the page table.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``__page_type`` Same as page->page_type. Unused for page tables. h](j)}(h``__page_type``h]j<)}(hj2h]h __page_type}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj,ubj)}(hhh]j6)}(h0Same as page->page_type. Unused for page tables.h]h0Same as page->page_type. Unused for page tables.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h+``__page_refcount`` Same as page refcount. h](j)}(h``__page_refcount``h]j<)}(hjkh]h__page_refcount}(hhhjmhhhNhNubah}(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.hhMhjeubj)}(hhh]j6)}(hSame as page refcount.h]hSame as page refcount.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``pt_memcg_data`` Memcg data. Tracked for page tables here.h](j)}(h``pt_memcg_data``h]j<)}(hjh]h pt_memcg_data}(hhhjhhhNhNubah}(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]j6)}(h)Memcg data. Tracked for page tables here.h]h)Memcg data. Tracked for page tables here.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhj~hNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj~ehhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj~ehhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvm_fault_t (C type) c.vm_fault_thNtauh1hhj~ehhhj~hNubh)}(hhh](h)}(h vm_fault_th]h)}(htype vm_fault_th](j.)}(hjh]htype}(hhhj%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj!hhhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj2hMubh)}(h vm_fault_th]h)}(hjh]h vm_fault_t}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj2hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj2hMubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjhhubj)}(hhh]j6)}(h$Return type for page fault handlers.h]h$Return type for page fault handlers.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hMubeh}(h]h ](j,typeeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehj~hNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj~ehhubj6)}(hfault 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](j6)}(h **Constants**h]jv)}(hj>h]h Constants}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhj8ubj)}(hhh](j)}(h``VM_FAULT_OOM`` Out Of Memory h](j)}(h``VM_FAULT_OOM``h]j<)}(hj]h]h VM_FAULT_OOM}(hhhj_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.hhMhjWubj)}(hhh]j6)}(h Out Of Memoryh]h Out Of Memory}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h``VM_FAULT_SIGBUS`` Bad access h](j)}(h``VM_FAULT_SIGBUS``h]j<)}(hjh]hVM_FAULT_SIGBUS}(hhhjhhhNhNubah}(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]j6)}(h Bad accessh]h Bad access}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h*``VM_FAULT_MAJOR`` Page read from storage h](j)}(h``VM_FAULT_MAJOR``h]j<)}(hjh]hVM_FAULT_MAJOR}(hhhjhhhNhNubah}(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]j6)}(hPage read from storageh]hPage read from storage}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h.``VM_FAULT_HWPOISON`` Hit poisoned small page h](j)}(h``VM_FAULT_HWPOISON``h]j<)}(hjh]hVM_FAULT_HWPOISON}(hhhj 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]j6)}(hHit poisoned small pageh]hHit poisoned small page}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(hQ``VM_FAULT_HWPOISON_LARGE`` Hit poisoned large page. Index encoded in upper bits h](j)}(h``VM_FAULT_HWPOISON_LARGE``h]j<)}(hjAh]hVM_FAULT_HWPOISON_LARGE}(hhhjChhhNhNubah}(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]j6)}(h4Hit poisoned large page. Index encoded in upper bitsh]h4Hit poisoned large page. Index encoded in upper bits}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjTubj)}(h(``VM_FAULT_SIGSEGV`` segmentation fault h](j)}(h``VM_FAULT_SIGSEGV``h]j<)}(hj{h]hVM_FAULT_SIGSEGV}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjyubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjuubj)}(hhh]j6)}(hsegmentation faulth]hsegmentation fault}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h?``VM_FAULT_NOPAGE`` ->fault installed the pte, not return page h](j)}(h``VM_FAULT_NOPAGE``h]j<)}(hjh]hVM_FAULT_NOPAGE}(hhhjhhhNhNubah}(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]j6)}(h*->fault installed the pte, not return pageh]h*->fault installed the pte, not return page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h5``VM_FAULT_LOCKED`` ->fault locked the returned page h](j)}(h``VM_FAULT_LOCKED``h]j<)}(hjh]hVM_FAULT_LOCKED}(hhhjhhhNhNubah}(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]j6)}(h ->fault locked the returned pageh]h ->fault locked the returned page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h/``VM_FAULT_RETRY`` ->fault blocked, must retry h](j)}(h``VM_FAULT_RETRY``h]j<)}(hj&h]hVM_FAULT_RETRY}(hhhj(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]j6)}(h->fault blocked, must retryh]h->fault blocked, must retry}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjTubj)}(hA``VM_FAULT_FALLBACK`` huge page fault failed, fall back to small h](j)}(h``VM_FAULT_FALLBACK``h]j<)}(hj_h]hVM_FAULT_FALLBACK}(hhhjahhhNhNubah}(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]j6)}(h*huge page fault failed, fall back to smallh]h*huge page fault failed, fall back to small}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjTubj)}(h4``VM_FAULT_DONE_COW`` ->fault has fully handled COW h](j)}(h``VM_FAULT_DONE_COW``h]j<)}(hjh]hVM_FAULT_DONE_COW}(hhhjhhhNhNubah}(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]j6)}(h->fault has fully handled COWh]h->fault has fully handled COW}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(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}(hhhjhhhNhNubah}(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]j6)}(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)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/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&]uh1jhjhMhjTubj)}(hG``VM_FAULT_COMPLETED`` ->fault completed, meanwhile mmap lock released h](j)}(h``VM_FAULT_COMPLETED``h]j<)}(hj h]hVM_FAULT_COMPLETED}(hhhj 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.hhMhjubj)}(hhh]j6)}(h/->fault completed, meanwhile mmap lock releasedh]h/->fault completed, meanwhile mmap lock released}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjTubj)}(h*``VM_FAULT_HINDEX_MASK`` mask HINDEX valueh](j)}(h``VM_FAULT_HINDEX_MASK``h]j<)}(hjDh]hVM_FAULT_HINDEX_MASK}(hhhjFhhhNhNubah}(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]j6)}(hmask HINDEX valueh]hmask HINDEX value}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhj~hNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfault_flag (C enum) c.fault_flaghNtauh1hhj~ehhhj~hNubh)}(hhh](h)}(h fault_flagh]h)}(henum fault_flagh](j.)}(hjh]henum}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM!ubh)}(h fault_flagh]h)}(hjh]h fault_flag}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM!ubah}(h]jah ](jjeh"]h$]h&]juh1hhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMhjhhubj)}(hhh]j6)}(hFault flag definitions.h]hFault flag definitions.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM!ubeh}(h]h ](j,enumeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehj~hNubjl)}(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](j6)}(h **Constants**h]jv)}(hjh]h Constants}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM$hjubj)}(hhh](j)}(h.``FAULT_FLAG_WRITE`` Fault was a write fault. h](j)}(h``FAULT_FLAG_WRITE``h]j<)}(hj"h]hFAULT_FLAG_WRITE}(hhhj$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'hjubj)}(hhh]j6)}(hFault was a write fault.h]hFault was a write fault.}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hM'hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM'hjubj)}(h:``FAULT_FLAG_MKWRITE`` Fault was mkwrite of existing PTE. h](j)}(h``FAULT_FLAG_MKWRITE``h]j<)}(hj[h]hFAULT_FLAG_MKWRITE}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM*hjUubj)}(hhh]j6)}(h"Fault was mkwrite of existing PTE.h]h"Fault was mkwrite of existing PTE.}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphM*hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM*hjubj)}(h@``FAULT_FLAG_ALLOW_RETRY`` Allow to retry the fault if blocked. h](j)}(h``FAULT_FLAG_ALLOW_RETRY``h]j<)}(hjh]hFAULT_FLAG_ALLOW_RETRY}(hhhjhhhNhNubah}(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]j6)}(h$Allow to retry the fault if blocked.h]h$Allow to retry the fault if blocked.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjubj)}(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}(hhhjhhhNhNubah}(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.hhM0hjubj)}(hhh]j6)}(h,Don't drop mmap_lock and wait when retrying.h]h.Don’t drop mmap_lock and wait when retrying.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(hF``FAULT_FLAG_KILLABLE`` The fault task is in SIGKILL killable region. h](j)}(h``FAULT_FLAG_KILLABLE``h]j<)}(hjh]hFAULT_FLAG_KILLABLE}(hhhjhhhNhNubah}(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.hhM3hjubj)}(hhh]j6)}(h-The fault task is in SIGKILL killable region.h]h-The fault task is in SIGKILL killable region.}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(h4``FAULT_FLAG_TRIED`` The fault has been tried once. h](j)}(h``FAULT_FLAG_TRIED``h]j<)}(hj?h]hFAULT_FLAG_TRIED}(hhhjAhhhNhNubah}(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.hhM6hj9ubj)}(hhh]j6)}(hThe fault has been tried once.h]hThe fault has been tried once.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThM6hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThM6hjubj)}(h7``FAULT_FLAG_USER`` The fault originated in userspace. h](j)}(h``FAULT_FLAG_USER``h]j<)}(hjxh]hFAULT_FLAG_USER}(hhhjzhhhNhNubah}(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.hhM9hjrubj)}(hhh]j6)}(h"The fault originated in userspace.h]h"The fault originated in userspace.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubj)}(h<``FAULT_FLAG_REMOTE`` The fault is not for current task/mm. h](j)}(h``FAULT_FLAG_REMOTE``h]j<)}(hjh]hFAULT_FLAG_REMOTE}(hhhjhhhNhNubah}(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]j6)}(h%The fault is not for current task/mm.h]h%The fault is not for current task/mm.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM<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}(hhhjhhhNhNubah}(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]j6)}(h*The fault was during an instruction fetch.h]h*The fault was during an instruction fetch.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM?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}(hhhj%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.hhMBhjubj)}(hhh]j6)}(h2The fault can be interrupted by non-fatal signals.h]h2The fault can be interrupted by non-fatal signals.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMBhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMBhjubj)}(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<)}(hj\h]hFAULT_FLAG_UNSHARE}(hhhj^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.hhMGhjVubj)}(hhh]j6)}(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.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMEhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMGhjubj)}(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<)}(hjh]hFAULT_FLAG_ORIG_PTE_VALID}(hhhjhhhNhNubah}(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.hhMKhjubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(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}(hhhjhhhNhNubah}(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.hhMMhjubj)}(hhh]j6)}(h$The fault is handled under VMA lock.h]h$The fault is handled under VMA lock.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhj~hNubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMQhj~ehhubj6)}(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 }(hAbout hj)hhhNhNubjv)}(h**FAULT_FLAG_ALLOW_RETRY**h]hFAULT_FLAG_ALLOW_RETRY}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh and }(h and hj)hhhNhNubjv)}(h**FAULT_FLAG_TRIED**h]hFAULT_FLAG_TRIED}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubh: we can specify whether we would allow page faults to retry by specifying these two fault flags correctly. Currently there can be three legal combinations:}(h: we can specify whether we would allow page faults to retry by specifying these two fault flags correctly. Currently there can be three legal combinations:hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM2hj~ehhubhenumerated_list)}(hhh](jx)}(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}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM7hjkubj)}(hhh]j6)}(hthis is the first tryh]hthis is the first try}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}hM7hj~ubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj}hM7hjhubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jxhjaubjx)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM:hjubj)}(hhh]j6)}(h!we've already tried at least onceh]h#we’ve already tried at least once}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM: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&]uh1jxhjaubjx)}(hH!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry h]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM<hjubah}(h]h ]h"]h$]h&]uh1jxhjaubeh}(h]h ]h"]h$]h&]enumtype loweralphaprefixj-suffixj!.uh1j_hj~ehhhj~hNubj6)}(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.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhM>hj~ehhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:108: ./include/linux/mm_types.hhMEhj~ehhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_is_file_lru (C function)c.folio_is_file_lruhNtauh1hhj~ehhhNhNubh)}(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}(hhhjDhhhNhNubah}(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 }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjRhKubh)}(hfolio_is_file_lruh]h)}(hfolio_is_file_lruh]hfolio_is_file_lru}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhjRhKubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj}ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejgsbc.folio_is_file_lruasbuh1hhj}ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj}ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjyubah}(h]h ]h"]h$]h&]jj uh1j hj@hhhjRhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhjRhKubah}(h]j7ah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj9hhubj)}(hhh]j6)}(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?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj'h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj!ubj)}(hhh]j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j<)}(hjFh]hstruct folio *folio}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj@ubj)}(hhh]j6)}(hThe folio to test.h]hThe folio to test.}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[hKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj!ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj!ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj!ubj6)}(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 }(hoAn integer (not a boolean!) used to sort a folio onto the right LRU list and to account folios correctly. 1 if hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhn is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if }(hn is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhR is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.}(hR is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__folio_clear_lru_flags (C function)c.__folio_clear_lru_flagshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h2void __folio_clear_lru_flags (struct folio *folio)h]h)}(h1void __folio_clear_lru_flags(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(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 }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hK@ubh)}(h__folio_clear_lru_flagsh]h)}(h__folio_clear_lru_flagsh]h__folio_clear_lru_flags}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hK@ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(hfolioh]hfolio}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}jej7sbc.__folio_clear_lru_flagsasbuh1hhjMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjMubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj"hK@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hK@ubah}(h]jah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKBhj hhubj)}(hhh]j6)}(h-Clear page lru flags before releasing a page.h]h-Clear page lru flags before releasing a page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhK?hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hK@ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(ha**Parameters** ``struct folio *folio`` The folio that was on lru and now has a zero reference.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/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}(hhhjhhhNhNubah}(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]j6)}(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.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhK@hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKEhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_lru_list (C function)c.folio_lru_listhNtauh1hhj~ehhhNhNubh)}(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}(hhhjphhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjlhhhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKRubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj}hKRubh)}(hhh]h)}(hlru_listh]hlru_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jefolio_lru_listsbc.folio_lru_listasbuh1hhjlhhhj}hKRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj}hKRubh)}(hfolio_lru_listh]h)}(hjh]hfolio_lru_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj}hKRubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.folio_lru_listasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj'hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjlhhhj}hKRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj}hKRubah}(h]jcah ](jjeh"]h$]h&]juh1hhZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKWhjehhubj)}(hhh]j6)}(h$Which LRU list should a folio be on?h]h$Which LRU list should a folio be on?}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKQhj\hhubah}(h]h ]h"]h$]h&]uh1jhjehhhj}hKRubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKUhj{ubj)}(hhh]j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.hhKRhjubj)}(hhh]j6)}(hThe folio to test.h]hThe folio to test.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhj{ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKThj{ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mm_inline.hhKThj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_folio (C macro) c.page_foliohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h page_folioh]h)}(h page_folioh]h)}(h page_folioh]h)}(hjh]h page_folio}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(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 juh1hjjhjhhhj7hM ubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj7hM ubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jQj3jQj4uh1hhhhj~ehNhNubj6)}(h``page_folio (p)``h]j<)}(hjWh]hpage_folio (p)}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hj~ehhubjR)}(hhh]j6)}(hConverts from page to folio.h]hConverts from page to folio.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhKhjmubah}(h]h ]h"]h$]h&]uh1jQhj~ehhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh]j)}(h``p`` The page. h](j)}(h``p``h]j<)}(hjh]hp}(hhhjhhhNhNubah}(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]j6)}(h The page.h]h The page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(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 }(h&No reference, nor lock is required on hj"hhhNhNubjv)}(h**page**h]hpage}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubh. If the caller does not hold a reference, this call may race with a folio split, so it should re-check the folio still contains this page after gaining a reference on the folio.}(h. If the caller does not hold a reference, this call may race with a folio split, so it should re-check the folio still contains this page after gaining a reference on the folio.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(h **Return**h]jv)}(hjGh]hReturn}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjubj6)}(h#The folio which contains this page.h]h#The folio which contains this page.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_page (C macro) c.folio_pagehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h folio_pageh]h)}(h folio_pageh]h)}(h folio_pageh]h)}(hjh]h folio_page}(hhhjhhhNhNubah}(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.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubj6)}(h``folio_page (folio, n)``h]j<)}(hjh]hfolio_page (folio, n)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhj~ehhubjR)}(hhh]j6)}(hReturn a page from a folio.h]hReturn a page from a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubah}(h]h ]h"]h$]h&]uh1jQhj~ehhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh](j)}(h``folio`` The folio. h](j)}(h ``folio``h]j<)}(hjh]hfolio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj ubj)}(h!``n`` The page number to return. h](j)}(h``n``h]j<)}(hjOh]hn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjIubj)}(hhh]j6)}(hThe page number to return.h]hThe page number to return.}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(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](jv)}(h**n**h]hn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhg is relative to the start of the folio. This function does not check that the page number lies within }(hg is relative to the start of the folio. This function does not check that the page number lies within hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh9; the caller is presumed to have a reference to the page.}(h9; the caller is presumed to have a reference to the page.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(folio_xor_flags_has_waiters (C function)c.folio_xor_flags_has_waitershNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_xor_flags_has_waitersh]h)}(hfolio_xor_flags_has_waitersh]hfolio_xor_flags_has_waiters}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h)(struct folio *folio, unsigned long mask)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj-hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj)ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjMmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_xor_flags_has_waitersasbuh1hhj)ubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj= )}(hj@ h]h*}(hhhjyhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%ubj )}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmaskh]hmask}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubj)}(hhh]j6)}(hChange some folio flags.h]hChange some folio flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubah}(h]h ]h"]h$]h&]uh1j5h[/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<)}(hjCh]hstruct folio *folio}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhj=ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj:ubj)}(h>``unsigned long mask`` Bits set in this word will be changed. h](j)}(h``unsigned long mask``h]j<)}(hj|h]hunsigned long mask}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjvubj)}(hhh]j6)}(h&Bits set in this word will be changed.h]h&Bits set in this word will be changed.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(h-Whether there are tasks waiting on the folio.h]h-Whether there are tasks waiting on the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_test_uptodate (C function)c.folio_test_uptodatehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h4bool folio_test_uptodate (const struct folio *folio)h]h)}(h3bool folio_test_uptodate(const struct folio *folio)h](j)}(hj7h]hbool}(hhhj#hhhNhNubah}(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 }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hMubh)}(hfolio_test_uptodateh]h)}(hfolio_test_uptodateh]hfolio_test_uptodate}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj0hMubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhj_hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj[ubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj.)}(hj1h]hstruct}(hhhjzhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj[ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejEsbc.folio_test_uptodateasbuh1hhj[ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj[ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj0hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj0hMubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubj)}(hhh]j6)}(hIs this folio up to date?h]hIs this folio up to date?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.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}(hhhjAhhhNhNubah}(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.hhMhj9ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjzh]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjxubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_test_large (C function)c.folio_test_largehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h1bool folio_test_large (const struct folio *folio)h]h)}(h0bool folio_test_large(const struct folio *folio)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMSubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMSubh)}(hfolio_test_largeh]h)}(hfolio_test_largeh]hfolio_test_large}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMSubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jr)}jejsbc.folio_test_largeasbuh1hhjubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjbhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMSubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMWhjhhubj)}(hhh]j6)}(h+Does this folio contain more than one page?h]h+Does this folio contain more than one page?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMSubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hz**Parameters** ``const struct folio *folio`` The folio to test. **Return** True if the folio is larger than one page.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMVhjubj)}(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}(hhhjhhhNhNubah}(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.hhMShjubj)}(hhh]j6)}(hThe folio to test.h]hThe folio to test.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMUhjubj6)}(h*True if the folio is larger than one page.h]h*True if the folio is larger than one page.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌPageSlab (C function) c.PageSlabhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h'bool PageSlab (const struct page *page)h]h)}(h&bool PageSlab(const struct page *page)h](j)}(hj7h]hbool}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjhhMubh)}(hPageSlabh]h)}(hPageSlabh]hPageSlab}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjhhMubj )}(h(const struct page *page)h]j )}(hconst struct page *pageh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej}sb c.PageSlabasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjWhhhjhhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjhhMubah}(h]jNah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM#hjPhhubj)}(hhh]j6)}(h3Determine if the page belongs to the slab allocatorh]h3Determine if the page belongs to the slab allocator}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjhhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jNj3jNj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjXh]h Parameters}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjVubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM!hjRubj)}(hhh]j)}(h.``const struct page *page`` The page to test. h](j)}(h``const struct page *page``h]j<)}(hjwh]hconst struct page *page}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjuubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjqubj)}(hhh]j6)}(hThe page to test.h]hThe page to test.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjRubj6)}(h Any context.h]h Any context.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM hjRubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM"hjRubj6)}(h6True for slab pages, false for any other kind of page.h]h6True for slab pages, false for any other kind of page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM!hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌPageHuge (C function) c.PageHugehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h'bool PageHuge (const struct page *page)h]h)}(h&bool PageHuge(const struct page *page)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM0ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hM0ubh)}(hPageHugeh]h)}(hPageHugeh]hPageHuge}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hM0ubj )}(h(const struct page *page)h]j )}(hconst struct page *pageh](j.)}(hjh]hconst}(hhhjZhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjVubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj.)}(hj1h]hstruct}(hhhjuhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjVubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej@sb c.PageHugeasbuh1hhjVubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjVubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjRubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj+hM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hM0ubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM6hjhhubj)}(hhh]j6)}(h*Determine if the page belongs to hugetlbfsh]h*Determine if the page belongs to hugetlbfs}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM3hjubj)}(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}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM0hj4ubj)}(hhh]j6)}(hThe page to test.h]hThe page to test.}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjOhM0hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM0hj1ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Context**h]jv)}(hjuh]hContext}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM2hjubj6)}(h Any context.h]h Any context.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM2hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM4hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_has_private (C function)c.page_has_privatehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.int page_has_private (const struct page *page)h]h)}(h-int page_has_private(const struct page *page)h](j)}(hinth]hint}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpage_has_privateh]h)}(hpage_has_privateh]hpage_has_private}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(const struct page *page)h]j )}(hconst struct page *pageh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhj9hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjYmodnameN classnameNjijl)}jo]jr)}jejsbc.page_has_privateasbuh1hhjubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjhhubj)}(hhh]j6)}(h#Determine if page has private stuffh]h#Determine if page has private stuff}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``const struct page *page`` The page to be checked **Description** Determine if a page has private stuff, indicating that release routines should be invoked upon it.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj)}(hhh]j)}(h3``const struct page *page`` The page to be checked h](j)}(h``const struct page *page``h]j<)}(hjh]hconst struct page *page}(hhhjhhhNhNubah}(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]j6)}(hThe page to be checkedh]hThe page to be checked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj9h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubj6)}(hbDetermine if a page has private stuff, indicating that release routines should be invoked upon it.h]hbDetermine if a page has private stuff, indicating that release routines should be invoked upon it.}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./include/linux/page-flags.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)fault_flag_allow_retry_first (C function)c.fault_flag_allow_retry_firsthNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjhMubh)}(hfault_flag_allow_retry_firsth]h)}(hfault_flag_allow_retry_firsth]hfault_flag_allow_retry_first}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjhMubj )}(h(enum fault_flag flags)h]j )}(henum fault_flag flagsh](j.)}(hjh]henum}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h fault_flagh]h fault_flag}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.fault_flag_allow_retry_firstasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjzhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjhMubah}(h]jqah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjshhubj)}(hhh]j6)}(h check ALLOW_RETRY the first timeh]h check ALLOW_RETRY the first time}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj)}(hhh]j)}(h'``enum fault_flag flags`` Fault flags. h](j)}(h``enum fault_flag flags``h]j<)}(hjrh]henum fault_flag flags}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjlubj)}(hhh]j6)}(h Fault flags.h]h Fault flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj6)}(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.}(hjhbjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_order (C function) c.folio_orderhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.unsigned int folio_order (struct folio *folio)h]h)}(h-unsigned int folio_order(struct folio *folio)h](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMMubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMMubj)}(hinth]hint}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMMubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hMMubh)}(h folio_orderh]h)}(h folio_orderh]h folio_order}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj'hMMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjrhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejXsb c.folio_orderasbuh1hhjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjnubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj'hMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj'hMMubah}(h]j ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMThjhhubj)}(hhh]j6)}(h The allocation order of a folio.h]h The allocation order of a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMPhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj7h]hstruct folio *folio}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMMhj1ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjLhMMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjrh]h Description}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMOhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMOhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMRhjubj6)}(hThe order of the folio.h]hThe order of the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_mapcount (C function)c.page_mapcounthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h%int page_mapcount (struct page *page)h]h)}(h$int page_mapcount(struct page *page)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h page_mapcounth]h)}(h page_mapcounth]h page_mapcount}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jr)}jejsbc.page_mapcountasbuh1hhjubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h,Number of times this precise page is mapped.h]h,Number of times this precise page is mapped.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hXA**Parameters** ``struct page *page`` The page. **Description** The number of times this page is mapped. If this page is part of a large folio, it includes the number of times this page is mapped as part of that folio. Will report 0 for pages which cannot be mapped into userspace, eg slab, page tables and similar.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h ``struct page *page`` The page. h](j)}(h``struct page *page``h]j<)}(hjh]hstruct page *page}(hhhjhhhNhNubah}(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]j6)}(h The page.h]h The page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hThe number of times this page is mapped. If this page is part of a large folio, it includes the number of times this page is mapped as part of that folio.h]hThe number of times this page is mapped. If this page is part of a large folio, it includes the number of times this page is mapped as part of that folio.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(h`Will report 0 for pages which cannot be mapped into userspace, eg slab, page tables and similar.h]h`Will report 0 for pages which cannot be mapped into userspace, eg slab, page tables and similar.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapcount (C function)c.folio_mapcounthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.int folio_mapcount (const struct folio *folio)h]h)}(h-int folio_mapcount(const struct folio *folio)h](j)}(hinth]hint}(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hMubh)}(hfolio_mapcounth]h)}(hfolio_mapcounth]hfolio_mapcount}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hMubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_mapcountasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjkhhhj}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhj}hMubah}(h]jbah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjdhhubj)}(hhh]j6)}(h!Number of mappings of this folio.h]h!Number of mappings of this folio.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j<)}(hjh]hconst struct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubj6)}(h)The number of times this folio is mapped.h]h)The number of times this folio is mapped.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapped (C function)c.folio_mappedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h-bool folio_mapped (const struct folio *folio)h]h)}(h,bool folio_mapped(const struct folio *folio)h](j)}(hj7h]hbool}(hhhj`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 }(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhMubh)}(h folio_mappedh]h)}(h folio_mappedh]h folio_mapped}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjmhMubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_mappedasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj\hhhjmhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjmhMubah}(h]jSah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjUhhubj)}(hhh]j6)}(h$Is this folio mapped into userspace?h]h$Is this folio mapped into userspace?}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjmhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jSj3jSj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``const struct folio *folio`` The folio. **Return** True if any page in this folio is referenced by user page tables.h](j6)}(h**Parameters**h]jv)}(hj]h]h Parameters}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjWubj)}(hhh]j)}(h)``const struct folio *folio`` The folio. h](j)}(h``const struct folio *folio``h]j<)}(hj|h]hconst struct folio *folio}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjvubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjWubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌthp_order (C function) c.thp_orderhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h*unsigned int thp_order (struct page *page)h]h)}(h)unsigned int thp_order(struct page *page)h](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM=ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM=ubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM=ubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM=ubh)}(h thp_orderh]h)}(h thp_orderh]h thp_order}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM=ubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjUhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjQubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hpageh]hpage}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjumodnameN classnameNjijl)}jo]jr)}jej;sb c.thp_orderasbuh1hhjQubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjQubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjMubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hM=ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM=ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM?hjhhubj)}(hhh]j6)}(h!Order of a transparent huge page.h]h!Order of a transparent huge page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM<hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM=ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hM**Parameters** ``struct page *page`` Head page of a transparent huge page.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM@hjubj)}(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}(hhhjhhhNhNubah}(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.hhMBhjubj)}(hhh]j6)}(h%Head page of a transparent huge page.h]h%Head page of a transparent huge page.}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM=hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌthp_size (C function) c.thp_sizehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h*unsigned long thp_size (struct page *page)h]h)}(h)unsigned long thp_size(struct page *page)h](j)}(hunsignedh]hunsigned}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMGubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMGubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMGubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMGubh)}(hthp_sizeh]h)}(hthp_sizeh]hthp_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhMGubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.thp_sizeasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjphhhjhMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhMGubah}(h]jgah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMKhjihhubj)}(hhh]j6)}(h Size of a transparent huge page.h]h Size of a transparent huge page.}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMFhjNhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMGubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhj~ehNhNubjl)}(hx**Parameters** ``struct page *page`` Head page of a transparent huge page. **Return** Number of bytes in this page.h](j6)}(h**Parameters**h]jv)}(hjsh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMJhjmubj)}(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}(hhhjhhhNhNubah}(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.hhMGhjubj)}(hhh]j6)}(h%Head page of a transparent huge page.h]h%Head page of a transparent huge page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjmubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMIhjmubj6)}(hNumber of bytes in this page.h]hNumber of bytes in this page.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMIhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_get (C function) c.folio_gethNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h$void folio_get (struct folio *folio)h]h)}(h#void folio_get(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(h folio_geth]h)}(h folio_geth]h folio_get}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjOhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjKubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]h)}(hfolioh]hfolio}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjomodnameN classnameNjijl)}jo]jr)}jej5sb c.folio_getasbuh1hhjKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjKubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjGubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h)Increment the reference count on a folio.h]h)Increment the reference count on a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Context**h]jv)}(hjOh]hContext}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(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.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_put (C function) c.folio_puthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h$void folio_put (struct folio *folio)h]h)}(h#void folio_put(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_puth]h)}(h folio_puth]h folio_put}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.folio_putasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h)Decrement the reference count on a folio.h]h)Decrement the reference count on a folio.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmj3jmj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjqubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjqubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjqubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjqubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_put_refs (C function)c.folio_put_refshNtauh1hhj~ehhhNhNubh)}(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}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhjKhMubh)}(hfolio_put_refsh]h)}(hfolio_put_refsh]hfolio_put_refs}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhjKhMubj )}(h(struct folio *folio, int refs)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjzhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej`sbc.folio_put_refsasbuh1hhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjvubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjrubj )}(hint refsh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hrefsh]hrefs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjrubeh}(h]h ]h"]h$]h&]jj uh1j hj9hhhjKhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhjKhMubah}(h]j0ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj2hhubj)}(hhh]j6)}(h&Reduce the reference count on a folio.h]h&Reduce the reference count on a folio.}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jKj3jKj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjOubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjth]hstruct folio *folio}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjnubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(hF``int refs`` The amount to subtract from the folio's reference count. h](j)}(h ``int refs``h]j<)}(hjh]hint refs}(hhhjhhhNhNubah}(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]j6)}(h8The amount to subtract from the folio's reference count.h]h:The amount to subtract from the folio’s reference count.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjOubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjOubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjOubj6)}(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.}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolios_put (C function) c.folios_puthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h,void folios_put (struct folio_batch *folios)h]h)}(h+void folios_put(struct folio_batch *folios)h](j)}(hvoidh]hvoid}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjbhMubh)}(h folios_puth]h)}(h folios_puth]h folios_put}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjbhMubj )}(h(struct folio_batch *folios)h]j )}(hstruct folio_batch *foliosh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejwsb c.folios_putasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfoliosh]hfolios}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjPhhhjbhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjbhMubah}(h]jGah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjIhhubj)}(hhh]j6)}(h4Decrement the reference count on an array of folios.h]h4Decrement the reference count on an array of folios.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j-j3j-j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1ubj)}(hhh]j)}(h+``struct folio_batch *folios`` The folios. h](j)}(h``struct folio_batch *folios``h]j<)}(hjVh]hstruct folio_batch *folios}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjPubj)}(hhh]j6)}(h The folios.h]h The folios.}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_pfn (C function) c.folio_pfnhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h-unsigned long folio_pfn (struct folio *folio)h]h)}(h,unsigned long folio_pfn(struct folio *folio)h](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMxubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMxubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMxubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMxubh)}(h folio_pfnh]h)}(h folio_pfnh]h folio_pfn}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMxubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjVhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjRubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(hfolioh]hfolio}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjvmodnameN classnameNjijl)}jo]jr)}jej<sb c.folio_pfnasbuh1hhjRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjRubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMxubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMxubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h(Return the Page Frame Number of a folio.h]h(Return the Page Frame Number of a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMwhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhjhhhNhNubah}(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.hhMxhjubj)}(hhh]j6)}(h The folio.h]h The folio.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMxhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMxhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjVh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMzhjubj6)}(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.}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMzhjubj6)}(h **Return**h]jv)}(hj}h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM}hjubj6)}(h5The Page Frame Number of the first page in the folio.h]h5The Page Frame Number of the first page in the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#folio_maybe_dma_pinned (C function)c.folio_maybe_dma_pinnedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h1bool folio_maybe_dma_pinned (struct folio *folio)h]h)}(h0bool folio_maybe_dma_pinned(struct folio *folio)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_maybe_dma_pinnedh]h)}(hfolio_maybe_dma_pinnedh]hfolio_maybe_dma_pinned}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_maybe_dma_pinnedasbuh1hhjubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjJhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h(Report if a folio may be pinned for DMA.h]h(Report if a folio may be pinned for DMA.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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 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 page has been "dma-pinned". False, if the page is definitely not dma-pinned.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hXFor small folios, the return value is partially fuzzy: false is not fuzzy, because it means "definitely not pinned for DMA", but true means "probably pinned for DMA, but possibly a false positive due to having at least GUP_PIN_COUNTING_BIAS worth of normal folio references".h]hXFor small folios, the return value is partially fuzzy: false is not fuzzy, because it means “definitely not pinned for DMA”, but true means “probably pinned for DMA, but possibly a false positive due to having at least GUP_PIN_COUNTING_BIAS worth of normal folio references”.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(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.}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hFor 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 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.}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(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.}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(h **Return**h]jv)}(hjah]hReturn}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hkTrue, if it is likely that the page has been "dma-pinned". False, if the page is definitely not dma-pinned.h]hoTrue, if it is likely that the page has been “dma-pinned”. False, if the page is definitely not dma-pinned.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_zero_page (C function)c.is_zero_pagehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h+bool is_zero_page (const struct page *page)h]h)}(h*bool is_zero_page(const struct page *page)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h is_zero_pageh]h)}(h is_zero_pageh]h is_zero_page}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(const struct page *page)h]j )}(hconst struct page *pageh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.is_zero_pageasbuh1hhjubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjIhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(hQuery if a page is a zero pageh]hQuery if a page is a zero page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``const struct page *page`` The page to query **Description** This returns true if **page** is one of the permanent zero pages.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(h.``const struct page *page`` The page to query h](j)}(h``const struct page *page``h]j<)}(hjh]hconst struct page *page}(hhhjhhhNhNubah}(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]j6)}(hThe page to queryh]hThe page to query}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hAThis returns true if **page** is one of the permanent zero pages.h](hThis returns true if }(hThis returns true if hjhhhNhNubjv)}(h**page**h]hpage}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is one of the permanent zero pages.}(h$ is one of the permanent zero pages.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_zero_folio (C function)c.is_zero_foliohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.bool is_zero_folio (const struct folio *folio)h]h)}(h-bool is_zero_folio(const struct folio *folio)h](j)}(hj7h]hbool}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjchMubh)}(h is_zero_folioh]h)}(h is_zero_folioh]h is_zero_folio}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjchMubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejxsbc.is_zero_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjRhhhjchMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjchMubah}(h]jIah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjKhhubj)}(hhh]j6)}(hQuery if a folio is a zero pageh]hQuery if a folio is a zero page}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjchMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jIj3jIj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``const struct folio *folio`` The folio to query **Description** This returns true if **folio** is one of the permanent zero pages.h](j6)}(h**Parameters**h]jv)}(hjSh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj)}(hhh]j)}(h1``const struct folio *folio`` The folio to query h](j)}(h``const struct folio *folio``h]j<)}(hjrh]hconst struct folio *folio}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjpubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjlubj)}(hhh]j6)}(hThe folio to queryh]hThe folio to query}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubj6)}(hBThis returns true if **folio** is one of the permanent zero pages.h](hThis returns true if }(hThis returns true if hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh$ is one of the permanent zero pages.}(h$ is one of the permanent zero pages.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_nr_pages (C function)c.folio_nr_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhj 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 }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(hfolio_nr_pagesh]h)}(hfolio_nr_pagesh]hfolio_nr_pages}(hhhj' hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj# ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj )}(h(const struct folio *folio)h]j )}(hconst struct folio *folioh](j.)}(hjh]hconst}(hhhjC hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj? ubj)}(h h]h }(hhhjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubj.)}(hj1h]hstruct}(hhhj^ hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj? ubj)}(h h]h }(hhhjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj| hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj~ modnameN classnameNjijl)}jo]jr)}jej) sbc.folio_nr_pagesasbuh1hhj? ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj? ubh)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj? ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj; ubah}(h]h ]h"]h$]h&]jj uh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(h!The number of pages in the folio.h]h!The number of pages in the folio.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(h`**Parameters** ``const struct folio *folio`` The folio. **Return** A positive power of two.h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/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<)}(hj# h]hconst struct folio *folio}(hhhj% 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]j6)}(h The folio.h]h The folio.}(hj> hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8 hMhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj8 hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h **Return**h]jv)}(hj^ h]hReturn}(hhhj` hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubj6)}(hA positive power of two.h]hA positive power of two.}(hjv hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌthp_nr_pages (C function)c.thp_nr_pageshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h$int thp_nr_pages (struct page *page)h]h)}(h#int thp_nr_pages(struct page *page)h](j)}(hinth]hint}(hhhj 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 }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM>ubh)}(h thp_nr_pagesh]h)}(h thp_nr_pagesh]h thp_nr_pages}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM>ubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hpageh]hpage}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jej sbc.thp_nr_pagesasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj, hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hpageh]hpage}(hhhj9 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubah}(h]h ]h"]h$]h&]jj uh1j hj hhhj hM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM>ubah}(h]j ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM@hj hhubj)}(hhh]j6)}(h.The number of regular pages in this huge page.h]h.The number of regular pages in this huge page.}(hjf hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM=hja hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM>ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j| j3j| j4uh1hhhhj~ehNhNubjl)}(hE**Parameters** ``struct page *page`` The head page of a huge page.h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMAhj ubj)}(hhh]j)}(h3``struct page *page`` The head page of a huge page.h](j)}(h``struct page *page``h]j<)}(hj h]hstruct page *page}(hhhj 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.hhMChj ubj)}(hhh]j6)}(hThe head page of a huge page.h]hThe head page of a huge page.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM>hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMChj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_next (C function) c.folio_nexthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h/struct folio * folio_next (struct folio *folio)h]h)}(h-struct folio *folio_next(struct folio *folio)h](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMGubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMGubh)}(hhh]h)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}je folio_nextsb c.folio_nextasbuh1hhj hhhj hMGubj)}(h h]h }(hhhj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMGubj= )}(hj@ h]h*}(hhhjM hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj hhhj hMGubh)}(h folio_nexth]h)}(hj< h]h folio_next}(hhhj^ hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMGubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjy hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hju ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]j:  c.folio_nextasbuh1hhju ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hju ubh)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjq ubah}(h]h ]h"]h$]h&]jj uh1j hj hhhj hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMGubah}(h]j ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMShj hhubj)}(hhh]j6)}(h Move to the next physical folio.h]h Move to the next physical folio.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMFhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMGubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMJhj 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}(hhhj> 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.hhMGhj6 ubj)}(hhh]j6)}(h'The folio we're currently operating on.h]h)The folio we’re currently operating on.}(hjW hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQ hMGhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hMGhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjw h]h Description}(hhhjy hhhNhNubah}(h]h ]h"]h$]h&]uh1juhju ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMIhj ubj6)}(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 }(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}(hhhj hhhNhNubah}(h]h ](jj,c-typeeh"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]refdocj refdomainj,reftypetype refexplicitrefwarnjbjcjbio_vecuh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMIhj 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 }(h), 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++}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubh.}(hjyhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj hMIhj ubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMOhj ubj6)}(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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMOhj ubj6)}(h **Return**h]jv)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMRhj ubj6)}(hThe next struct folio.h]hThe next struct folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMQhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_shift (C function) c.folio_shifthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.unsigned int folio_shift (struct folio *folio)h]h)}(h-unsigned int folio_shift(struct folio *folio)h](j)}(hunsignedh]hunsigned}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMZubj)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMZubj)}(hinth]hint}(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMZubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMZubh)}(h folio_shifth]h)}(h folio_shifth]h folio_shift}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjOhMZubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.folio_shiftasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj=hhhjOhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjOhMZubah}(h]j4ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMdhj6hhubj)}(hhh]j6)}(h/The size of the memory described by this folio.h]h/The size of the memory described by this folio.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMYhjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMZubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j6j3j6j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``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](j6)}(h**Parameters**h]jv)}(hj@h]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM]hj:ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj_h]hstruct folio *folio}(hhhjahhhNhNubah}(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.hhMZhjYubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjthMZhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMZhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM\hj:ubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM\hj:ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM`hj:ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM`hj:ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMchj:ubj6)}(h/The base-2 logarithm of the size of this folio.h]h/The base-2 logarithm of the size of this folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMbhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_size (C function) c.folio_sizehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h'size_t folio_size (struct folio *folio)h]h)}(h&size_t folio_size(struct folio *folio)h](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj2modnameN classnameNjijl)}jo]jr)}je folio_sizesb c.folio_sizeasbuh1hhj)hhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMkubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhjQhMkubh)}(h folio_sizeh]h)}(hjNh]h folio_size}(hhhjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhjQhMkubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj{ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jL c.folio_sizeasbuh1hhj{ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj{ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjwubah}(h]h ]h"]h$]h&]jj uh1j hj)hhhjQhMkubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhjQhMkubah}(h]j ah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMqhj"hhubj)}(hhh]j6)}(hThe number of bytes in a folio.h]hThe number of bytes in a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMjhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhjQhMkubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``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](j6)}(h**Parameters**h]jv)}(hj#h]h Parameters}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMnhjubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjBh]hstruct folio *folio}(hhhjDhhhNhNubah}(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.hhMkhj<ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhMkhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMkhj9ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Context**h]jv)}(hj}h]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMmhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMmhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMphjubj6)}(h"The number of bytes in this folio.h]h"The number of bytes in this folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'folio_likely_mapped_shared (C function)c.folio_likely_mapped_sharedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h5bool folio_likely_mapped_shared (struct folio *folio)h]h)}(h4bool folio_likely_mapped_shared(struct folio *folio)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMxubh)}(hfolio_likely_mapped_sharedh]h)}(hfolio_likely_mapped_sharedh]hfolio_likely_mapped_shared}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMxubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj!ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jr)}jej sbc.folio_likely_mapped_sharedasbuh1hhj!ubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj= )}(hj@ h]h*}(hhhjqhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj!ubh)}(hfolioh]hfolio}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMxubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMxubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjhhubj)}(hhh]j6)}(hHEstimate if the folio is mapped into the page tables of more than one MMh]hHEstimate if the folio is mapped into the page tables of more than one MM}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMwhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMxubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct folio *folio`` The folio. **Description** This function checks if the folio is currently mapped into more than one MM ("mapped shared"), or if the folio is only mapped into a single MM ("mapped exclusively"). As precise information is not easily available for all folios, this function estimates the number of MMs ("sharers") that are currently mapping a folio using the number of times the first page of the folio is currently mapped into page tables. For small anonymous folios (except KSM folios) and anonymous hugetlb folios, the return value will be exactly correct, because they can only be mapped at most once into an MM, and they cannot be partially mapped. For other folios, the result can be fuzzy: #. For partially-mappable large folios (THP), the return value can wrongly indicate "mapped exclusively" (false negative) when the folio is only partially mapped into at least one MM. #. 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. #. For (small) KSM folios, the return value can wrongly indicate "mapped shared" (false positive), when the folio is mapped multiple times into the same MM. 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/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}(hhhjhhhNhNubah}(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.hhMyhjubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj%h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM{hjubj6)}(hThis function checks if the folio is currently mapped into more than one MM ("mapped shared"), or if the folio is only mapped into a single MM ("mapped exclusively").h]hThis function checks if the folio is currently mapped into more than one MM (“mapped shared”), or if the folio is only mapped into a single MM (“mapped exclusively”).}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM{hjubj6)}(hAs precise information is not easily available for all folios, this function estimates the number of MMs ("sharers") that are currently mapping a folio using the number of times the first page of the folio is currently mapped into page tables.h]hAs precise information is not easily available for all folios, this function estimates the number of MMs (“sharers”) that are currently mapping a folio using the number of times the first page of the folio is currently mapped into page tables.}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(hFor small anonymous folios (except KSM folios) and anonymous hugetlb folios, the return value will be exactly correct, because they can only be mapped at most once into an MM, and they cannot be partially mapped.h]hFor small anonymous folios (except KSM folios) and anonymous hugetlb folios, the return value will be exactly correct, because they can only be mapped at most once into an MM, and they cannot be partially mapped.}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j)}(hX>For other folios, the result can be fuzzy: #. For partially-mappable large folios (THP), the return value can wrongly indicate "mapped exclusively" (false negative) when the folio is only partially mapped into at least one MM. #. 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. #. For (small) KSM folios, the return value can wrongly indicate "mapped shared" (false positive), when the folio is mapped multiple times into the same MM. h](j)}(h*For other folios, the result can be fuzzy:h]h*For other folios, the result can be fuzzy:}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjkubj)}(hhh]j`)}(hhh](jx)}(hFor partially-mappable large folios (THP), the return value can wrongly indicate "mapped exclusively" (false negative) when the folio is only partially mapped into at least one MM.h]j6)}(hFor partially-mappable large folios (THP), the return value can wrongly indicate "mapped exclusively" (false negative) when the folio is only partially mapped into at least one MM.h]hFor partially-mappable large folios (THP), the return value can wrongly indicate “mapped exclusively” (false negative) when the folio is only partially mapped into at least one MM.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(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]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hFor (small) KSM folios, the return value can wrongly indicate "mapped shared" (false positive), when the folio is mapped multiple times into the same MM. h]j6)}(hFor (small) KSM folios, the return value can wrongly indicate "mapped shared" (false positive), when the folio is mapped multiple times into the same MM.h]hFor (small) KSM folios, the return value can wrongly indicate “mapped shared” (false positive), when the folio is mapped multiple times into the same MM.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]j arabicj hj jyuh1j_hj~ubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjhubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(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:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj)}(hhh]j`)}(hhh](jx)}(hsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).h]j6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h/If the folio is mapped differently (VM_PFNMAP).h]j6)}(hj.h]h/If the folio is mapped differently (VM_PFNMAP).}(hj.hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhj,ubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hYIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared(). h]j6)}(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().}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjDubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]j jj hj jyuh1j_hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjwh]hReturn}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpagetable_alloc (C function)c.pagetable_allochNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMM ubh)}(hhh]h)}(hptdesch]hptdesc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jepagetable_allocsbc.pagetable_allocasbuh1hhjhhhjhMM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMM ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMM ubh)}(hpagetable_alloch]h)}(hjh]hpagetable_alloc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMM ubj )}(h(gfp_t gfp, unsigned int order)h](j )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jc.pagetable_allocasbuh1hhj2ubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hgfph]hgfp}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.ubj )}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(horderh]horder}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMM ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMU hjhhubj)}(hhh]j6)}(hAllocate pagetablesh]hAllocate pagetables}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhML hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMP hjubj)}(hhh](j)}(h``gfp_t gfp`` GFP flags h](j)}(h ``gfp_t gfp``h]j<)}(hj"h]h gfp_t gfp}(hhhj$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.hhMM hjubj)}(hhh]j6)}(h GFP flagsh]h GFP flags}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMM hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMM hjubj)}(h/``unsigned int order`` desired pagetable order h](j)}(h``unsigned int order``h]j<)}(hj[h]hunsigned int order}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMN hjUubj)}(hhh]j6)}(hdesired pagetable orderh]hdesired pagetable order}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMN hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMN hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMP hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMP hjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMS hjubj6)}(h0The ptdesc describing the allocated page tables.h]h0The ptdesc describing the allocated page tables.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMS hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpagetable_free (C function)c.pagetable_freehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h'void pagetable_free (struct ptdesc *pt)h]h)}(h&void pagetable_free(struct ptdesc *pt)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM_ ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM_ ubh)}(hpagetable_freeh]h)}(hpagetable_freeh]hpagetable_free}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM_ ubj )}(h(struct ptdesc *pt)h]j )}(hstruct ptdesc *pth](j.)}(hj1h]hstruct}(hhhj?hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj;ubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]h)}(hptdesch]hptdesc}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj_modnameN classnameNjijl)}jo]jr)}jej%sbc.pagetable_freeasbuh1hhj;ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj;ubh)}(hpth]hpt}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj7ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM_ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM_ ubah}(h]jah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMd hjhhubj)}(hhh]j6)}(hFree pagetablesh]hFree pagetables}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM^ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM_ ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMb hjubj)}(hhh]j)}(h0``struct ptdesc *pt`` The page table descriptor h](j)}(h``struct ptdesc *pt``h]j<)}(hjh]hstruct ptdesc *pt}(hhhjhhhNhNubah}(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.hhM_ hjubj)}(hhh]j6)}(hThe page table descriptorh]hThe page table descriptor}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM_ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_ hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj?h]h Description}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj=ubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMa hjubj6)}(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.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhMa hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvma_lookup (C function) c.vma_lookuphNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}je vma_lookupsb c.vma_lookupasbuh1hhjhhhjhM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhM ubh)}(h vma_lookuph]h)}(hjh]h vma_lookup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h*(struct mm_struct *mm, unsigned long addr)h](j )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.vma_lookupasbuh1hhjubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjHhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmmh]hmm}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(haddrh]haddr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhjhM ubah}(h]jwah ](jjeh"]h$]h&]juh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjyhhubj)}(hhh]j6)}(h Find a VMA at a specific addressh]h Find a VMA at a specific address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjubj)}(hhh](j)}(h4``struct mm_struct *mm`` The process address space. h](j)}(h``struct mm_struct *mm``h]j<)}(hjh]hstruct mm_struct *mm}(hhhjhhhNhNubah}(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.hhM hj ubj)}(hhh]j6)}(hThe process address space.h]hThe process address space.}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hj ubj)}(h)``unsigned long addr`` The user address. h](j)}(h``unsigned long addr``h]j<)}(hjKh]hunsigned long addr}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjEubj)}(hhh]j6)}(hThe user address.h]hThe user address.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hM hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:112: ./include/linux/mm.hhM hjubj6)}(hzone 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](j6)}(h**Parameters**h]jv)}(hj,h]h Parameters}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj,ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMvhj,ubj)}(hhh](j)}(hI``struct zonelist *zonelist`` The zonelist to search for a suitable zone h](j)}(h``struct zonelist *zonelist``h]j<)}(hj,h]hstruct zonelist *zonelist}(hhhj,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.hhMshj,ubj)}(hhh]j6)}(h*The zonelist to search for a suitable zoneh]h*The zonelist to search for a suitable zone}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hMshj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMshj,ubj)}(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<)}(hj -h]henum zone_type highest_zoneidx}(hhhj -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.hhMthj-ubj)}(hhh]j6)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hj%-hj#-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMthj -ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMthj,ubj)}(hG``nodemask_t *nodes`` An optional nodemask to filter the zonelist with h](j)}(h``nodemask_t *nodes``h]j<)}(hjC-h]hnodemask_t *nodes}(hhhjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjA-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMuhj=-ubj)}(hhh]j6)}(h0An optional nodemask to filter the zonelist withh]h0An optional nodemask to filter the zonelist with}(hj^-hj\-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX-hMuhjY-ubah}(h]h ]h"]h$]h&]uh1jhj=-ubeh}(h]h ]h"]h$]h&]uh1jhjX-hMuhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubj6)}(h**Description**h]jv)}(hj~-h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|-ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMwhj,ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMwhj,ubj6)}(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.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhM|hj,ubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj,ubj6)}(h1Zoneref pointer for the first suitable zone foundh]h1Zoneref pointer for the first suitable zone found}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)for_each_zone_zonelist_nodemask (C macro)!c.for_each_zone_zonelist_nodemaskhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hfor_each_zone_zonelist_nodemaskh]h)}(hj-h]hfor_each_zone_zonelist_nodemask}(hhhj-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-hhhj.hMubah}(h]j-ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj-hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj-hhhj.hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j*.j3j*.j4uh1hhhhj~ehNhNubj6)}(hG``for_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)``h]j<)}(hj0.h]hCfor_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)}(hhhj2.hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj..ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj~ehhubjR)}(hhh]j6)}(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}(hjK.hjI.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjF.ubah}(h]h ]h"]h$]h&]uh1jQhj~ehhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjd.h]h Parameters}(hhhjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjb.ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj^.ubj)}(hhh](j)}(h*``zone`` The current zone in the iterator h](j)}(h``zone``h]j<)}(hj.h]hzone}(hhhj.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]j6)}(h The current zone in the iteratorh]h The current zone in the iterator}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj}.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjz.ubj)}(hD``z`` The current pointer within zonelist->_zonerefs being iterated h](j)}(h``z``h]j<)}(hj.h]hz}(hhhj.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]j6)}(h=The current pointer within zonelist->_zonerefs being iteratedh]h=The current pointer within zonelist->_zonerefs being iterated}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjz.ubj)}(h&``zlist`` The zonelist being iterated h](j)}(h ``zlist``h]j<)}(hj.h]hzlist}(hhhj.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]j6)}(hThe zonelist being iteratedh]hThe zonelist being iterated}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj /hMhj /ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj /hMhjz.ubj)}(h9``highidx`` The zone index of the highest zone to return h](j)}(h ``highidx``h]j<)}(hj./h]hhighidx}(hhhj0/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]j6)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hjI/hjG/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjC/hMhjD/ubah}(h]h ]h"]h$]h&]uh1jhj(/ubeh}(h]h ]h"]h$]h&]uh1jhjC/hMhjz.ubj)}(h/``nodemask`` Nodemask allowed by the allocator h](j)}(h ``nodemask``h]j<)}(hjg/h]hnodemask}(hhhji/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:115: ./include/linux/mmzone.hhMhja/ubj)}(hhh]j6)}(h!Nodemask allowed by the allocatorh]h!Nodemask allowed by the allocator}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|/hMhj}/ubah}(h]h ]h"]h$]h&]uh1jhja/ubeh}(h]h ]h"]h$]h&]uh1jhj|/hMhjz.ubeh}(h]h ]h"]h$]h&]uh1jhj^.ubj6)}(h**Description**h]jv)}(hj/h]h Description}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj^.ubj6)}(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}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj^.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ for_each_zone_zonelist (C macro)c.for_each_zone_zonelisthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hfor_each_zone_zonelisth]h)}(hfor_each_zone_zonelisth]h)}(hfor_each_zone_zonelisth]h)}(hj/h]hfor_each_zone_zonelist}(hhhj/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/hhhj/hMubah}(h]j/ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj/hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMubeh}(h]h ](j,macroeh"]h$]h&]j1j,j2j0j3j0j4uh1hhhhj~ehNhNubj6)}(h4``for_each_zone_zonelist (zone, z, zlist, highidx)``h]j<)}(hj0h]h0for_each_zone_zonelist (zone, z, zlist, highidx)}(hhhj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj~ehhubjR)}(hhh]j6)}(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}(hj90hj70hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj40ubah}(h]h ]h"]h$]h&]uh1jQhj~ehhhNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjR0h]h Parameters}(hhhjT0hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjP0ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjL0ubj)}(hhh](j)}(h*``zone`` The current zone in the iterator h](j)}(h``zone``h]j<)}(hjq0h]hzone}(hhhjs0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjo0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjk0ubj)}(hhh]j6)}(h The current zone in the iteratorh]h The current zone in the iterator}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjk0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjh0ubj)}(h@``z`` The current pointer within zonelist->zones being iterated h](j)}(h``z``h]j<)}(hj0h]hz}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj0ubj)}(hhh]j6)}(h9The current pointer within zonelist->zones being iteratedh]h9The current pointer within zonelist->zones being iterated}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjh0ubj)}(h&``zlist`` The zonelist being iterated h](j)}(h ``zlist``h]j<)}(hj0h]hzlist}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj0ubj)}(hhh]j6)}(hThe zonelist being iteratedh]hThe zonelist being iterated}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjh0ubj)}(h9``highidx`` The zone index of the highest zone to return h](j)}(h ``highidx``h]j<)}(hj1h]hhighidx}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj1ubj)}(hhh]j6)}(h,The zone index of the highest zone to returnh]h,The zone index of the highest zone to return}(hj71hj51hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj11hMhj21ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj11hMhjh0ubeh}(h]h ]h"]h$]h&]uh1jhjL0ubj6)}(h**Description**h]jv)}(hjW1h]h Description}(hhhjY1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU1ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjL0ubj6)}(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.}(hjo1hjm1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjL0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpfn_valid (C function) c.pfn_validhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h!int pfn_valid (unsigned long pfn)h]h)}(h int pfn_valid(unsigned long pfn)h](j)}(hinth]hint}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubh)}(h pfn_validh]h)}(h pfn_validh]h pfn_valid}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhj1hMubj )}(h(unsigned long pfn)h]j )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hlongh]hlong}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hpfnh]hpfn}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubah}(h]h ]h"]h$]h&]jj uh1j hj1hhhj1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]juh1hhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj1hhubj)}(hhh]j6)}(h4check if there is a valid memory map entry for a PFNh]h4check if there is a valid memory map entry for a PFN}(hj>2hj<2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhj92hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jT2j3jT2j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj^2h]h Parameters}(hhhj`2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\2ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjX2ubj)}(hhh]j)}(h5``unsigned long pfn`` the page frame number to check h](j)}(h``unsigned long pfn``h]j<)}(hj}2h]hunsigned long pfn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjw2ubj)}(hhh]j6)}(hthe page frame number to checkh]hthe page frame number to check}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjw2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjt2ubah}(h]h ]h"]h$]h&]uh1jhjX2ubj6)}(h**Description**h]jv)}(hj2h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjX2ubj6)}(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 }(hCCheck if there is a valid memory map entry aka struct page for the hj2hhhNhNubjv)}(h**pfn**h]hpfn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubhl. Note, that availability of the memory map entry does not imply that there is actual usable memory at that }(hl. Note, that availability of the memory map entry does not imply that there is actual usable memory at that hj2hhhNhNubjv)}(h**pfn**h]hpfn}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubhA. The struct page may represent a hole or an unusable page frame.}(hA. The struct page may represent a hole or an unusable page frame.hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjX2ubj6)}(h **Return**h]jv)}(hj3h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjX2ubj6)}(h71 for PFNs that have memory map entries and 0 otherwiseh]h71 for PFNs that have memory map entries and 0 otherwise}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mmzone.hhMhjX2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_mapping (C function)c.folio_mappinghNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h:struct address_space * folio_mapping (struct folio *folio)h]h)}(h8struct address_space *folio_mapping(struct folio *folio)h](j.)}(hj1h]hstruct}(hhhjK3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjG3hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM ubj)}(h h]h }(hhhjY3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG3hhhjX3hM ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg3ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjl3modnameN classnameNjijl)}jo]jr)}je folio_mappingsbc.folio_mappingasbuh1hhjG3hhhjX3hM ubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG3hhhjX3hM ubj= )}(hj@ h]h*}(hhhj3hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjG3hhhjX3hM ubh)}(h folio_mappingh]h)}(hj3h]h folio_mapping}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjG3hhhjX3hM ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3ubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj3modnameN classnameNjijl)}jo]j3c.folio_mappingasbuh1hhj3ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj3ubh)}(hfolioh]hfolio}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubah}(h]h ]h"]h$]h&]jj uh1j hjG3hhhjX3hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjC3hhhjX3hM ubah}(h]j>3ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhj@3hhubj)}(hhh]j6)}(h,Find the mapping where this folio is stored.h]h,Find the mapping where this folio is stored.}(hjI4hjG4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM hjD4hhubah}(h]h ]h"]h$]h&]uh1jhj@3hhhjX3hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j_4j3j_4j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hji4h]h Parameters}(hhhjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjg4ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM hjc4ubj)}(hhh]j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hj4h]hstruct folio *folio}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj4ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM hj4ubj)}(hhh]j6)}(h The folio.h]h The folio.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjc4ubj6)}(h**Description**h]jv)}(hj4h]h Description}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM hjc4ubj6)}(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).}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chM hjc4ubj6)}(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.}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/util.chMhjc4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__anon_vma_prepare (C function)c.__anon_vma_preparehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h3int __anon_vma_prepare (struct vm_area_struct *vma)h]h)}(h2int __anon_vma_prepare(struct vm_area_struct *vma)h](j)}(hinth]hint}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKubj)}(h h]h }(hhhj&5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj%5hKubh)}(h__anon_vma_prepareh]h)}(h__anon_vma_prepareh]h__anon_vma_prepare}(hhhj85hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj45ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj%5hKubj )}(h(struct vm_area_struct *vma)h]j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjT5hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjP5ubj)}(h h]h }(hhhja5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP5ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjr5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo5ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjt5modnameN classnameNjijl)}jo]jr)}jej:5sbc.__anon_vma_prepareasbuh1hhjP5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP5ubj= )}(hj@ h]h*}(hhhj5hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjP5ubh)}(hvmah]hvma}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjL5ubah}(h]h ]h"]h$]h&]jj uh1j hj5hhhj%5hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj%5hKubah}(h]j 5ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj 5hhubj)}(hhh]j6)}(h%attach an anon_vma to a memory regionh]h%attach an anon_vma to a memory region}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5hhubah}(h]h ]h"]h$]h&]uh1jhj 5hhhj%5hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j5j3j5j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubj)}(hhh]j)}(h=``struct vm_area_struct *vma`` the memory region in question h](j)}(h``struct vm_area_struct *vma``h]j<)}(hj6h]hstruct vm_area_struct *vma}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj6ubj)}(hhh]j6)}(hthe memory region in questionh]hthe memory region in question}(hj46hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.6hKhj/6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj.6hKhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hjT6h]h Description}(hhhjV6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjR6ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubj6)}(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.}(hjl6hjj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubj6)}(hX!The common case will be that we already have one, which is handled inline by anon_vma_prepare(). But if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one.h]hX!The common case will be that we already have one, which is handled inline by anon_vma_prepare(). But if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one.}(hj{6hjy6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubj6)}(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).}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubj6)}(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.}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chKhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_referenced (C function)c.folio_referencedhNtauh1hhj~ehhhNhNubh)}(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}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubh)}(hfolio_referencedh]h)}(hfolio_referencedh]hfolio_referenced}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhj6hMubj )}(hW(struct folio *folio, int is_locked, struct mem_cgroup *memcg, unsigned long *vm_flags)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj7hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj6ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj!7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#7modnameN classnameNjijl)}jo]jr)}jej6sbc.folio_referencedasbuh1hhj6ubj)}(h h]h }(hhhjA7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj= )}(hj@ h]h*}(hhhjO7hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6ubh)}(hfolioh]hfolio}(hhhj\7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubj )}(h int is_lockedh](j)}(hinth]hint}(hhhju7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq7ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq7ubh)}(h is_lockedh]h is_locked}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubj )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhj7hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj7ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj7modnameN classnameNjijl)}jo]j=7c.folio_referencedasbuh1hhj7ubj)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj= )}(hj@ h]h*}(hhhj7hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj7ubh)}(hmemcgh]hmemcg}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubj )}(hunsigned long *vm_flagsh](j)}(hunsignedh]hunsigned}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hhhj(8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hlongh]hlong}(hhhj68hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hhhjD8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj= )}(hj@ h]h*}(hhhjR8hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj8ubh)}(hvm_flagsh]hvm_flags}(hhhj_8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubeh}(h]h ]h"]h$]h&]jj uh1j hj6hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj6hhubj)}(hhh]j6)}(h!Test if the folio was referenced.h]h!Test if the folio was referenced.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j8j3j8j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj8h]h Parameters}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj8ubj)}(hhh](j)}(h+``struct folio *folio`` The folio to test. h](j)}(h``struct folio *folio``h]j<)}(hj8h]hstruct folio *folio}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj8ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj8ubj)}(hhh]j6)}(hThe folio to test.h]hThe folio to test.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h2``int is_locked`` Caller holds lock on the folio. h](j)}(h``int is_locked``h]j<)}(hj9h]h int is_locked}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj9ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj8ubj)}(hhh]j6)}(hCaller holds lock on the folio.h]hCaller holds lock on the folio.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubj)}(h2``struct mem_cgroup *memcg`` target memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hj=9h]hstruct mem_cgroup *memcg}(hhhj?9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;9ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj79ubj)}(hhh]j6)}(htarget memory cgrouph]htarget memory cgroup}(hjX9hjV9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjR9hMhjS9ubah}(h]h ]h"]h$]h&]uh1jhj79ubeh}(h]h ]h"]h$]h&]uh1jhjR9hMhj8ubj)}(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<)}(hjv9h]hunsigned long *vm_flags}(hhhjx9hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjt9ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjp9ubj)}(hhh]j6)}(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.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjp9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hj9h]h Description}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj8ubj6)}(h:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj::ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj+:hMVubj )}(hV(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)h](j )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjZ:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV:ubj)}(h h]h }(hhhjh:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV:ubj)}(hlongh]hlong}(hhhjv:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV:ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV:ubh)}(hpfnh]hpfn}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjR:ubj )}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hlongh]hlong}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hnr_pagesh]hnr_pages}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjR:ubj )}(h pgoff_t pgoffh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jr)}jej@:sbc.pfn_mkclean_rangeasbuh1hhj:ubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hpgoffh]hpgoff}(hhhj-;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjR:ubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjF;hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjB;ubj)}(h h]h }(hhhjS;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB;ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjd;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja;ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjf;modnameN classnameNjijl)}jo]j;c.pfn_mkclean_rangeasbuh1hhjB;ubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB;ubj= )}(hj@ h]h*}(hhhj;hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjB;ubh)}(hvmah]hvma}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjR:ubeh}(h]h ]h"]h$]h&]jj uh1j hj:hhhj+:hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj+:hMVubah}(h]j:ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM`hj:hhubj)}(hhh]j6)}(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 [}(h7Cleans the PTEs (including PMDs) mapped with range of [hj;hhhNhNubjv)}(h**pfn**h]hpfn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh, }(h, hj;hhhNhNubjv)}(h**pfn**h]hpfn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh + }(h + hj;hhhNhNubjv)}(h **nr_pages**h]hnr_pages}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh) at the specific offset (}(h) at the specific offset (hj;hhhNhNubjv)}(h **pgoff**h]hpgoff}(hhhj <hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh ) within the }(h ) within the hj;hhhNhNubjv)}(h**vma**h]hvma}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh[ of shared mappings. And since clean PTEs should also be readonly, write protects them too.}(h[ of shared mappings. And since clean PTEs should also be readonly, write protects them too.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMUhj;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj+:hMVubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j@<j3j@<j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJ<h]h Parameters}(hhhjL<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjH<ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMYhjD<ubj)}(hhh](j)}(h!``unsigned long pfn`` start pfn. h](j)}(h``unsigned long pfn``h]j<)}(hji<h]hunsigned long pfn}(hhhjk<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjg<ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMYhjc<ubj)}(hhh]j6)}(h start pfn.h]h start pfn.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~<hMYhj<ubah}(h]h ]h"]h$]h&]uh1jhjc<ubeh}(h]h ]h"]h$]h&]uh1jhj~<hMYhj`<ubj)}(hX``unsigned long nr_pages`` number of physically contiguous pages srarting with **pfn**. h](j)}(h``unsigned long nr_pages``h]j<)}(hj<h]hunsigned long nr_pages}(hhhj<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.chMZhj<ubj)}(hhh]j6)}(hhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj>ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj*>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'>ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj,>modnameN classnameNjijl)}jo]jr)}jej=sbc.folio_move_anon_rmapasbuh1hhj>ubj)}(h h]h }(hhhjJ>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj= )}(hj@ h]h*}(hhhjX>hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj>ubh)}(hfolioh]hfolio}(hhhje>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>ubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj~>hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjz>ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz>ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj>modnameN classnameNjijl)}jo]jF>c.folio_move_anon_rmapasbuh1hhjz>ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz>ubj= )}(hj@ h]h*}(hhhj>hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjz>ubh)}(hvmah]hvma}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>ubeh}(h]h ]h"]h$]h&]jj uh1j hj=hhhj=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhj=hMubah}(h]j=ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj=hhubj)}(hhh]j6)}(hmove a folio to our anon_vmah]hmove a folio to our anon_vma}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj=hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?j3j?j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj"?h]h Parameters}(hhhj$?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ?ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj?ubj)}(hhh](j)}(h:``struct folio *folio`` The folio to move to our anon_vma h](j)}(h``struct folio *folio``h]j<)}(hjA?h]hstruct folio *folio}(hhhjC?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]j6)}(h!The folio to move to our anon_vmah]h!The folio to move to our anon_vma}(hj\?hjZ?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjV?hMhjW?ubah}(h]h ]h"]h$]h&]uh1jhj;?ubeh}(h]h ]h"]h$]h&]uh1jhjV?hMhj8?ubj)}(h<``struct vm_area_struct *vma`` The vma the folio belongs to h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjz?h]hstruct vm_area_struct *vma}(hhhj|?hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjx?ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjt?ubj)}(hhh]j6)}(hThe vma the folio belongs toh]hThe vma the folio belongs to}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjt?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj8?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj6)}(h**Description**h]jv)}(hj?h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj?ubj6)}(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.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__folio_set_anon (C function)c.__folio_set_anonhNtauh1hhj~ehhhNhNubh)}(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}(hhhj?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 }(hhhj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hMubh)}(h__folio_set_anonh]h)}(h__folio_set_anonh]h__folio_set_anon}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?hhhj@hMubj )}(hX(struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj7@hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3@ubj)}(h h]h }(hhhjD@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3@ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjU@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjW@modnameN classnameNjijl)}jo]jr)}jej@sbc.__folio_set_anonasbuh1hhj3@ubj)}(h h]h }(hhhju@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3@ubj= )}(hj@ h]h*}(hhhj@hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj3@ubh)}(hfolioh]hfolio}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/@ubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj@hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj@modnameN classnameNjijl)}jo]jq@c.__folio_set_anonasbuh1hhj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj= )}(hj@ h]h*}(hhhj@hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj@ubh)}(hvmah]hvma}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/@ubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hhhj'AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hlongh]hlong}(hhhj5AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hhhjCAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(haddressh]haddress}(hhhjQAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/@ubj )}(hbool exclusiveh](j)}(hj7h]hbool}(hhhjjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfAubj)}(h h]h }(hhhjwAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfAubh)}(h exclusiveh]h exclusive}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj/@ubeh}(h]h ]h"]h$]h&]jj uh1j hj?hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhj@hMubah}(h]j?ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj?hhubj)}(hhh]j6)}(h'set up a new anonymous rmap for a folioh]h'set up a new anonymous rmap for a folio}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj@hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jAj3jAj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjAh]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjAubj)}(hhh](j)}(hH``struct folio *folio`` The folio to set up the new anonymous rmap for. h](j)}(h``struct folio *folio``h]j<)}(hjAh]hstruct folio *folio}(hhhjAhhhNhNubah}(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.chMhjAubj)}(hhh]j6)}(h/The folio to set up the new anonymous rmap for.h]h/The folio to set up the new anonymous rmap for.}(hj Bhj BhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubj)}(h<``struct vm_area_struct *vma`` VM area to add the folio to. h](j)}(h``struct vm_area_struct *vma``h]j<)}(hj*Bh]hstruct vm_area_struct *vma}(hhhj,BhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj(Bubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj$Bubj)}(hhh]j6)}(hVM area to add the folio to.h]hVM area to add the folio to.}(hjEBhjCBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?BhMhj@Bubah}(h]h ]h"]h$]h&]uh1jhj$Bubeh}(h]h ]h"]h$]h&]uh1jhj?BhMhjAubj)}(h>``unsigned long address`` User virtual address of the mapping h](j)}(h``unsigned long address``h]j<)}(hjcBh]hunsigned long address}(hhhjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaBubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj]Bubj)}(hhh]j6)}(h#User virtual address of the mappingh]h#User virtual address of the mapping}(hj~Bhj|BhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxBhMhjyBubah}(h]h ]h"]h$]h&]uh1jhj]Bubeh}(h]h ]h"]h$]h&]uh1jhjxBhMhjAubj)}(hA``bool exclusive`` Whether the folio is exclusive to the process.h](j)}(h``bool exclusive``h]j<)}(hjBh]hbool exclusive}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBubj)}(hhh]j6)}(h.Whether the folio is exclusive to the process.h]h.Whether the folio is exclusive to the process.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#__page_check_anon_rmap (C function)c.__page_check_anon_rmaphNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hwvoid __page_check_anon_rmap (struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address)h]h)}(hvvoid __page_check_anon_rmap(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address)h](j)}(hvoidh]hvoid}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjChMubh)}(h__page_check_anon_rmaph]h)}(h__page_check_anon_rmaph]h__page_check_anon_rmap}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjChMubj )}(h[(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj3ChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj/Cubj)}(h h]h }(hhhj@ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Cubh)}(hhh]h)}(hfolioh]hfolio}(hhhjQChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNCubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjSCmodnameN classnameNjijl)}jo]jr)}jejCsbc.__page_check_anon_rmapasbuh1hhj/Cubj)}(h h]h }(hhhjqChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Cubj= )}(hj@ h]h*}(hhhjChhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj/Cubh)}(hfolioh]hfolio}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/Cubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+Cubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]h)}(hpageh]hpage}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjCmodnameN classnameNjijl)}jo]jmCc.__page_check_anon_rmapasbuh1hhjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj= )}(hj@ h]h*}(hhhjChhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjCubh)}(hpageh]hpage}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+Cubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjDhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjDubj)}(h h]h }(hhhj"DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj3DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0Dubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj5DmodnameN classnameNjijl)}jo]jmCc.__page_check_anon_rmapasbuh1hhjDubj)}(h h]h }(hhhjQDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj= )}(hj@ h]h*}(hhhj_DhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjDubh)}(hvmah]hvma}(hhhjlDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+Cubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hlongh]hlong}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(haddressh]haddress}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj+Cubeh}(h]h ]h"]h$]h&]jj uh1j hjBhhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjChMubah}(h]jBah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjBhhubj)}(hhh]j6)}(h$sanity check anonymous rmap additionh]h$sanity check anonymous rmap addition}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjChMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jEj3jEj4uh1hhhhj~ehNhNubjl)}(hX **Parameters** ``struct folio *folio`` The folio containing **page**. ``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](j6)}(h**Parameters**h]jv)}(hj Eh]h Parameters}(hhhj EhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjEubj)}(hhh](j)}(h7``struct folio *folio`` The folio containing **page**. h](j)}(h``struct folio *folio``h]j<)}(hj)Eh]hstruct folio *folio}(hhhj+EhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'Eubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj#Eubj)}(hhh]j6)}(hThe folio containing **page**.h](hThe folio containing }(hThe folio containing hjBEhhhNhNubjv)}(h**page**h]hpage}(hhhjKEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBEubh.}(hjyhjBEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hj>EhMhj?Eubah}(h]h ]h"]h$]h&]uh1jhj#Eubeh}(h]h ]h"]h$]h&]uh1jhj>EhMhj Eubj)}(h7``struct page *page`` the page to check the mapping of h](j)}(h``struct page *page``h]j<)}(hjuEh]hstruct page *page}(hhhjwEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsEubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjoEubj)}(hhh]j6)}(h the page to check the mapping ofh]h the page to check the mapping of}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjoEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj Eubj)}(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<)}(hjEh]hstruct vm_area_struct *vma}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjEubj)}(hhh]j6)}(h)the vm area in which the mapping is addedh]h)the vm area in which the mapping is added}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj Eubj)}(h9``unsigned long address`` the user virtual address mappedh](j)}(h``unsigned long address``h]j<)}(hjEh]hunsigned long address}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjEubj)}(hhh]j6)}(hthe user virtual address mappedh]hthe user virtual address mapped}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj Eubeh}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%folio_add_anon_rmap_ptes (C function)c.folio_add_anon_rmap_pteshNtauh1hhj~ehhhNhNubh)}(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}(hhhjAFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=FhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM5ubj)}(h h]h }(hhhjPFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=FhhhjOFhM5ubh)}(hfolio_add_anon_rmap_ptesh]h)}(hfolio_add_anon_rmap_ptesh]hfolio_add_anon_rmap_ptes}(hhhjbFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^Fubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=FhhhjOFhM5ubj )}(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.)}(hj1h]hstruct}(hhhj~FhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjzFubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubh)}(hhh]h)}(hfolioh]hfolio}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjFmodnameN classnameNjijl)}jo]jr)}jejdFsbc.folio_add_anon_rmap_ptesasbuh1hhjzFubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubj= )}(hj@ h]h*}(hhhjFhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjzFubh)}(hfolioh]hfolio}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzFubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjFhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjFubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]h)}(hpageh]hpage}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Gubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjGmodnameN classnameNjijl)}jo]jFc.folio_add_anon_rmap_ptesasbuh1hhjFubj)}(h h]h }(hhhj,GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj= )}(hj@ h]h*}(hhhj:GhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjFubh)}(hpageh]hpage}(hhhjGGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubj )}(h int nr_pagesh](j)}(hinth]hint}(hhhj`GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Gubj)}(h h]h }(hhhjnGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Gubh)}(hnr_pagesh]hnr_pages}(hhhj|GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\Gubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjGhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjGubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjGmodnameN classnameNjijl)}jo]jFc.folio_add_anon_rmap_ptesasbuh1hhjGubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj= )}(hj@ h]h*}(hhhjGhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjGubh)}(hvmah]hvma}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hlongh]hlong}(hhhj!HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hhhj/HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(haddressh]haddress}(hhhj=HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubj )}(h rmap_t flagsh](h)}(hhh]h)}(hrmap_th]hrmap_t}(hhhjYHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVHubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[HmodnameN classnameNjijl)}jo]jFc.folio_add_anon_rmap_ptesasbuh1hhjRHubj)}(h h]h }(hhhjwHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRHubh)}(hflagsh]hflags}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRHubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvFubeh}(h]h ]h"]h$]h&]jj uh1j hj=FhhhjOFhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9FhhhjOFhM5ubah}(h]j4Fah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMChj6Fhhubj)}(hhh]j6)}(h1add PTE mappings to a page range of an anon folioh]h1add PTE mappings to a page range of an anon folio}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM4hjHhhubah}(h]h ]h"]h$]h&]uh1jhj6FhhhjOFhM5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jHj3jHj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjHh]h Parameters}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM8hjHubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mappings to h](j)}(h``struct folio *folio``h]j<)}(hjHh]hstruct folio *folio}(hhhjHhhhNhNubah}(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.chM5hjHubj)}(hhh]j6)}(h The folio to add the mappings toh]h The folio to add the mappings to}(hj Ihj IhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhM5hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhM5hjHubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j<)}(hj*Ih]hstruct page *page}(hhhj,IhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj(Iubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM6hj$Iubj)}(hhh]j6)}(hThe first page to addh]hThe first page to add}(hjEIhjCIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?IhM6hj@Iubah}(h]h ]h"]h$]h&]uh1jhj$Iubeh}(h]h ]h"]h$]h&]uh1jhj?IhM6hjHubj)}(h:``int nr_pages`` The number of pages which will be mapped h](j)}(h``int nr_pages``h]j<)}(hjcIh]h int nr_pages}(hhhjeIhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaIubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM7hj]Iubj)}(hhh]j6)}(h(The number of pages which will be mappedh]h(The number of pages which will be mapped}(hj~Ihj|IhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxIhM7hjyIubah}(h]h ]h"]h$]h&]uh1jhj]Iubeh}(h]h ]h"]h$]h&]uh1jhjxIhM7hjHubj)}(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<)}(hjIh]hstruct vm_area_struct *vma}(hhhjIhhhNhNubah}(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.chM8hjIubj)}(hhh]j6)}(h+The vm area in which the mappings are addedh]h+The vm area in which the mappings are added}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhM8hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM8hjHubj)}(hL``unsigned long address`` The user virtual address of the first page to map h](j)}(h``unsigned long address``h]j<)}(hjIh]hunsigned long address}(hhhjIhhhNhNubah}(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.chM9hjIubj)}(hhh]j6)}(h1The user virtual address of the first page to maph]h1The user virtual address of the first page to map}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhM9hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM9hjHubj)}(h ``rmap_t flags`` The rmap flags h](j)}(h``rmap_t flags``h]j<)}(hjJh]h rmap_t flags}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj Jubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM:hjJubj)}(hhh]j6)}(hThe rmap flagsh]hThe rmap flags}(hj)Jhj'JhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#JhM:hj$Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj#JhM:hjHubeh}(h]h ]h"]h$]h&]uh1jhjHubj6)}(h**Description**h]jv)}(hjIJh]h Description}(hhhjKJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGJubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM<hjHubj6)}(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)}(hjaJhj_JhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM<hjHubj6)}(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).}(hjpJhjnJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM>hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_anon_rmap_pmd (C function)c.folio_add_anon_rmap_pmdhNtauh1hhj~ehhhNhNubh)}(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}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMMubj)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjJhMMubh)}(hfolio_add_anon_rmap_pmdh]h)}(hfolio_add_anon_rmap_pmdh]hfolio_add_anon_rmap_pmd}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjJhMMubj )}(hi(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjJhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjJubj)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]h)}(hfolioh]hfolio}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjJmodnameN classnameNjijl)}jo]jr)}jejJsbc.folio_add_anon_rmap_pmdasbuh1hhjJubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj= )}(hj@ h]h*}(hhhj&KhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjJubh)}(hfolioh]hfolio}(hhhj3KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjJubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjLKhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjHKubj)}(h h]h }(hhhjYKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHKubh)}(hhh]h)}(hpageh]hpage}(hhhjjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgKubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjlKmodnameN classnameNjijl)}jo]jKc.folio_add_anon_rmap_pmdasbuh1hhjHKubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHKubj= )}(hj@ h]h*}(hhhjKhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjHKubh)}(hpageh]hpage}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHKubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjJubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjKhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjKubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjKmodnameN classnameNjijl)}jo]jKc.folio_add_anon_rmap_pmdasbuh1hhjKubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj= )}(hj@ h]h*}(hhhjLhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjKubh)}(hvmah]hvma}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjJubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhj,LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Lubj)}(h h]h }(hhhj:LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Lubj)}(hlongh]hlong}(hhhjHLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Lubj)}(h h]h }(hhhjVLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Lubh)}(haddressh]haddress}(hhhjdLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Lubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjJubj )}(h rmap_t flagsh](h)}(hhh]h)}(hrmap_th]hrmap_t}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Lubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjLmodnameN classnameNjijl)}jo]jKc.folio_add_anon_rmap_pmdasbuh1hhjyLubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyLubh)}(hflagsh]hflags}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyLubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjJubeh}(h]h ]h"]h$]h&]jj uh1j hjJhhhjJhMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjJhMMubah}(h]jJah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMXhjJhhubj)}(hhh]j6)}(h2add a PMD mapping to a page range of an anon folioh]h2add a PMD mapping to a page range of an anon folio}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMLhjLhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLj3jLj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjLh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMPhjLubj)}(hhh](j)}(h8``struct folio *folio`` The folio to add the mapping to h](j)}(h``struct folio *folio``h]j<)}(hjMh]hstruct folio *folio}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMMhjMubj)}(hhh]j6)}(hThe folio to add the mapping toh]hThe folio to add the mapping to}(hj3Mhj1MhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-MhMMhj.Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj-MhMMhjMubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j<)}(hjQMh]hstruct page *page}(hhhjSMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMNhjKMubj)}(hhh]j6)}(hThe first page to addh]hThe first page to add}(hjlMhjjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfMhMNhjgMubah}(h]h ]h"]h$]h&]uh1jhjKMubeh}(h]h ]h"]h$]h&]uh1jhjfMhMNhjMubj)}(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<)}(hjMh]hstruct vm_area_struct *vma}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMOhjMubj)}(hhh]j6)}(h)The vm area in which the mapping is addedh]h)The vm area in which the mapping is added}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMOhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMOhjMubj)}(hL``unsigned long address`` The user virtual address of the first page to map h](j)}(h``unsigned long address``h]j<)}(hjMh]hunsigned long address}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMPhjMubj)}(hhh]j6)}(h1The user virtual address of the first page to maph]h1The user virtual address of the first page to map}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMPhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMPhjMubj)}(h ``rmap_t flags`` The rmap flags h](j)}(h``rmap_t flags``h]j<)}(hjMh]h rmap_t flags}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMQhjMubj)}(hhh]j6)}(hThe rmap flagsh]hThe rmap flags}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjNhMQhjNubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjNhMQhjMubeh}(h]h ]h"]h$]h&]uh1jhjLubj6)}(h**Description**h]jv)}(hj7Nh]h Description}(hhhj9NhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj5Nubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMShjLubj6)}(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)}(hjONhjMNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMShjLubj6)}(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^Nhj\NhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMUhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_new_anon_rmap (C function)c.folio_add_new_anon_rmaphNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hevoid folio_add_new_anon_rmap (struct folio *folio, struct vm_area_struct *vma, unsigned long address)h]h)}(hdvoid folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma, unsigned long address)h](j)}(hvoidh]hvoid}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMeubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhjNhMeubh)}(hfolio_add_new_anon_rmaph]h)}(hfolio_add_new_anon_rmaph]hfolio_add_new_anon_rmap}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhjNhMeubj )}(hH(struct folio *folio, struct vm_area_struct *vma, unsigned long address)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjNhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjNubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]h)}(hfolioh]hfolio}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjNmodnameN classnameNjijl)}jo]jr)}jejNsbc.folio_add_new_anon_rmapasbuh1hhjNubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj= )}(hj@ h]h*}(hhhjOhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjNubh)}(hfolioh]hfolio}(hhhj!OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj:OhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj6Oubj)}(h h]h }(hhhjGOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Oubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjXOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUOubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjZOmodnameN classnameNjijl)}jo]jOc.folio_add_new_anon_rmapasbuh1hhj6Oubj)}(h h]h }(hhhjvOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Oubj= )}(hj@ h]h*}(hhhjOhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6Oubh)}(hvmah]hvma}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Oubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubj )}(hunsigned long addressh](j)}(hunsignedh]hunsigned}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hlongh]hlong}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(haddressh]haddress}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjNubeh}(h]h ]h"]h$]h&]jj uh1j hjNhhhjNhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjNhMeubah}(h]j~Nah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMphjNhhubj)}(hhh]j6)}(h%Add mapping to a new anonymous folio.h]h%Add mapping to a new anonymous folio.}(hjPhj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMdhj Phhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjNhMeubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j%Pj3j%Pj4uh1hhhhj~ehNhNubjl)}(hX**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 **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 does not have to be locked. If the folio is pmd-mappable, it is accounted as a THP. As the folio is new, it's assumed to be mapped exclusively by a single process.h](j6)}(h**Parameters**h]jv)}(hj/Ph]h Parameters}(hhhj1PhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-Pubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhhj)Pubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mapping to. h](j)}(h``struct folio *folio``h]j<)}(hjNPh]hstruct folio *folio}(hhhjPPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjLPubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMehjHPubj)}(hhh]j6)}(h The folio to add the mapping to.h]h The folio to add the mapping to.}(hjiPhjgPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjcPhMehjdPubah}(h]h ]h"]h$]h&]uh1jhjHPubeh}(h]h ]h"]h$]h&]uh1jhjcPhMehjEPubj)}(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<)}(hjPh]hstruct vm_area_struct *vma}(hhhjPhhhNhNubah}(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.chMfhjPubj)}(hhh]j6)}(h)the vm area in which the mapping is addedh]h)the vm area in which the mapping is added}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhMfhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMfhjEPubj)}(h:``unsigned long address`` the user virtual address mapped h](j)}(h``unsigned long address``h]j<)}(hjPh]hunsigned long address}(hhhjPhhhNhNubah}(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.chMghjPubj)}(hhh]j6)}(hthe user virtual address mappedh]hthe user virtual address mapped}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhMghjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMghjEPubeh}(h]h ]h"]h$]h&]uh1jhj)Pubj6)}(h**Description**h]jv)}(hjPh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMihj)Pubj6)}(hLike folio_add_anon_rmap_*() but must only be called on *new* folios. This means the inc-and-test can be bypassed. The folio does not have to be locked.h](h8Like folio_add_anon_rmap_*() but must only be called on }(h8Like folio_add_anon_rmap_*() but must only be called on hjQhhhNhNubjH)}(h*new*h]hnew}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jHhjQubh[ folios. This means the inc-and-test can be bypassed. The folio does not have to be locked.}(h[ folios. This means the inc-and-test can be bypassed. The folio does not have to be locked.hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMihj)Pubj6)}(hIf the folio is pmd-mappable, it is accounted as a THP. As the folio is new, it's assumed to be mapped exclusively by a single process.h]hIf the folio is pmd-mappable, it is accounted as a THP. As the folio is new, it’s assumed to be mapped exclusively by a single process.}(hj6Qhj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMmhj)Pubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%folio_add_file_rmap_ptes (C function)c.folio_add_file_rmap_pteshNtauh1hhj~ehhhNhNubh)}(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}(hhhjcQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_QhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hhhjrQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_QhhhjqQhMubh)}(hfolio_add_file_rmap_ptesh]h)}(hfolio_add_file_rmap_ptesh]hfolio_add_file_rmap_ptes}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_QhhhjqQhMubj )}(hR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]h)}(hfolioh]hfolio}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjQmodnameN classnameNjijl)}jo]jr)}jejQsbc.folio_add_file_rmap_ptesasbuh1hhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj= )}(hj@ h]h*}(hhhjQhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjQubh)}(hfolioh]hfolio}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjRhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjRubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(hpageh]hpage}(hhhj0RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Rubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj2RmodnameN classnameNjijl)}jo]jQc.folio_add_file_rmap_ptesasbuh1hhjRubj)}(h h]h }(hhhjNRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj= )}(hj@ h]h*}(hhhj\RhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjRubh)}(hpageh]hpage}(hhhjiRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubj )}(h int nr_pagesh](j)}(hinth]hint}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Rubh)}(hnr_pagesh]hnr_pages}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Rubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjRhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjRubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjRmodnameN classnameNjijl)}jo]jQc.folio_add_file_rmap_ptesasbuh1hhjRubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj= )}(hj@ h]h*}(hhhjShhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjRubh)}(hvmah]hvma}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjQubeh}(h]h ]h"]h$]h&]jj uh1j hj_QhhhjqQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[QhhhjqQhMubah}(h]jVQah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjXQhhubj)}(hhh]j6)}(h+add PTE mappings to a page range of a folioh]h+add PTE mappings to a page range of a folio}(hj;Shj9ShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj6Shhubah}(h]h ]h"]h$]h&]uh1jhjXQhhhjqQhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jQSj3jQSj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj[Sh]h Parameters}(hhhj]ShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYSubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjUSubj)}(hhh](j)}(h9``struct folio *folio`` The folio to add the mappings to h](j)}(h``struct folio *folio``h]j<)}(hjzSh]hstruct folio *folio}(hhhj|ShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxSubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjtSubj)}(hhh]j6)}(h The folio to add the mappings toh]h The folio to add the mappings to}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjtSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjqSubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j<)}(hjSh]hstruct page *page}(hhhjShhhNhNubah}(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]j6)}(hThe first page to addh]hThe first page to add}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjqSubj)}(hD``int nr_pages`` The number of pages that will be mapped using PTEs h](j)}(h``int nr_pages``h]j<)}(hjSh]h int nr_pages}(hhhjShhhNhNubah}(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]j6)}(h2The number of pages that will be mapped using PTEsh]h2The number of pages that will be mapped using PTEs}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhjqSubj)}(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%Th]hstruct vm_area_struct *vma}(hhhj'ThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj#Tubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjTubj)}(hhh]j6)}(h+The vm area in which the mappings are addedh]h+The vm area in which the mappings are added}(hj@Thj>ThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:ThMhj;Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj:ThMhjqSubeh}(h]h ]h"]h$]h&]uh1jhjUSubj6)}(h**Description**h]jv)}(hj`Th]h Description}(hhhjbThhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^Tubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjUSubj6)}(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)}(hjxThjvThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjUSubj6)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjUSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$folio_add_file_rmap_pmd (C function)c.folio_add_file_rmap_pmdhNtauh1hhj~ehhhNhNubh)}(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}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjThMubh)}(hfolio_add_file_rmap_pmdh]h)}(hfolio_add_file_rmap_pmdh]hfolio_add_file_rmap_pmd}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjThhhjThMubj )}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjThhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjTubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]h)}(hfolioh]hfolio}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Uubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjUmodnameN classnameNjijl)}jo]jr)}jejTsbc.folio_add_file_rmap_pmdasbuh1hhjTubj)}(h h]h }(hhhj/UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj= )}(hj@ h]h*}(hhhj=UhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjTubh)}(hfolioh]hfolio}(hhhjJUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjTubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjcUhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj_Uubj)}(h h]h }(hhhjpUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Uubh)}(hhh]h)}(hpageh]hpage}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Uubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjUmodnameN classnameNjijl)}jo]j+Uc.folio_add_file_rmap_pmdasbuh1hhj_Uubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Uubj= )}(hj@ h]h*}(hhhjUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj_Uubh)}(hpageh]hpage}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_Uubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjTubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjUhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjUubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjUmodnameN classnameNjijl)}jo]j+Uc.folio_add_file_rmap_pmdasbuh1hhjUubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj= )}(hj@ h]h*}(hhhjVhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjUubh)}(hvmah]hvma}(hhhj*VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjTubeh}(h]h ]h"]h$]h&]jj uh1j hjThhhjThMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjThMubah}(h]jTah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjThhubj)}(hhh]j6)}(h,add a PMD mapping to a page range of a folioh]h,add a PMD mapping to a page range of a folio}(hjWVhjUVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjRVhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmVj3jmVj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwVh]h Parameters}(hhhjyVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuVubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjqVubj)}(hhh](j)}(h8``struct folio *folio`` The folio to add the mapping to h](j)}(h``struct folio *folio``h]j<)}(hjVh]hstruct folio *folio}(hhhjVhhhNhNubah}(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]j6)}(hThe folio to add the mapping toh]hThe folio to add the mapping to}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubj)}(h,``struct page *page`` The first page to add h](j)}(h``struct page *page``h]j<)}(hjVh]hstruct page *page}(hhhjVhhhNhNubah}(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]j6)}(hThe first page to addh]hThe first page to add}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubj)}(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<)}(hjWh]hstruct vm_area_struct *vma}(hhhj 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]j6)}(h)The vm area in which the mapping is addedh]h)The vm area in which the mapping is added}(hj#Whj!WhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjVubeh}(h]h ]h"]h$]h&]uh1jhjqVubj6)}(h**Description**h]jv)}(hjCWh]h Description}(hhhjEWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAWubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjqVubj6)}(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)}(hj[WhjYWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjqVubj6)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjjWhjhWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjqVubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#folio_remove_rmap_ptes (C function)c.folio_remove_rmap_pteshNtauh1hhj~ehhhNhNubh)}(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}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM/ubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhM/ubh)}(hfolio_remove_rmap_ptesh]h)}(hfolio_remove_rmap_ptesh]hfolio_remove_rmap_ptes}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjWhM/ubj )}(hR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjWhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjWubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]h)}(hfolioh]hfolio}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjWmodnameN classnameNjijl)}jo]jr)}jejWsbc.folio_remove_rmap_ptesasbuh1hhjWubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj= )}(hj@ h]h*}(hhhj XhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjWubh)}(hfolioh]hfolio}(hhhj-XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjFXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjBXubj)}(h h]h }(hhhjSXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBXubh)}(hhh]h)}(hpageh]hpage}(hhhjdXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaXubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjfXmodnameN classnameNjijl)}jo]jXc.folio_remove_rmap_ptesasbuh1hhjBXubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBXubj= )}(hj@ h]h*}(hhhjXhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjBXubh)}(hpageh]hpage}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBXubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubj )}(h int nr_pagesh](j)}(hinth]hint}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hnr_pagesh]hnr_pages}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjXubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj YmodnameN classnameNjijl)}jo]jXc.folio_remove_rmap_ptesasbuh1hhjXubj)}(h h]h }(hhhj'YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj= )}(hj@ h]h*}(hhhj5YhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjXubh)}(hvmah]hvma}(hhhjBYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjWubeh}(h]h ]h"]h$]h&]jj uh1j hjWhhhjWhM/ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjWhM/ubah}(h]jWah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM8hjWhhubj)}(hhh]j6)}(h0remove PTE mappings from a page range of a folioh]h0remove PTE mappings from a page range of a folio}(hjoYhjmYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM.hjjYhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhM/ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jYj3jYj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjYh]h Parameters}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM2hjYubj)}(hhh](j)}(h>``struct folio *folio`` The folio to remove the mappings from h](j)}(h``struct folio *folio``h]j<)}(hjYh]hstruct folio *folio}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM/hjYubj)}(hhh]j6)}(h%The folio to remove the mappings fromh]h%The folio to remove the mappings from}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhM/hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM/hjYubj)}(h/``struct page *page`` The first page to remove h](j)}(h``struct page *page``h]j<)}(hjYh]hstruct page *page}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM0hjYubj)}(hhh]j6)}(hThe first page to removeh]hThe first page to remove}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhM0hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM0hjYubj)}(hK``int nr_pages`` The number of pages that will be removed from the mapping h](j)}(h``int nr_pages``h]j<)}(hj Zh]h int nr_pages}(hhhj"ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM1hjZubj)}(hhh]j6)}(h9The number of pages that will be removed from the mappingh]h9The number of pages that will be removed from the mapping}(hj;Zhj9ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5ZhM1hj6Zubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj5ZhM1hjYubj)}(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<)}(hjYZh]hstruct vm_area_struct *vma}(hhhj[ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjWZubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM2hjSZubj)}(hhh]j6)}(h/The vm area from which the mappings are removedh]h/The vm area from which the mappings are removed}(hjtZhjrZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjnZhM2hjoZubah}(h]h ]h"]h$]h&]uh1jhjSZubeh}(h]h ]h"]h$]h&]uh1jhjnZhM2hjYubeh}(h]h ]h"]h$]h&]uh1jhjYubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM4hjYubj6)}(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)}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM4hjYubj6)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM6hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"folio_remove_rmap_pmd (C function)c.folio_remove_rmap_pmdhNtauh1hhj~ehhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM@ubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhM@ubh)}(hfolio_remove_rmap_pmdh]h)}(hfolio_remove_rmap_pmdh]hfolio_remove_rmap_pmd}(hhhj [hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhM@ubj )}(hD(struct folio *folio, struct page *page, struct vm_area_struct *vma)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj%[hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj![ubj)}(h h]h }(hhhj2[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj![ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjC[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjE[modnameN classnameNjijl)}jo]jr)}jej [sbc.folio_remove_rmap_pmdasbuh1hhj![ubj)}(h h]h }(hhhjc[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj![ubj= )}(hj@ h]h*}(hhhjq[hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj![ubh)}(hfolioh]hfolio}(hhhj~[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj![ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhj[hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]h)}(hpageh]hpage}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[modnameN classnameNjijl)}jo]j_[c.folio_remove_rmap_pmdasbuh1hhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj= )}(hj@ h]h*}(hhhj[hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj[ubh)}(hpageh]hpage}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj\hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj\ubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj%\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"\ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj'\modnameN classnameNjijl)}jo]j_[c.folio_remove_rmap_pmdasbuh1hhj\ubj)}(h h]h }(hhhjC\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj= )}(hj@ h]h*}(hhhjQ\hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj\ubh)}(hvmah]hvma}(hhhj^\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubeh}(h]h ]h"]h$]h&]jj uh1j hjZhhhjZhM@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhM@ubah}(h]jZah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMHhjZhhubj)}(hhh]j6)}(h1remove a PMD mapping from a page range of a folioh]h1remove a PMD mapping from a page range of a folio}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM?hj\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhM@ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMChj\ubj)}(hhh](j)}(h=``struct folio *folio`` The folio to remove the mapping from h](j)}(h``struct folio *folio``h]j<)}(hj\h]hstruct folio *folio}(hhhj\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]j6)}(h$The folio to remove the mapping fromh]h$The folio to remove the mapping from}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hM@hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM@hj\ubj)}(h/``struct page *page`` The first page to remove h](j)}(h``struct page *page``h]j<)}(hj]h]hstruct page *page}(hhhj]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.chMAhj\ubj)}(hhh]j6)}(hThe first page to removeh]hThe first page to remove}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hMAhj]ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj]hMAhj\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<)}(hj<]h]hstruct vm_area_struct *vma}(hhhj>]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.chMBhj6]ubj)}(hhh]j6)}(h-The vm area from which the mapping is removedh]h-The vm area from which the mapping is removed}(hjW]hjU]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjQ]hMBhjR]ubah}(h]h ]h"]h$]h&]uh1jhj6]ubeh}(h]h ]h"]h$]h&]uh1jhjQ]hMBhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hjw]h]h Description}(hhhjy]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhju]ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMDhj\ubj6)}(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)}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMDhj\ubj6)}(h-The caller needs to hold the page table lock.h]h-The caller needs to hold the page table lock.}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMFhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtry_to_unmap (C function)c.try_to_unmaphNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h=void try_to_unmap (struct folio *folio, enum ttu_flags flags)h]h)}(hvoid try_to_migrate(struct folio *folio, enum ttu_flags flags)h](j)}(hvoidh]hvoid}(hhhj`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 }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj `hhhj`hMubh)}(htry_to_migrateh]h)}(htry_to_migrateh]htry_to_migrate}(hhhj1`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj `hhhj`hMubj )}(h+(struct folio *folio, enum ttu_flags flags)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjM`hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjI`ubj)}(h h]h }(hhhjZ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI`ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjk`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjm`modnameN classnameNjijl)}jo]jr)}jej3`sbc.try_to_migrateasbuh1hhjI`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI`ubj= )}(hj@ h]h*}(hhhj`hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjI`ubh)}(hfolioh]hfolio}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjE`ubj )}(henum ttu_flags flagsh](j.)}(hjh]henum}(hhhj`hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]h)}(h ttu_flagsh]h ttu_flags}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]j`c.try_to_migrateasbuh1hhj`ubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hflagsh]hflags}(hhhj ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjE`ubeh}(h]h ]h"]h$]h&]jj uh1j hj `hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj`hhubj)}(hhh]j6)}(h8try to replace all page table mappings with swap entriesh]h8try to replace all page table mappings with swap entries}(hj6ahj4ahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhj1ahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jLaj3jLaj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjVah]h Parameters}(hhhjXahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTaubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPaubj)}(hhh](j)}(hD``struct folio *folio`` the folio to replace page table entries for h](j)}(h``struct folio *folio``h]j<)}(hjuah]hstruct folio *folio}(hhhjwahhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsaubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjoaubj)}(hhh]j6)}(h+the folio to replace page table entries forh]h+the folio to replace page table entries for}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjoaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjlaubj)}(h*``enum ttu_flags flags`` action and flags h](j)}(h``enum ttu_flags flags``h]j<)}(hjah]henum ttu_flags flags}(hhhjahhhNhNubah}(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.chMhjaubj)}(hhh]j6)}(haction and flagsh]haction and flags}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjlaubeh}(h]h ]h"]h$]h&]uh1jhjPaubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPaubj6)}(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.}(hjbhjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chMhjPaubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(folio_make_device_exclusive (C function)c.folio_make_device_exclusivehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hpbool folio_make_device_exclusive (struct folio *folio, struct mm_struct *mm, unsigned long address, void *owner)h]h)}(hobool folio_make_device_exclusive(struct folio *folio, struct mm_struct *mm, unsigned long address, void *owner)h](j)}(hj7h]hbool}(hhhj.bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*bhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM| ubj)}(h h]h }(hhhj**Parameters** ``struct mm_struct *mm`` mm_struct of associated target process ``unsigned long start`` start of the region to mark for exclusive device access ``unsigned long end`` end address of region ``struct page **pages`` returns the pages which were successfully marked for exclusive access ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering **Return** number of pages found in the range by GUP. A page is marked for exclusive access only if the page pointer is non-NULL. **Description** This function finds ptes mapping page(s) to the given address range, locks them and replaces mappings with special swap entries preventing userspace CPU access. On fault these entries are replaced with the original mapping after calling MMU notifiers. 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 page lock and reference after which point CPU access to the page will revoke the exclusive access.h](j6)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubj)}(hhh](j)}(h@``struct mm_struct *mm`` mm_struct of associated target process h](j)}(h``struct mm_struct *mm``h]j<)}(hjhh]hstruct mm_struct *mm}(hhhjhhhhNhNubah}(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.chM hjhubj)}(hhh]j6)}(h&mm_struct of associated target processh]h&mm_struct of associated target process}(hj)hhj'hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#hhM hj$hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj#hhM hjhubj)}(hP``unsigned long start`` start of the region to mark for exclusive device access h](j)}(h``unsigned long start``h]j<)}(hjGhh]hunsigned long start}(hhhjIhhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjEhubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjAhubj)}(hhh]j6)}(h7start of the region to mark for exclusive device accessh]h7start of the region to mark for exclusive device access}(hjbhhj`hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hhM hj]hubah}(h]h ]h"]h$]h&]uh1jhjAhubeh}(h]h ]h"]h$]h&]uh1jhj\hhM hjhubj)}(h,``unsigned long end`` end address of region h](j)}(h``unsigned long end``h]j<)}(hjhh]hunsigned long end}(hhhjhhhhNhNubah}(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.chM hjzhubj)}(hhh]j6)}(hend address of regionh]hend address of region}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhM hjhubah}(h]h ]h"]h$]h&]uh1jhjzhubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjhubj)}(h^``struct page **pages`` returns the pages which were successfully marked for exclusive access h](j)}(h``struct page **pages``h]j<)}(hjhh]hstruct page **pages}(hhhjhhhhNhNubah}(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.chM hjhubj)}(hhh]j6)}(hEreturns the pages which were successfully marked for exclusive accessh]hEreturns the pages which were successfully marked for exclusive access}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhM hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjhubj)}(hQ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering h](j)}(h``void *owner``h]j<)}(hjhh]h void *owner}(hhhjhhhhNhNubah}(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.chM hjhubj)}(hhh]j6)}(h@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filteringh]h@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering}(hj ihj ihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihM hjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihM hjhubeh}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h **Return**h]jv)}(hj-ih]hReturn}(hhhj/ihhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+iubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubj6)}(hvnumber of pages found in the range by GUP. A page is marked for exclusive access only if the page pointer is non-NULL.h]hvnumber of pages found in the range by GUP. A page is marked for exclusive access only if the page pointer is non-NULL.}(hjEihjCihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubj6)}(h**Description**h]jv)}(hjTih]h Description}(hhhjVihhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRiubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubj6)}(hThis function finds ptes mapping page(s) to the given address range, locks them and replaces mappings with special swap entries preventing userspace CPU access. On fault these entries are replaced with the original mapping after calling MMU notifiers.h]hThis function finds ptes mapping page(s) to the given address range, locks them and replaces mappings with special swap entries preventing userspace CPU access. On fault these entries are replaced with the original mapping after calling MMU notifiers.}(hjlihjjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubj6)}(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 page 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 page lock and reference after which point CPU access to the page will revoke the exclusive access.}(hj{ihjyihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/rmap.chM hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_folio (C function)c.migrate_foliohNtauh1hhj~ehhhNhNubh)}(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}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjihMubh)}(h migrate_folioh]h)}(h migrate_folioh]h migrate_folio}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjihMubj )}(h](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjihhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjjmodnameN classnameNjijl)}jo]jr)}jejisbc.migrate_folioasbuh1hhjiubj)}(h h]h }(hhhj#jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj= )}(hj@ h]h*}(hhhj1jhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjiubh)}(hmappingh]hmapping}(hhhj>jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjiubj )}(hstruct folio *dsth](j.)}(hj1h]hstruct}(hhhjWjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjSjubj)}(h h]h }(hhhjdjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjujhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjwjmodnameN classnameNjijl)}jo]jjc.migrate_folioasbuh1hhjSjubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSjubj= )}(hj@ h]h*}(hhhjjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjSjubh)}(hdsth]hdst}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjiubj )}(hstruct folio *srch](j.)}(hj1h]hstruct}(hhhjjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjjubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjjmodnameN classnameNjijl)}jo]jjc.migrate_folioasbuh1hhjjubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj= )}(hj@ h]h*}(hhhjkhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjjubh)}(hsrch]hsrc}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjiubj )}(henum migrate_mode modeh](j.)}(hjh]henum}(hhhj7khhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3kubj)}(h h]h }(hhhjDkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubh)}(hhh]h)}(h migrate_modeh]h migrate_mode}(hhhjUkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRkubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjWkmodnameN classnameNjijl)}jo]jjc.migrate_folioasbuh1hhj3kubj)}(h h]h }(hhhjskhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3kubh)}(hmodeh]hmode}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3kubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjiubeh}(h]h ]h"]h$]h&]jj uh1j hjihhhjihMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjihMubah}(h]jiah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjihhubj)}(hhh]j6)}(hSimple folio migration.h]hSimple folio migration.}(hjkhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhj~ehNhNubjl)}(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 use PagePrivate/PagePrivate2. Folios are locked upon entry and exit.h](j6)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjkubj)}(hhh](j)}(hJ``struct address_space *mapping`` The address_space containing the folio. h](j)}(h!``struct address_space *mapping``h]j<)}(hjkh]hstruct address_space *mapping}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhjkubj)}(hhh]j6)}(h'The address_space containing the folio.h]h'The address_space containing the folio.}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubj)}(h8``struct folio *dst`` The folio to migrate the data to. h](j)}(h``struct folio *dst``h]j<)}(hj&lh]hstruct folio *dst}(hhhj(lhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj$lubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/migrate.chMhj lubj)}(hhh]j6)}(h!The folio to migrate the data to.h]h!The folio to migrate the data to.}(hjAlhj?lhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;lh"Mhjmm is used for the search.h](hfFind an area between the low_limit and the high_limit with the correct alignment and offset, all from }(hfFind an area between the low_limit and the high_limit with the correct alignment and offset, all from hjluhhhNhNubjv)}(h**info**h]hinfo}(hhhjuuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjluubh+. Note: current->mm is used for the search.}(h+. Note: current->mm is used for the search.hjluhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM)hjiuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthM*ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct vm_unmapped_area_info *info`` The unmapped area information including the range [low_limit - high_limit), the alignment offset and mask. **Return** A memory address or -ENOMEM.h](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM-hjuubj)}(hhh]j)}(h``struct vm_unmapped_area_info *info`` The unmapped area information including the range [low_limit - high_limit), the alignment offset and mask. h](j)}(h&``struct vm_unmapped_area_info *info``h]j<)}(hjuh]h"struct vm_unmapped_area_info *info}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjuubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM.hjuubj)}(hhh]j6)}(hjThe unmapped area information including the range [low_limit - high_limit), the alignment offset and mask.h]hjThe unmapped area information including the range [low_limit - high_limit), the alignment offset and mask.}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM-hjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM.hjuubah}(h]h ]h"]h$]h&]uh1jhjuubj6)}(h **Return**h]jv)}(hjuh]hReturn}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM0hjuubj6)}(hA memory address or -ENOMEM.h]hA memory address or -ENOMEM.}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM0hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"unmapped_area_topdown (C function)c.unmapped_area_topdownhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hHunsigned long unmapped_area_topdown (struct vm_unmapped_area_info *info)h]h)}(hGunsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)h](j)}(hunsignedh]hunsigned}(hhhjBvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>vhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMcubj)}(h h]h }(hhhjQvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>vhhhjPvhMcubj)}(hlongh]hlong}(hhhj_vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>vhhhjPvhMcubj)}(h h]h }(hhhjmvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>vhhhjPvhMcubh)}(hunmapped_area_topdownh]h)}(hunmapped_area_topdownh]hunmapped_area_topdown}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{vubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>vhhhjPvhMcubj )}(h$(struct vm_unmapped_area_info *info)h]j )}(h"struct vm_unmapped_area_info *infoh](j.)}(hj1h]hstruct}(hhhjvhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjvubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]h)}(hvm_unmapped_area_infoh]hvm_unmapped_area_info}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjvmodnameN classnameNjijl)}jo]jr)}jejvsbc.unmapped_area_topdownasbuh1hhjvubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj= )}(hj@ h]h*}(hhhjvhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjvubh)}(hinfoh]hinfo}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjvubah}(h]h ]h"]h$]h&]jj uh1j hj>vhhhjPvhMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:vhhhjPvhMcubah}(h]j5vah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMkhj7vhhubj)}(hhh]j6)}(hFind an area between the low_limit and the high_limit with the correct alignment and offset at the highest available address, all from **info**. Note: current->mm is used for the search.h](hFind an area between the low_limit and the high_limit with the correct alignment and offset at the highest available address, all from }(hFind an area between the low_limit and the high_limit with the correct alignment and offset at the highest available address, all from hjwhhhNhNubjv)}(h**info**h]hinfo}(hhhj(whhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubh+. Note: current->mm is used for the search.}(h+. Note: current->mm is used for the search.hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMbhjwhhubah}(h]h ]h"]h$]h&]uh1jhj7vhhhjPvhMcubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jKwj3jKwj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct vm_unmapped_area_info *info`` The unmapped area information including the range [low_limit - high_limit), the alignment offset and mask. **Return** A memory address or -ENOMEM.h](j6)}(h**Parameters**h]jv)}(hjUwh]h Parameters}(hhhjWwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSwubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMfhjOwubj)}(hhh]j)}(h``struct vm_unmapped_area_info *info`` The unmapped area information including the range [low_limit - high_limit), the alignment offset and mask. h](j)}(h&``struct vm_unmapped_area_info *info``h]j<)}(hjtwh]h"struct vm_unmapped_area_info *info}(hhhjvwhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrwubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMghjnwubj)}(hhh]j6)}(hjThe unmapped area information including the range [low_limit - high_limit), the alignment offset and mask.h]hjThe unmapped area information including the range [low_limit - high_limit), the alignment offset and mask.}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMfhjwubah}(h]h ]h"]h$]h&]uh1jhjnwubeh}(h]h ]h"]h$]h&]uh1jhjwhMghjkwubah}(h]h ]h"]h$]h&]uh1jhjOwubj6)}(h **Return**h]jv)}(hjwh]hReturn}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjwubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMihjOwubj6)}(hA memory address or -ENOMEM.h]hA memory address or -ENOMEM.}(hjwhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMihjOwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"find_vma_intersection (C function)c.find_vma_intersectionhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjwhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjwhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM}ubj)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjxhM}ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjxmodnameN classnameNjijl)}jo]jr)}jefind_vma_intersectionsbc.find_vma_intersectionasbuh1hhjwhhhjxhM}ubj)}(h h]h }(hhhj5xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjxhM}ubj= )}(hj@ h]h*}(hhhjCxhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjwhhhjxhM}ubh)}(hfind_vma_intersectionh]h)}(hj2xh]hfind_vma_intersection}(hhhjTxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjxhM}ubj )}(hH(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)h](j )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjoxhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjkxubj)}(h h]h }(hhhj|xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkxubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjxmodnameN classnameNjijl)}jo]j0xc.find_vma_intersectionasbuh1hhjkxubj)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkxubj= )}(hj@ h]h*}(hhhjxhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjkxubh)}(hmmh]hmm}(hhhjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkxubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgxubj )}(hunsigned long start_addrh](j)}(hunsignedh]hunsigned}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hlongh]hlong}(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hhhj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(h start_addrh]h start_addr}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgxubj )}(hunsigned long end_addrh](j)}(hunsignedh]hunsigned}(hhhj0yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,yubj)}(h h]h }(hhhj>yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,yubj)}(hlongh]hlong}(hhhjLyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,yubj)}(h h]h }(hhhjZyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,yubh)}(hend_addrh]hend_addr}(hhhjhyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,yubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgxubeh}(h]h ]h"]h$]h&]jj uh1j hjwhhhjxhM}ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjxhM}ubah}(h]jwah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjwhhubj)}(hhh]j6)}(h3Look up the first VMA which intersects the intervalh]h3Look up the first VMA which intersects the interval}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM|hjyhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjxhM}ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjyh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjyubj)}(hhh](j)}(h4``struct mm_struct *mm`` The process address space. h](j)}(h``struct mm_struct *mm``h]j<)}(hjyh]hstruct mm_struct *mm}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjyubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM}hjyubj)}(hhh]j6)}(hThe process address space.h]hThe process address space.}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhM}hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM}hjyubj)}(h?``unsigned long start_addr`` The inclusive start user address. h](j)}(h``unsigned long start_addr``h]j<)}(hj zh]hunsigned long start_addr}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj zubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chM~hjzubj)}(hhh]j6)}(h!The inclusive start user address.h]h!The inclusive start user address.}(hj(zhj&zhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"zhM~hj#zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj"zhM~hjyubj)}(h;``unsigned long end_addr`` The exclusive end user address. h](j)}(h``unsigned long end_addr``h]j<)}(hjFzh]hunsigned long end_addr}(hhhjHzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDzubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj@zubj)}(hhh]j6)}(hThe exclusive end user address.h]hThe exclusive end user address.}(hjazhj_zhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[zhMhj\zubah}(h]h ]h"]h$]h&]uh1jhj@zubeh}(h]h ]h"]h$]h&]uh1jhj[zhMhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubj6)}(h **Return**h]jv)}(hjzh]hReturn}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjyubj6)}(h\The first VMA within the provided range, ``NULL`` otherwise. Assumes start_addr < end_addr.h](h)The first VMA within the provided range, }(h)The first VMA within the provided range, hjzhhhNhNubj<)}(h``NULL``h]hNULL}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubh+ otherwise. Assumes start_addr < end_addr.}(h+ otherwise. Assumes start_addr < end_addr.hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_vma (C function) c.find_vmahNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjzhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjzhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjzmodnameN classnameNjijl)}jo]jr)}jefind_vmasb c.find_vmaasbuh1hhjzhhhjzhMubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubj= )}(hj@ h]h*}(hhhj({hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjzhhhjzhMubh)}(hfind_vmah]h)}(hj{h]hfind_vma}(hhhj9{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjzhMubj )}(h*(struct mm_struct *mm, unsigned long addr)h](j )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjT{hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjP{ubj)}(h h]h }(hhhja{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP{ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjr{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo{ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjt{modnameN classnameNjijl)}jo]j{ c.find_vmaasbuh1hhjP{ubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP{ubj= )}(hj@ h]h*}(hhhj{hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjP{ubh)}(hmmh]hmm}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjL{ubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hlongh]hlong}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(haddrh]haddr}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjL{ubeh}(h]h ]h"]h$]h&]jj uh1j hjzhhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjzhMubah}(h]jzah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjzhhubj)}(hhh]j6)}(h2Find the VMA for a given address, or the next VMA.h]h2Find the VMA for a given address, or the next VMA.}(hj)|hj'|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj$|hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?|j3j?|j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjI|h]h Parameters}(hhhjK|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG|ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjC|ubj)}(hhh](j)}(h0``struct mm_struct *mm`` The mm_struct to check h](j)}(h``struct mm_struct *mm``h]j<)}(hjh|h]hstruct mm_struct *mm}(hhhjj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjf|ubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjb|ubj)}(hhh]j6)}(hThe mm_struct to checkh]hThe mm_struct to check}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}|hMhj~|ubah}(h]h ]h"]h$]h&]uh1jhjb|ubeh}(h]h ]h"]h$]h&]uh1jhj}|hMhj_|ubj)}(h#``unsigned long addr`` The address h](j)}(h``unsigned long addr``h]j<)}(hj|h]hunsigned long addr}(hhhj|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]j6)}(h The addressh]h The address}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj_|ubeh}(h]h ]h"]h$]h&]uh1jhjC|ubj6)}(h **Return**h]jv)}(hj|h]hReturn}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjC|ubj6)}(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 }(h:The VMA associated with addr, or the next VMA. May return hj|hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj|ubh( in the case of no VMA at addr or above.}(h( in the case of no VMA at addr or above.hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjC|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_vma_prev (C function)c.find_vma_prevhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj5}hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj1}hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMubj)}(h h]h }(hhhjC}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1}hhhjB}hMubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjT}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ}ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjV}modnameN classnameNjijl)}jo]jr)}je find_vma_prevsbc.find_vma_prevasbuh1hhj1}hhhjB}hMubj)}(h h]h }(hhhju}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1}hhhjB}hMubj= )}(hj@ h]h*}(hhhj}hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj1}hhhjB}hMubh)}(h find_vma_prevh]h)}(hjr}h]h find_vma_prev}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1}hhhjB}hMubj )}(hI(struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)h](j )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhj}hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj}modnameN classnameNjijl)}jo]jp}c.find_vma_prevasbuh1hhj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj= )}(hj@ h]h*}(hhhj}hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj}ubh)}(hmmh]hmm}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj}ubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hhhj-~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hlongh]hlong}(hhhj;~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hhhjI~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(haddrh]haddr}(hhhjW~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj}ubj )}(hstruct vm_area_struct **pprevh](j.)}(hj1h]hstruct}(hhhjp~hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjl~ubj)}(h h]h }(hhhj}~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl~ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj~modnameN classnameNjijl)}jo]jp}c.find_vma_prevasbuh1hhjl~ubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl~ubj= )}(hj@ h]h*}(hhhj~hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjl~ubj= )}(hj@ h]h*}(hhhj~hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjl~ubh)}(hpprevh]hpprev}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj}ubeh}(h]h ]h"]h$]h&]jj uh1j hj1}hhhjB}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-}hhhjB}hMubah}(h]j(}ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj*}hhubj)}(hhh]j6)}(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 }(h:Find the VMA for a given address, or the next vma and set hj~hhhNhNubj<)}(h ``pprev``h]hpprev}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj~ubh to the previous VMA, if any.}(h to the previous VMA, if any.hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhj*}hhhjB}hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+j3j+j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hJ/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<)}(hjTh]hstruct mm_struct *mm}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhjNubj)}(hhh]j6)}(hThe mm_struct to checkh]hThe mm_struct to check}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjKubj)}(h#``unsigned long addr`` The address h](j)}(h``unsigned long addr``h]j<)}(hjh]hunsigned long addr}(hhhjhhhNhNubah}(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]j6)}(h The addressh]h The address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjKubj)}(hI``struct vm_area_struct **pprev`` The pointer to set to the previous VMA h](j)}(h!``struct vm_area_struct **pprev``h]j<)}(hjh]hstruct vm_area_struct **pprev}(hhhjhhhNhNubah}(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]j6)}(h&The pointer to set to the previous VMAh]h&The pointer to set to the previous VMA}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj/ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj/ubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj/ubj6)}(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 }(hThe VMA associated with hj>hhhNhNubjv)}(h**addr**h]haddr}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubh, or the next vma. May return }(h, or the next vma. May return hj>hhhNhNubj<)}(h``NULL``h]hNULL}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj>ubh( in the case of no vma at addr or above.}(h( in the case of no vma at addr or above.hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/mmap.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_alloc (C function)c.kmemleak_allochNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_alloch]h)}(hkmemleak_alloch]hkmemleak_alloc}(hhhjǀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjÀubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h8(const void *ptr, size_t size, int min_count, gfp_t gfp)h](j )}(hconst void *ptrh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj߀ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߀ubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߀ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߀ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj߀ubh)}(hptrh]hptr}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߀ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjۀubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jr)}jejɀsbc.kmemleak_allocasbuh1hhj<ubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hsizeh]hsize}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjۀubj )}(h int min_counth](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h min_counth]h min_count}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjۀubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjāmodnameN classnameNjijl)}jo]j_c.kmemleak_allocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjۀubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM hjhhubj)}(hhh]j6)}(h!register a newly allocated objecth]h!register a newly allocated object}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj;h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj5ubj)}(hhh](j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j<)}(hjZh]hconst void *ptr}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjXubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjTubj)}(hhh]j6)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(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]j6)}(hsize of the objecth]hsize of the object}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubj)}(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<)}(hĵh]h int min_count}(hhhj΂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.chMhjƂubj)}(hhh]j6)}(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 }(hhminimum number of references to this object. If during memory scanning a number of references less than hjhhhNhNubjv)}(h **min_count**h]h min_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh7 is found, the object is reported as a memory leak. If }(h7 is found, the object is reported as a memory leak. If hjhhhNhNubjv)}(h **min_count**h]h min_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh2 is 0, the object is never reported as a leak. If }(h2 is 0, the object is never reported as a leak. If hjhhhNhNubjv)}(h **min_count**h]h min_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhF is -1, the object is ignored (not scanned and not reported as a leak)}(hF is -1, the object is ignored (not scanned and not reported as a leak)hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hN/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&]uh1jhjhMhjQubj)}(hL``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j<)}(hj@h]h gfp_t gfp}(hhhjBhhhNhNubah}(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.chMhj:ubj)}(hhh]j6)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubj6)}(h**Description**h]jv)}(hj{h]h Description}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjyubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj5ubj6)}(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.).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kmemleak_alloc_percpu (C function)c.kmemleak_alloc_percpuhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhjσhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj΃hMubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj΃hMubh)}(hkmemleak_alloc_percpuh]h)}(hkmemleak_alloc_percpuh]hkmemleak_alloc_percpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj΃hMubj )}(h2(const void __percpu *ptr, size_t size, gfp_t gfp)h](j )}(hconst void __percpu *ptrh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hvoidh]hvoid}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh__percpu}(hhhj hhhNhNubj)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhjXhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hptrh]hptr}(hhhjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.kmemleak_alloc_percpuasbuh1hhjzubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj˄hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȄubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj̈́modnameN classnameNjijl)}jo]jc.kmemleak_alloc_percpuasbuh1hhjĄubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĄubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĄubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj΃hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj΃hMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubj)}(hhh]j6)}(h*register a newly allocated __percpu objecth]h*register a newly allocated __percpu object}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj΃hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j:j3j:j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjDh]h Parameters}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjBubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj>ubj)}(hhh](j)}(hI``const void __percpu *ptr`` __percpu pointer to beginning of the object h](j)}(h``const void __percpu *ptr``h]j<)}(hjch]hconst void __percpu *ptr}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjaubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj]ubj)}(hhh]j6)}(h+__percpu pointer to beginning of the objecth]h+__percpu pointer to beginning of the object}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(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]j6)}(hsize of the objecth]hsize of the object}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubj)}(hB``gfp_t gfp`` flags used for kmemleak internal memory allocations h](j)}(h ``gfp_t gfp``h]j<)}(hjՅh]h gfp_t gfp}(hhhjׅ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.chMhjυubj)}(hhh]j6)}(h3flags used for kmemleak internal memory allocationsh]h3flags used for kmemleak internal memory allocations}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjυubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj>ubj6)}(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).}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_vmalloc (C function)c.kmemleak_vmallochNtauh1hhj~ehhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM-ubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchM-ubh__ref}(hhhjQhhhNhNubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchM-ubh)}(hkmemleak_vmalloch]h)}(hkmemleak_vmalloch]hkmemleak_vmalloc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjchM-ubj )}(h6(const struct vm_struct *area, size_t size, gfp_t gfp)h](j )}(hconst struct vm_struct *areah](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj̆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h vm_structh]h vm_struct}(hhhj݆hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjچubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj߆modnameN classnameNjijl)}jo]jr)}jejsbc.kmemleak_vmallocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hareah]harea}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jc.kmemleak_vmallocasbuh1hhj-ubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hsizeh]hsize}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj~modnameN classnameNjijl)}jo]jc.kmemleak_vmallocasbuh1hhjuubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjQhhhjchM-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjchM-ubah}(h]jHah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM4hjJhhubj)}(hhh]j6)}(h"register a newly vmalloc'ed objecth]h$register a newly vmalloc’ed object}(hjՇhjӇhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM,hjЇhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchM-ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM0hjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hpointer to vm_structh]hpointer to vm_struct}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hM-hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM-hj ubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j<)}(hjMh]h size_t size}(hhhjOhhhNhNubah}(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]j6)}(hsize of the objecth]hsize of the object}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbhM.hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM.hj ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h?__vmalloc() flags used for kmemleak internal memory allocationsh]h?__vmalloc() flags used for kmemleak internal memory allocations}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjÈhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM1hjubj6)}(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.}(hjوhj׈hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_free (C function)c.kmemleak_freehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h*void __ref kmemleak_free (const void *ptr)h]h)}(h)void __ref kmemleak_free(const void *ptr)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMFubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMFubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMFubh)}(h kmemleak_freeh]h)}(h kmemleak_freeh]h kmemleak_free}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMFubj )}(h(const void *ptr)h]j )}(hconst void *ptrh](j.)}(hjh]hconst}(hhhjUhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjQubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hvoidh]hvoid}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjQubh)}(hptrh]hptr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjMubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMFubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMKhjhhubj)}(hhh]j6)}(h)unregister a previously registered objecth]h)unregister a previously registered object}(hjƉhjĉhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j܉j3j܉j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMIhjubj)}(hhh]j)}(h7``const void *ptr`` pointer to beginning of the object h](j)}(h``const void *ptr``h]j<)}(hjh]hconst void *ptr}(hhhjhhhNhNubah}(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.chMFhjubj)}(hhh]j6)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMHhjubj6)}(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.).}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_free_part (C function)c.kmemleak_free_parthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hsizeh]hsize}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjݒubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jac.kmemleak_scan_areaasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjݒubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubj)}(hhh]j6)}(h4limit the range to be scanned in an allocated objecth]h4limit the range to be scanned in an allocated object}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(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<)}(hj'h]hconst void *ptr}(hhhj)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.chMhj!ubj)}(hhh]j6)}(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}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h&``size_t size`` size of the scan area h](j)}(h``size_t size``h]j<)}(hjah]h size_t size}(hhhjchhhNhNubah}(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.chMhj[ubj)}(hhh]j6)}(hsize of the scan areah]hsize of the scan area}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjՔh]h Description}(hhhjהhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӔubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmemleak_no_scan (C function)c.kmemleak_no_scanhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubh)}(hkmemleak_no_scanh]h)}(hkmemleak_no_scanh]hkmemleak_no_scan}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hMubj )}(h(const void *ptr)h]j )}(hconst void *ptrh](j.)}(hjh]hconst}(hhhjihhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjeubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjeubh)}(hptrh]hptr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjaubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hMubah}(h]j ah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubj)}(hhh]j6)}(hdo not scan an allocated objecth]hdo not scan an allocated object}(hjڕhjؕhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjՕhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/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<)}(hjh]hconst void *ptr}(hhhjhhhNhNubah}(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]j6)}(h"pointer to beginning of the objecth]h"pointer to beginning of the object}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj6)}(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.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kmemleak_alloc_phys (C function)c.kmemleak_alloc_physhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_alloc_physh]h)}(hkmemleak_alloc_physh]hkmemleak_alloc_phys}(hhhj̖hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȖubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejΖsbc.kmemleak_alloc_physasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hphysh]hphys}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj7modnameN classnameNjijl)}jo]jc.kmemleak_alloc_physasbuh1hhj.ubj)}(h h]h }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hsizeh]hsize}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.kmemleak_alloc_physasbuh1hhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjhhubj)}(hhh]j6)}(h@similar to kmemleak_alloc but taking a physical address argumenth]h@similar to kmemleak_alloc but taking a physical address argument}(hj֗hjԗhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(hhh](j)}(h4``phys_addr_t phys`` physical address of the object h](j)}(h``phys_addr_t phys``h]j<)}(hjh]hphys_addr_t phys}(hhhjhhhNhNubah}(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]j6)}(hphysical address of the objecth]hphysical address of the object}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubj)}(h#``size_t size`` size of the object h](j)}(h``size_t size``h]j<)}(hjNh]h size_t size}(hhhjPhhhNhNubah}(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.chMhjHubj)}(hhh]j6)}(hsize of the objecth]hsize of the object}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubj)}(hK``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocationsh](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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]j6)}(h=kmalloc() flags used for kmemleak internal memory allocationsh]h=kmalloc() flags used for kmemleak internal memory allocations}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$kmemleak_free_part_phys (C function)c.kmemleak_free_part_physhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݘhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݘhhhjhMubh__ref}(hhhjݘhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݘhhhjhMubh)}(hkmemleak_free_part_physh]h)}(hkmemleak_free_part_physh]hkmemleak_free_part_phys}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjݘhhhjhMubj )}(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}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj5modnameN classnameNjijl)}jo]jr)}jejsbc.kmemleak_free_part_physasbuh1hhj,ubj)}(h h]h }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hphysh]hphys}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj(ubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jOc.kmemleak_free_part_physasbuh1hhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj(ubeh}(h]h ]h"]h$]h&]jj uh1j hjݘhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj٘hhhjhMubah}(h]jԘah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj֘hhubj)}(hhh]j6)}(hDsimilar to kmemleak_free_part but taking a physical address argumenth]hDsimilar to kmemleak_free_part but taking a physical address argument}(hj֙hjԙhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjљhhubah}(h]h ]h"]h$]h&]uh1jhj֘hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjubj)}(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<)}(hjh]hphys_addr_t phys}(hhhjhhhNhNubah}(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]j6)}(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}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubj)}(h'``size_t size`` size to be unregisteredh](j)}(h``size_t size``h]j<)}(hjOh]h size_t size}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjIubj)}(hhh]j6)}(hsize to be unregisteredh]hsize to be unregistered}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmemleak_ignore_phys (C function)c.kmemleak_ignore_physhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh__ref}(hhhjhhhNhNubj)}(h h]h }(hhhjʚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hkmemleak_ignore_physh]h)}(hkmemleak_ignore_physh]hkmemleak_ignore_phys}(hhhjܚhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjؚubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(phys_addr_t phys)h]j )}(hphys_addr_t physh](h)}(hhh]h)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejޚsbc.kmemleak_ignore_physasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hphysh]hphys}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM hjhhubj)}(hhh]j6)}(hAsimilar to kmemleak_ignore but taking a physical address argumenth]hAsimilar to kmemleak_ignore but taking a physical address argument}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jlj3jlj4uh1hhhhj~ehNhNubjl)}(hE**Parameters** ``phys_addr_t phys`` physical address of the objecth](j6)}(h**Parameters**h]jv)}(hjvh]h Parameters}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/kmemleak.chM hjpubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hphysical address of the objecth]hphysical address of the object}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/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 hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubhcomment)}(h'#kernel-doc:: mm/hmm.c (build warnings)h]h'#kernel-doc:: mm/hmm.c (build warnings)}(hhhj؛ubah}(h]h ]h"]h$]h&]jj uh1j֛hj~ehhhhhK{ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_memremap_pages (C function)c.devm_memremap_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhj hMubh)}(hdevm_memremap_pagesh]h)}(hdevm_memremap_pagesh]hdevm_memremap_pages}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h/(struct device *dev, struct dev_pagemap *pgmap)h](j )}(hstruct device *devh](j.)}(hj1h]hstruct}(hhhjIhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjEubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]h)}(hdeviceh]hdevice}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjimodnameN classnameNjijl)}jo]jr)}jej/sbc.devm_memremap_pagesasbuh1hhjEubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjEubh)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjAubj )}(hstruct dev_pagemap *pgmaph](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjȜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hhhjٜhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֜ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjۜmodnameN classnameNjijl)}jo]jc.devm_memremap_pagesasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpgmaph]hpgmap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjAubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjhhubj)}(hhh]j6)}(h7remap and provide memmap backing for the given resourceh]h7remap and provide memmap backing for the given resource}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jUj3jUj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_h]h Parameters}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjYubj)}(hhh](j)}(h2``struct device *dev`` hosting device for **res** h](j)}(h``struct device *dev``h]j<)}(hj~h]hstruct device *dev}(hhhjhhhNhNubah}(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.chMhjxubj)}(hhh]j6)}(hhosting device for **res**h](hhosting device for }(hhosting device for hjhhhNhNubjv)}(h**res**h]hres}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h>``struct dev_pagemap *pgmap`` pointer to a struct dev_pagemap h](j)}(h``struct dev_pagemap *pgmap``h]j<)}(hjƝh]hstruct dev_pagemap *pgmap}(hhhjȝ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]j6)}(hpointer to a struct dev_pagemaph]hpointer to a struct dev_pagemap}(hjhjߝhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj۝hMhjܝubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۝hMhjuubeh}(h]h ]h"]h$]h&]uh1jhjYubj6)}(h **Notes**h]jv)}(hjh]hNotes}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjYubj)}(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 }(h.1/ At a minimum the range and type members of hjhhhNhNubjv)}(h **pgmap**h]hpgmap}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh must be initialized}(h must be initializedhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j6)}(h0by the caller before passing it to this functionh]h0by the caller before passing it to this function}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubah}(h]h ]h"]h$]h&]uh1jhjYubj6)}(h**Description**h]jv)}(hjfh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjYubj)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j6)}(h/PGMAP_ALTMAP_VALID must be set in pgmap->flags.h]h/PGMAP_ALTMAP_VALID must be set in pgmap->flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j6)}(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.}(hjǞhjŞhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjžubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubeh}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_dev_pagemap (C function)c.get_dev_pagemaphNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj6hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2hhhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjChMubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjWmodnameN classnameNjijl)}jo]jr)}jeget_dev_pagemapsbc.get_dev_pagemapasbuh1hhj2hhhjChMubj)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjChMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj2hhhjChMubh)}(hget_dev_pagemaph]h)}(hjsh]hget_dev_pagemap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhjChMubj )}(h.(unsigned long pfn, struct dev_pagemap *pgmap)h](j )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhj̟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjڟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct dev_pagemap *pgmaph](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h dev_pagemaph]h dev_pagemap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]jqc.get_dev_pagemapasbuh1hhjubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjKhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpgmaph]hpgmap}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj2hhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhjChMubah}(h]j)ah ](jjeh"]h$]h&]juh1hhN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhj+hhubj)}(hhh]j6)}(h8take a new live reference on the dev_pagemap for **pfn**h](h1take a new live reference on the dev_pagemap for }(h1take a new live reference on the dev_pagemap for hjhhhNhNubjv)}(h**pfn**h]hpfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjChMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hN/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}(hhhjՠ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.chMhj͠ubj)}(hhh]j6)}(h$page frame number to lookup page_maph]h$page frame number to lookup page_map}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj͠ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjʠubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h1optional known pgmap that already has a referenceh]h1optional known pgmap that already has a reference}(hj'hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjʠubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjGh]h Description}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjEubah}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubj6)}(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 }(hIf hj]hhhNhNubjv)}(h **pgmap**h]hpgmap}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh is non-NULL and covers }(h is non-NULL and covers hj]hhhNhNubjv)}(h**pfn**h]hpfn}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh it will be returned as-is. If }(h it will be returned as-is. If hj]hhhNhNubjv)}(h **pgmap**h]hpgmap}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh is non-NULL but does not cover }(h is non-NULL but does not cover hj]hhhNhNubjv)}(h**pfn**h]hpfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubh& the reference to it will be released.}(h& the reference to it will be released.hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/memremap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ vma_kernel_pagesize (C function)c.vma_kernel_pagesizehNtauh1hhj~ehhhNhNubh)}(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}(hhhj١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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjաhhhjhMubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjաhhhjhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjաhhhjhMubh)}(hvma_kernel_pagesizeh]h)}(hvma_kernel_pagesizeh]hvma_kernel_pagesize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjաhhhjhMubj )}(h(struct vm_area_struct *vma)h]j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj2hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjRmodnameN classnameNjijl)}jo]jr)}jejsbc.vma_kernel_pagesizeasbuh1hhj.ubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj= )}(hj@ h]h*}(hhhj~hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj.ubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj*ubah}(h]h ]h"]h$]h&]jj uh1j hjաhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjѡhhhjhMubah}(h]j̡ah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjΡhhubj)}(hhh]j6)}(h#Page size granularity for this VMA.h]h#Page size granularity for this VMA.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjΡhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j΢j3j΢j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjآh]h Parameters}(hhhjڢhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֢ubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjҢubj)}(hhh]j)}(h1``struct vm_area_struct *vma`` The user mapping. h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjh]hstruct vm_area_struct *vma}(hhhjhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(hThe user mapping.h]hThe user mapping.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjҢubj6)}(h**Description**h]jv)}(hj2h]h Description}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjҢubj6)}(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.}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjҢubj6)}(h **Return**h]jv)}(hjYh]hReturn}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/hugetlb.chMhjҢubj6)}(hlru **Description** Release a list of pages which are strung together on page.lru.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chKhj{ubj)}(hhh]j)}(h@``struct list_head *pages`` list of pages threaded on page->lru h](j)}(h``struct list_head *pages``h]j<)}(hjh]hstruct list_head *pages}(hhhjhhhNhNubah}(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.chKhjubj)}(hhh]j6)}(h#list of pages threaded on page->lruh]h#list of pages threaded on page->lru}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj{ubj6)}(h**Description**h]jv)}(hjۤh]h Description}(hhhjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj٤ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chKhj{ubj6)}(h>Release a list of pages which are strung together on page.lru.h]h>Release a list of pages which are strung together on page.lru.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chKhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_mark_accessed (C function)c.folio_mark_accessedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.void folio_mark_accessed (struct folio *folio)h]h)}(h-void folio_mark_accessed(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMubh)}(hfolio_mark_accessedh]h)}(hfolio_mark_accessedh]hfolio_mark_accessed}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj.hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj]hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjYubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]h)}(hfolioh]hfolio}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj}modnameN classnameNjijl)}jo]jr)}jejCsbc.folio_mark_accessedasbuh1hhjYubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjYubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjUubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj.hMubah}(h]jah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubj)}(hhh]j6)}(h%Mark a folio as having seen activity.h]h%Mark a folio as having seen activity.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjޥhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/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<)}(hj"h]hstruct folio *folio}(hhhj$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:126: ./mm/swap.chMhjubj)}(hhh]j6)}(hThe folio to mark.h]hThe folio to mark.}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj]h]h Description}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj6)}(h inactive,referencedh]j6)}(hjh]h6inactive,unreferenced -> inactive,referenced}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h6inactive,referenced -> active,unreferencedh]j6)}(hjh]h6inactive,referenced -> active,unreferenced}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(h5active,unreferenced -> active,referenced h]j6)}(h4active,unreferenced -> active,referencedh]h4active,unreferenced -> active,referenced}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhMhjubj6)}(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().}(hj֦hjԦhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_add_lru (C function)c.folio_add_lruhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h(void folio_add_lru (struct folio *folio)h]h)}(h'void folio_add_lru(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h folio_add_lruh]h)}(h folio_add_lruh]h folio_add_lru}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj@hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj<ubj)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj`modnameN classnameNjijl)}jo]jr)}jej&sbc.folio_add_lruasbuh1hhj<ubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj<ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj8ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubj)}(hhh]j6)}(hAdd a folio to an LRU list.h]hAdd a folio to an LRU list.}(hjƧhjħhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/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&]j1j,j2jܧj3jܧj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/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}(hhhjhhhNhNubah}(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]j6)}(h!The folio to be added to the LRU.h]h!The folio to be added to the LRU.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj@h]h Description}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj6)}(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().}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_add_lru_vma (C function)c.folio_add_lru_vmahNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hfolio_add_lru_vmah]h)}(hfolio_add_lru_vmah]hfolio_add_lru_vma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h1(struct folio *folio, struct vm_area_struct *vma)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhj¨hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjϨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjݨubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_add_lru_vmaasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhj4hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj0ubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjTmodnameN classnameNjijl)}jo]jc.folio_add_lru_vmaasbuh1hhj0ubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj= )}(hj@ h]h*}(hhhj~hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj0ubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhMubah}(h]jxah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjzhhubj)}(hhh]j6)}(h3Add a folio to the appropate LRU list for this VMA.h]h3Add a folio to the appropate LRU list for this VMA.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jΩj3jΩj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjةh]h Parameters}(hhhjکhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj֩ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjҩubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h!The folio to be added to the LRU.h]h!The folio to be added to the LRU.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hA``struct vm_area_struct *vma`` VMA in which the folio is mapped. h](j)}(h``struct vm_area_struct *vma``h]j<)}(hj0h]hstruct vm_area_struct *vma}(hhhj2hhhNhNubah}(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.chMhj*ubj)}(hhh]j6)}(h!VMA in which the folio is mapped.h]h!VMA in which the folio is mapped.}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjҩubj6)}(h**Description**h]jv)}(hjkh]h Description}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjҩubj6)}(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, }(hIf the VMA is mlocked, hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh\ is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().}(h\ is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjҩubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"deactivate_file_folio (C function)c.deactivate_file_foliohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h0void deactivate_file_folio (struct folio *folio)h]h)}(h/void deactivate_file_folio(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjĪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhjӪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjҪhMubh)}(hdeactivate_file_folioh]h)}(hdeactivate_file_folioh]hdeactivate_file_folio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjҪhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]jr)}jejsbc.deactivate_file_folioasbuh1hhjubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjMhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjҪhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjҪhMubah}(h]jah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubj)}(hhh]j6)}(hDeactivate a file folio.h]hDeactivate a file folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjҪhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj)}(hhh]j)}(h-``struct folio *folio`` Folio to deactivate. h](j)}(h``struct folio *folio``h]j<)}(hjƫh]hstruct folio *folio}(hhhjȫ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:126: ./mm/swap.chMhjubj)}(hhh]j6)}(hFolio to deactivate.h]hFolio to deactivate.}(hjhj߫hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj۫hMhjܫubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۫hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj6)}(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 }(h#This function hints to the VM that hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubht is a good reclaim candidate, for example if its invalidation fails due to the folio being dirty or under writeback.}(ht 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&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj6)}(h **Context**h]jv)}(hj<h]hContext}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubj6)}(h&Caller holds a reference on the folio.h]h&Caller holds a reference on the folio.}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ folio_mark_lazyfree (C function)c.folio_mark_lazyfreehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h.void folio_mark_lazyfree (struct folio *folio)h]h)}(h-void folio_mark_lazyfree(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhjhMubh)}(hfolio_mark_lazyfreeh]h)}(hfolio_mark_lazyfreeh]hfolio_mark_lazyfree}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhjhMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjˬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjܬhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj٬ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjެmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_mark_lazyfreeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj}hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjhMubah}(h]jtah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjvhhubj)}(hhh]j6)}(hmake an anon folio lazyfreeh]hmake an anon folio lazyfree}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hJ/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<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chMhj}ubj)}(hhh]j6)}(hfolio to deactivateh]hfolio to deactivate}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj^ubj6)}(hufolio_mark_lazyfree() moves **folio** to the inactive file list. This is done to accelerate the reclaim of **folio**.h](hfolio_mark_lazyfree() moves }(hfolio_mark_lazyfree() moves hjԭhhhNhNubjv)}(h **folio**h]hfolio}(hhhjݭhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjԭubhF to the inactive file list. This is done to accelerate the reclaim of }(hF to the inactive file list. This is done to accelerate the reclaim of hjԭhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjԭubh.}(hjyhjԭhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolios_put_refs (C function)c.folios_put_refshNtauh1hhj~ehhhNhNubh)}(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}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hMubh)}(hfolios_put_refsh]h)}(hfolios_put_refsh]hfolios_put_refs}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(h0(struct folio_batch *folios, unsigned int *refs)h](j )}(hstruct folio_batch *foliosh](j.)}(hj1h]hstruct}(hhhjfhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjbubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejLsbc.folios_put_refsasbuh1hhjbubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjbubh)}(hfoliosh]hfolios}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubj )}(hunsigned int *refsh](j)}(hunsignedh]hunsigned}(hhhjخhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԮubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԮubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԮubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԮubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjԮubh)}(hrefsh]hrefs}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԮubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^ubeh}(h]h ]h"]h$]h&]jj uh1j hj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjhhubj)}(hhh]j6)}(h0Reduce the reference count on a batch of folios.h]h0Reduce the reference count on a batch of folios.}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j`j3j`j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjdubj)}(hhh](j)}(h+``struct folio_batch *folios`` The folios. h](j)}(h``struct folio_batch *folios``h]j<)}(hjh]hstruct folio_batch *folios}(hhhjhhhNhNubah}(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]j6)}(h The folios.h]h The folios.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``unsigned int *refs`` The number of refs to subtract from each folio. h](j)}(h``unsigned int *refs``h]j<)}(hj¯h]hunsigned int *refs}(hhhjįhhhNhNubah}(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]j6)}(h/The number of refs to subtract from each folio.h]h/The number of refs to subtract from each folio.}(hjݯhjۯhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjׯhMhjدubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjׯhMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjdubj6)}(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 }(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 hjhhhNhNubjv)}(h**refs**h]hrefs}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh3 is NULL, we subtract one from each folio refcount.}(h3 is NULL, we subtract one from each folio refcount.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjdubj6)}(h **Context**h]jv)}(hj8h]hContext}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj6ubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjdubj6)}(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.}(hjPhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrelease_pages (C function)c.release_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubh)}(h release_pagesh]h)}(h release_pagesh]h release_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhjhMubj )}(h(release_pages_arg arg, int nr)h](j )}(hrelease_pages_arg argh](h)}(hhh]h)}(hrelease_pages_argh]hrelease_pages_arg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.release_pagesasbuh1hhjubj)}(h h]h }(hhhjݰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hargh]harg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint nrh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnrh]hnr}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjyhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjhMubah}(h]jpah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjrhhubj)}(hhh]j6)}(hbatched put_page()h]hbatched put_page()}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjmh]h Parameters}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM hjgubj)}(hhh](j)}(h4``release_pages_arg arg`` array of pages to release h](j)}(h``release_pages_arg arg``h]j<)}(hjh]hrelease_pages_arg arg}(hhhjhhhNhNubah}(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]j6)}(harray of pages to releaseh]harray of pages to release}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int nr`` number of pages h](j)}(h ``int nr``h]j<)}(hjűh]hint nr}(hhhjDZhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(hnumber of pagesh]hnumber of pages}(hjhjޱhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjڱhMhj۱ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڱhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM hjgubj6)}(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 }(h2Decrement the reference count on all the pages in hjhhhNhNubjv)}(h**arg**h]harg}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh@. If it fell to zero, remove the page from the LRU and free it.}(h@. If it fell to zero, remove the page from the LRU and free it.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM hjgubj6)}(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.}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chM hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,folio_batch_remove_exceptionals (C function)!c.folio_batch_remove_exceptionalshNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMBubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhMBubh)}(hfolio_batch_remove_exceptionalsh]h)}(hfolio_batch_remove_exceptionalsh]hfolio_batch_remove_exceptionals}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjvhMBubj )}(h(struct folio_batch *fbatch)h]j )}(hstruct folio_batch *fbatchh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjòhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjŲmodnameN classnameNjijl)}jo]jr)}jejsb!c.folio_batch_remove_exceptionalsasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfbatchh]hfbatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjdhhhjvhMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjvhMBubah}(h]j[ah ](jjeh"]h$]h&]juh1hhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMIhj]hhubj)}(hhh]j6)}(hPrune non-folios from a batch.h]hPrune non-folios from a batch.}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMAhj&hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhMBubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jAj3jAj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjKh]h Parameters}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMEhjEubj)}(hhh]j)}(h2``struct folio_batch *fbatch`` The batch to prune h](j)}(h``struct folio_batch *fbatch``h]j<)}(hjjh]hstruct folio_batch *fbatch}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjhubah}(h]h ]h"]h$]h&]uh1jhJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMBhjdubj)}(hhh]j6)}(hThe batch to pruneh]hThe batch to prune}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjaubah}(h]h ]h"]h$]h&]uh1jhjEubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMDhjEubj6)}(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 }(hfind_get_entries() fills a batch with both folios and shadow/swap/DAX entries. This function prunes all the non-folio entries from hjhhhNhNubjv)}(h **fbatch**h]hfbatch}(hhhjijhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhS without leaving holes, so that it can be passed on to folio-only batch operations.}(hS without leaving holes, so that it can be passed on to folio-only batch operations.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/swap.chMDhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"zpool_register_driver (C function)c.zpool_register_driverhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h8void zpool_register_driver (struct zpool_driver *driver)h]h)}(h7void zpool_register_driver(struct zpool_driver *driver)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubh)}(hzpool_register_driverh]h)}(hzpool_register_driverh]hzpool_register_driver}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hKubj )}(h(struct zpool_driver *driver)h]j )}(hstruct zpool_driver *driverh](j.)}(hj1h]hstruct}(hhhj;hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj7ubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]h)}(h zpool_driverh]h zpool_driver}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj[modnameN classnameNjijl)}jo]jr)}jej!sbc.zpool_register_driverasbuh1hhj7ubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj7ubh)}(hdriverh]hdriver}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK!hjhhubj)}(hhh]j6)}(h register a zpool implementation.h]h register a zpool implementation.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j״j3j״j4uh1hhhhj~ehNhNubjl)}(hD**Parameters** ``struct zpool_driver *driver`` driver to registerh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjߴubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK"hj۴ubj)}(hhh]j)}(h2``struct zpool_driver *driver`` driver to registerh](j)}(h``struct zpool_driver *driver``h]j<)}(hjh]hstruct zpool_driver *driver}(hhhjhhhNhNubah}(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]j6)}(hdriver to registerh]hdriver to register}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/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&]uh1jhj۴ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$zpool_unregister_driver (C function)c.zpool_unregister_driverhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h9int zpool_unregister_driver (struct zpool_driver *driver)h]h)}(h8int zpool_unregister_driver(struct zpool_driver *driver)h](j)}(hinth]hint}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK,ubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhK,ubh)}(hzpool_unregister_driverh]h)}(hzpool_unregister_driverh]hzpool_unregister_driver}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjhhK,ubj )}(h(struct zpool_driver *driver)h]j )}(hstruct zpool_driver *driverh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h zpool_driverh]h zpool_driver}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej}sbc.zpool_unregister_driverasbuh1hhjubj)}(h h]h }(hhhjյhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdriverh]hdriver}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjVhhhjhhK,ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjhhK,ubah}(h]jMah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK4hjOhhubj)}(hhh]j6)}(h"unregister a zpool implementation.h]h"unregister a zpool implementation.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK+hjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhK,ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j3j3j3j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj=h]h Parameters}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK/hj7ubj)}(hhh]j)}(h6``struct zpool_driver *driver`` driver to unregister. h](j)}(h``struct zpool_driver *driver``h]j<)}(hj\h]hstruct zpool_driver *driver}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjZubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK,hjVubj)}(hhh]j6)}(hdriver to unregister.h]hdriver to unregister.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjqhK,hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhK,hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK.hj7ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chK.hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_has_pool (C function)c.zpool_has_poolhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h bool zpool_has_pool (char *type)h]h)}(hbool zpool_has_pool(char *type)h](j)}(hj7h]hbool}(hhhjܶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjضhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKbubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjضhhhjhKbubh)}(hzpool_has_poolh]h)}(hzpool_has_poolh]hzpool_has_pool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjضhhhjhKbubj )}(h (char *type)h]j )}(h char *typeh](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(htypeh]htype}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjضhhhjhKbubeh}(h]h ]h"]h$]h&]jj juh1hjjhjԶhhhjhKbubah}(h]j϶ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKrhjѶhhubj)}(hhh]j6)}(h%Check if the pool driver is availableh]h%Check if the pool driver is available}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKahjihhubah}(h]h ]h"]h$]h&]uh1jhjѶhhhjhKbubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX0**Parameters** ``char *type`` The type of the zpool to check (e.g. zbud, 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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKehjubj)}(hhh]j)}(hD``char *type`` The type of the zpool to check (e.g. zbud, zsmalloc) h](j)}(h``char *type``h]j<)}(hjh]h char *type}(hhhjhhhNhNubah}(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.chKbhjubj)}(hhh]j6)}(h4The type of the zpool to check (e.g. zbud, zsmalloc)h]h4The type of the zpool to check (e.g. zbud, zsmalloc)}(hjȷhjƷhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj·hKbhj÷ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj·hKbhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKdhjubj6)}(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 }(hThis checks if the hjhhhNhNubjv)}(h**type**h]htype}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhX  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 }(hX  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 hjhhhNhNubjv)}(h**zpool_create_pool\(\)**h]hzpool_create_pool()}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 }(h 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 hjhhhNhNubjv)}(h**zpool_create_pool\(\)**h]hzpool_create_pool()}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh with the pool type will fail.}(h with the pool type will fail.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKdhjubj6)}(h,The **type** string must be null-terminated.h](hThe }(hThe hjGhhhNhNubjv)}(h**type**h]htype}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh string must be null-terminated.}(h string must be null-terminated.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKnhjubj6)}(h **Return**h]jv)}(hjlh]hReturn}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKphjubj6)}(h0true if **type** pool is available, false if noth](htrue if }(htrue if hjhhhNhNubjv)}(h**type**h]htype}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh pool is available, false if not}(h pool is available, false if nothjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKphjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_create_pool (C function)c.zpool_create_poolhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjŸhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhjӸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjҸhKubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jezpool_create_poolsbc.zpool_create_poolasbuh1hhjhhhjҸhKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjҸhKubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjҸhKubh)}(hzpool_create_poolh]h)}(hjh]hzpool_create_pool}(hhhj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjҸhKubj )}(h/(const char *type, const char *name, gfp_t gfp)h](j )}(hconst char *typeh](j.)}(hjh]hconst}(hhhj?hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj;ubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hcharh]hchar}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj= )}(hj@ h]h*}(hhhjvhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj;ubh)}(htypeh]htype}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj7ubj )}(hconst char *nameh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjŹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjӹhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hnameh]hname}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj7ubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.zpool_create_poolasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj7ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjҸhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjҸhKubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubj)}(hhh]j6)}(hCreate a new zpoolh]hCreate a new zpool}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjPhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjҸhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhj~ehNhNubjl)}(hXh**Parameters** ``const char *type`` The type of the zpool to create (e.g. zbud, 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](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj)}(hhh](j)}(hK``const char *type`` The type of the zpool to create (e.g. zbud, zsmalloc) h](j)}(h``const char *type``h]j<)}(hjh]hconst char *type}(hhhjhhhNhNubah}(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]j6)}(h5The type of the zpool to create (e.g. zbud, zsmalloc)h]h5The type of the zpool to create (e.g. zbud, zsmalloc)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h?``const char *name`` The name of the zpool (e.g. zram0, zswap) h](j)}(h``const char *name``h]j<)}(hjͺh]hconst char *name}(hhhjϺ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.chKhjǺubj)}(hhh]j6)}(h)The name of the zpool (e.g. zram0, zswap)h]h)The name of the zpool (e.g. zram0, zswap)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjǺubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h.The GFP flags to use when allocating the pool.h]h.The GFP flags to use when allocating the pool.}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjoubj6)}(h**Description**h]jv)}(hjAh]h Description}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj6)}(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.}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj6)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj6)}(h:The **type** and **name** strings must be null-terminated.h](hThe }(hThe hjuhhhNhNubjv)}(h**type**h]htype}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh and }(h and hjuhhhNhNubjv)}(h**name**h]hname}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubh! strings must be null-terminated.}(h! strings must be null-terminated.hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubj6)}(h&New zpool on success, NULL on failure.h]h&New zpool on success, NULL on failure.}(hjŻhjûhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_destroy_pool (C function)c.zpool_destroy_poolhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h-void zpool_destroy_pool (struct zpool *zpool)h]h)}(h,void zpool_destroy_pool(struct zpool *zpool)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hzpool_destroy_poolh]h)}(hzpool_destroy_poolh]hzpool_destroy_pool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct zpool *zpool)h]j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhj/hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj+ubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjOmodnameN classnameNjijl)}jo]jr)}jejsbc.zpool_destroy_poolasbuh1hhj+ubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj= )}(hj@ h]h*}(hhhj{hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj+ubh)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj'ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubj)}(hhh]j6)}(hDestroy a zpoolh]hDestroy a zpool}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/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&]j1j,j2j˼j3j˼j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjռh]h Parameters}(hhhj׼hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjӼubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjϼubj)}(hhh]j)}(h.``struct zpool *zpool`` The zpool to destroy. h](j)}(h``struct zpool *zpool``h]j<)}(hjh]hstruct zpool *zpool}(hhhjhhhNhNubah}(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]j6)}(hThe zpool to destroy.h]hThe zpool to destroy.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjϼubj6)}(h**Description**h]jv)}(hj/h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjϼubj6)}(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.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjϼubj6)}(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.}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjϼubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_get_type (C function)c.zpool_get_typehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h1const char * zpool_get_type (struct zpool *zpool)h]h)}(h/const char *zpool_get_type(struct zpool *zpool)h](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhKubh)}(hzpool_get_typeh]h)}(hzpool_get_typeh]hzpool_get_type}(hhhj̽hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȽubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct zpool *zpool)h]j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejνsbc.zpool_get_typeasbuh1hhjubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhjhKubah}(h]jvah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjxhhubj)}(hhh]j6)}(hGet the type of the zpoolh]hGet the type of the zpool}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh]j)}(h+``struct zpool *zpool`` The zpool to check h](j)}(h``struct zpool *zpool``h]j<)}(hjh]hstruct zpool *zpool}(hhhjhhhNhNubah}(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]j6)}(hThe zpool to checkh]hThe zpool to check}(hjȾhjƾhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj¾hKhjþubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj¾hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h"This returns the type of the pool.h]h"This returns the type of the pool.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(hThe type of zpool.h]hThe type of zpool.}(hj6hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)zpool_malloc_support_movable (C function)c.zpool_malloc_support_movablehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h7bool zpool_malloc_support_movable (struct zpool *zpool)h]h)}(h6bool zpool_malloc_support_movable(struct zpool *zpool)h](j)}(hj7h]hbool}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjphKubh)}(hzpool_malloc_support_movableh]h)}(hzpool_malloc_support_movableh]hzpool_malloc_support_movable}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjphKubj )}(h(struct zpool *zpool)h]j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.zpool_malloc_support_movableasbuh1hhjubj)}(h h]h }(hhhjݿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj_hhhjphKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjphKubah}(h]jVah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjXhhubj)}(hhh]j6)}(h5Check if the zpool supports allocating movable memoryh]h5Check if the zpool supports allocating movable memory}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjphKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j;j3j;j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct zpool *zpool`` The zpool to check **Description** This returns if the zpool supports allocating movable memory. Implementations must guarantee this to be thread-safe. **Return** true if the zpool supports allocating movable memory, false if noth](j6)}(h**Parameters**h]jv)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hK/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<)}(hjdh]hstruct zpool *zpool}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjbubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj^ubj)}(hhh]j6)}(hThe zpool to checkh]hThe zpool to check}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj?ubj6)}(h=This returns if the zpool supports allocating movable memory.h]h=This returns if the zpool supports allocating movable memory.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj?ubj6)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj?ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj?ubj6)}(hBtrue if the zpool supports allocating movable memory, false if noth]hBtrue if the zpool supports allocating movable memory, false if not}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_malloc (C function)c.zpool_mallochNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hUint zpool_malloc (struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle)h]h)}(hTint zpool_malloc(struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKubj)}(h h]h }(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hKubh)}(h zpool_malloch]h)}(h zpool_malloch]h zpool_malloc}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hKubj )}(hD(struct zpool *zpool, size_t size, gfp_t gfp, unsigned long *handle)h](j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjWhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjSubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjwmodnameN classnameNjijl)}jo]jr)}jej=sbc.zpool_mallocasbuh1hhjSubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjSubh)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjOubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.zpool_mallocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjOubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.zpool_mallocasbuh1hhj ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hgfph]hgfp}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjOubj )}(hunsigned long *handleh](j)}(hunsignedh]hunsigned}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hlongh]hlong}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjUubh)}(hhandleh]hhandle}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjOubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj(hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hKubah}(h]j ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubj)}(hhh]j6)}(hAllocate memoryh]hAllocate memory}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hXH**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 **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. Implementations must guarantee this to be thread-safe. **Return** 0 on success, negative value on error.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj)}(hhh](j)}(h4``struct zpool *zpool`` The zpool to allocate from. h](j)}(h``struct zpool *zpool``h]j<)}(hj h]hstruct zpool *zpool}(hhhj 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.chKhjubj)}(hhh]j6)}(hThe zpool to allocate from.h]hThe zpool to allocate from.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h2``size_t size`` The amount of memory to allocate. h](j)}(h``size_t size``h]j<)}(hjCh]h size_t size}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhj=ubj)}(hhh]j6)}(h!The amount of memory to allocate.h]h!The amount of memory to allocate.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjXhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjubj)}(h;``gfp_t gfp`` The GFP flags to use when allocating memory. h](j)}(h ``gfp_t gfp``h]j<)}(hj|h]h gfp_t gfp}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjzubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjvubj)}(hhh]j6)}(h,The GFP flags to use when allocating memory.h]h,The GFP flags to use when allocating memory.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h7``unsigned long *handle`` Pointer to the handle to set h](j)}(h``unsigned long *handle``h]j<)}(hjh]hunsigned long *handle}(hhhjhhhNhNubah}(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]j6)}(hPointer to the handle to seth]hPointer to the handle to set}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(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 **handle** will be set to the allocated object handle.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 }(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 hjhhhNhNubjv)}(h **handle**h]hhandle}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh, will be set to the allocated object handle.}(h, will be set to the allocated object handle.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h6Implementations must guarantee this to be thread-safe.h]h6Implementations must guarantee this to be thread-safe.}(hj+hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h **Return**h]jv)}(hj:h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj8ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubj6)}(h&0 on success, negative value on error.h]h&0 on success, negative value on error.}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_free (C function) c.zpool_freehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhMubh)}(h zpool_freeh]h)}(h zpool_freeh]h zpool_free}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhMubj )}(h+(struct zpool *zpool, unsigned long handle)h](j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsb c.zpool_freeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hlongh]hlong}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhandleh]hhandle}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj{hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjthhubj)}(hhh]j6)}(h Free previously allocated memoryh]h Free previously allocated memory}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj)}(hhh](j)}(h=``struct zpool *zpool`` The zpool that allocated the memory. h](j)}(h``struct zpool *zpool``h]j<)}(hjh]hstruct zpool *zpool}(hhhjhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(h$The zpool that allocated the memory.h]h$The zpool that allocated the memory.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``unsigned long handle`` The handle to the memory to free. h](j)}(h``unsigned long handle``h]j<)}(hj h]hunsigned long handle}(hhhj 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.chMhjubj)}(hhh]j6)}(h!The handle to the memory to free.h]h!The handle to the memory to free.}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjFh]h Description}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjDubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj6)}(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.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM hjubj6)}(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.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_map_handle (C function)c.zpool_map_handlehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h_void * zpool_map_handle (struct zpool *zpool, unsigned long handle, enum zpool_mapmode mapmode)h]h)}(h]void *zpool_map_handle(struct zpool *zpool, unsigned long handle, enum zpool_mapmode mapmode)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hzpool_map_handleh]h)}(hzpool_map_handleh]hzpool_map_handle}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hG(struct zpool *zpool, unsigned long handle, enum zpool_mapmode mapmode)h](j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.zpool_map_handleasbuh1hhjubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj0hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hlongh]hlong}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhandleh]hhandle}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(henum zpool_mapmode mapmodeh](j.)}(hjh]henum}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h zpool_mapmodeh]h zpool_mapmode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.zpool_map_handleasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmapmodeh]hmapmode}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM.hjhhubj)}(hhh]j6)}(h-Map a previously allocated handle into memoryh]h-Map a previously allocated handle into memory}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j4j3j4j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct zpool *zpool`` The zpool that the handle was allocated from ``unsigned long handle`` The handle to map ``enum zpool_mapmode mapmode`` How the memory should be mapped **Description** This maps a previously allocated handle into memory. The **mapmode** param indicates to the implementation how the memory will be used, i.e. read-only, write-only, read-write. If the implementation does not support it, the memory will be treated as read-write. This may hold locks, disable interrupts, and/or preemption, and the zpool_unmap_handle() must be called to undo those actions. The code that uses the mapped handle should complete its operations on the mapped handle memory quickly and unmap as soon as possible. As the implementation may use per-cpu data, multiple handles should not be mapped concurrently on any cpu. **Return** A pointer to the handle's mapped memory area.h](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhj8ubj)}(hhh](j)}(hE``struct zpool *zpool`` The zpool that the handle was allocated from h](j)}(h``struct zpool *zpool``h]j<)}(hj]h]hstruct zpool *zpool}(hhhj_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.chMhjWubj)}(hhh]j6)}(h,The zpool that the handle was allocated fromh]h,The zpool that the handle was allocated from}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h+``unsigned long handle`` The handle to map h](j)}(h``unsigned long handle``h]j<)}(hjh]hunsigned long handle}(hhhjhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(hThe handle to maph]hThe handle to map}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h?``enum zpool_mapmode mapmode`` How the memory should be mapped h](j)}(h``enum zpool_mapmode mapmode``h]j<)}(hjh]henum zpool_mapmode mapmode}(hhhjhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(hHow the memory should be mappedh]hHow the memory should be mapped}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhj8ubj6)}(hXThis maps a previously allocated handle into memory. The **mapmode** param indicates to the implementation how the memory will be used, i.e. read-only, write-only, read-write. If the implementation does not support it, the memory will be treated as read-write.h](h:This maps a previously allocated handle into memory. The }(h:This maps a previously allocated handle into memory. The hj hhhNhNubjv)}(h **mapmode**h]hmapmode}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh param indicates to the implementation how the memory will be used, i.e. read-only, write-only, read-write. If the implementation does not support it, the memory will be treated as read-write.}(h param indicates to the implementation how the memory will be used, i.e. read-only, write-only, read-write. If the implementation does not support it, the memory will be treated as read-write.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMhj8ubj6)}(hXrThis may hold locks, disable interrupts, and/or preemption, and the zpool_unmap_handle() must be called to undo those actions. The code that uses the mapped handle should complete its operations on the mapped handle memory quickly and unmap as soon as possible. As the implementation may use per-cpu data, multiple handles should not be mapped concurrently on any cpu.h]hXrThis may hold locks, disable interrupts, and/or preemption, and the zpool_unmap_handle() must be called to undo those actions. The code that uses the mapped handle should complete its operations on the mapped handle memory quickly and unmap as soon as possible. As the implementation may use per-cpu data, multiple handles should not be mapped concurrently on any cpu.}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM$hj8ubj6)}(h **Return**h]jv)}(hjTh]hReturn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM,hj8ubj6)}(h-A pointer to the handle's mapped memory area.h]h/A pointer to the handle’s mapped memory area.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM,hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌzpool_unmap_handle (C function)c.zpool_unmap_handlehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hCvoid zpool_unmap_handle (struct zpool *zpool, unsigned long handle)h]h)}(hBvoid zpool_unmap_handle(struct zpool *zpool, unsigned long handle)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM6ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM6ubh)}(hzpool_unmap_handleh]h)}(hzpool_unmap_handleh]hzpool_unmap_handle}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM6ubj )}(h+(struct zpool *zpool, unsigned long handle)h](j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.zpool_unmap_handleasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj"hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long handleh](j)}(hunsignedh]hunsigned}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hlongh]hlong}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhandleh]hhandle}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM6ubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM>hjhhubj)}(hhh]j6)}(h Unmap a previously mapped handleh]h Unmap a previously mapped handle}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM6ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX{**Parameters** ``struct zpool *zpool`` The zpool that the handle was allocated from ``unsigned long handle`` The handle to unmap **Description** This unmaps a previously mapped handle. Any locks or other actions that the implementation took in zpool_map_handle() will be undone here. The memory area returned from zpool_map_handle() should no longer be used after this.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM9hjubj)}(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}(hhhjhhhNhNubah}(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.chM6hjubj)}(hhh]j6)}(h,The zpool that the handle was allocated fromh]h,The zpool that the handle was allocated from}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h-``unsigned long handle`` The handle to unmap h](j)}(h``unsigned long handle``h]j<)}(hj%h]hunsigned long handle}(hhhj'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.chM7hjubj)}(hhh]j6)}(hThe handle to unmaph]hThe handle to unmap}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hM7hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM9hjubj6)}(hThis unmaps a previously mapped handle. Any locks or other actions that the implementation took in zpool_map_handle() will be undone here. The memory area returned from zpool_map_handle() should no longer be used after this.h]hThis unmaps a previously mapped handle. Any locks or other actions that the implementation took in zpool_map_handle() will be undone here. The memory area returned from zpool_map_handle() should no longer be used after this.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"zpool_get_total_pages (C function)c.zpool_get_total_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jezpool_get_total_pagessbc.zpool_get_total_pagesasbuh1hhjhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMEubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMEubh)}(hzpool_get_total_pagesh]h)}(hjh]hzpool_get_total_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMEubj )}(h(struct zpool *zpool)h]j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.zpool_get_total_pagesasbuh1hhjubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjAhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMEubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMEubah}(h]jah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMKhjhhubj)}(hhh]j6)}(hThe total size of the poolh]hThe total size of the pool}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMDhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMEubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMHhjubj)}(hhh]j)}(h+``struct zpool *zpool`` The zpool to check h](j)}(h``struct zpool *zpool``h]j<)}(hjh]hstruct zpool *zpool}(hhhjhhhNhNubah}(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.chMEhjubj)}(hhh]j6)}(hThe zpool to checkh]hThe zpool to check}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMGhjubj6)}(h1This returns the total size in pages of the pool.h]h1This returns the total size in pages of the pool.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMGhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMIhjubj6)}(h!Total size of the zpool in pages.h]h!Total size of the zpool in pages.}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#zpool_can_sleep_mapped (C function)c.zpool_can_sleep_mappedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h1bool zpool_can_sleep_mapped (struct zpool *zpool)h]h)}(h0bool zpool_can_sleep_mapped(struct zpool *zpool)h](j)}(hj7h]hbool}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMRubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjnhMRubh)}(hzpool_can_sleep_mappedh]h)}(hzpool_can_sleep_mappedh]hzpool_can_sleep_mapped}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjnhMRubj )}(h(struct zpool *zpool)h]j )}(hstruct zpool *zpoolh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.zpool_can_sleep_mappedasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hzpoolh]hzpool}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj]hhhjnhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjnhMRubah}(h]jTah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM]hjVhhubj)}(hhh]j6)}(h'Test if zpool can sleep when do mapped.h]h'Test if zpool can sleep when do mapped.}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjnhMRubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j9j3j9j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct zpool *zpool`` The zpool to test **Description** Some allocators enter non-preemptible context in ->map() callback (e.g. disable pagefaults) and exit that context in ->unmap(), which limits what we can do with the mapped object. For instance, we cannot wait for asynchronous crypto API to decompress such an object or take mutexes since those will call into the scheduler. This function tells us whether we use such an allocator. **Return** true if zpool can sleep; false otherwise.h](j6)}(h**Parameters**h]jv)}(hjCh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMUhj=ubj)}(hhh]j)}(h*``struct zpool *zpool`` The zpool to test h](j)}(h``struct zpool *zpool``h]j<)}(hjbh]hstruct zpool *zpool}(hhhjdhhhNhNubah}(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.chMRhj\ubj)}(hhh]j6)}(hThe zpool to testh]hThe zpool to test}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjwhMRhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMRhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMThj=ubj6)}(hX|Some allocators enter non-preemptible context in ->map() callback (e.g. disable pagefaults) and exit that context in ->unmap(), which limits what we can do with the mapped object. For instance, we cannot wait for asynchronous crypto API to decompress such an object or take mutexes since those will call into the scheduler. This function tells us whether we use such an allocator.h]hX|Some allocators enter non-preemptible context in ->map() callback (e.g. disable pagefaults) and exit that context in ->unmap(), which limits what we can do with the mapped object. For instance, we cannot wait for asynchronous crypto API to decompress such an object or take mutexes since those will call into the scheduler. This function tells us whether we use such an allocator.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chMThj=ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM[hj=ubj6)}(h)true if zpool can sleep; false otherwise.h]h)true if zpool can sleep; false otherwise.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/zpool.chM[hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&mem_cgroup_css_from_folio (C function)c.mem_cgroup_css_from_foliohNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMnubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj*modnameN classnameNjijl)}jo]jr)}jemem_cgroup_css_from_foliosbc.mem_cgroup_css_from_folioasbuh1hhjhhhjhMnubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMnubj= )}(hj@ h]h*}(hhhjWhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMnubh)}(hmem_cgroup_css_from_folioh]h)}(hjFh]hmem_cgroup_css_from_folio}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMnubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jDc.mem_cgroup_css_from_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMnubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMnubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMwhjhhubj)}(hhh]j6)}(h(css of the memcg associated with a folioh]h(css of the memcg associated with a folio}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMnubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj'h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMqhj!ubj)}(hhh]j)}(h*``struct folio *folio`` folio of interest h](j)}(h``struct folio *folio``h]j<)}(hjFh]hstruct folio *folio}(hhhjHhhhNhNubah}(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.chMnhj@ubj)}(hhh]j6)}(hfolio of interesth]hfolio of interest}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj[hMnhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMnhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMphj!ubj6)}(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 }(hMIf memcg is bound to the default hierarchy, css of the memcg associated with hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh8 is returned. The returned css remains associated with }(h8 is returned. The returned css remains associated with hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh until it is released.}(h until it is released.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMphj!ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMthj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpage_cgroup_ino (C function)c.page_cgroup_inohNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jepage_cgroup_inosbc.page_cgroup_inoasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(hpage_cgroup_inoh]h)}(hjh]hpage_cgroup_ino}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(struct page *page)h]j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjNhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjJubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]h)}(hpageh]hpage}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjnmodnameN classnameNjijl)}jo]jc.page_cgroup_inoasbuh1hhjJubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjJubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjFubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(h5return inode number of the memcg a page is charged toh]h5return inode number of the memcg a page is charged to}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j)}(h``struct page *page`` the page h](j)}(h``struct page *page``h]j<)}(hjh]hstruct page *page}(hhhjhhhNhNubah}(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]j6)}(hthe pageh]hthe page}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjLh]h Description}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(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 }(h9Look up the closest online ancestor of the memory cgroup hjbhhhNhNubjv)}(h**page**h]hpage}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh3 is charged to and return its inode number or 0 if }(h3 is charged to and return its inode number or 0 if hjbhhhNhNubjv)}(h**page**h]hpage}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh_ is not charged to any cgroup. It is safe to call this function without holding a reference to }(h_ is not charged to any cgroup. It is safe to call this function without holding a reference to hjbhhhNhNubjv)}(h**page**h]hpage}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh.}(hjyhjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__mod_memcg_state (C function)c.__mod_memcg_statehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hTvoid __mod_memcg_state (struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)h]h)}(hSvoid __mod_memcg_state(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(h__mod_memcg_stateh]h)}(h__mod_memcg_stateh]h__mod_memcg_state}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jr)}jejsbc.__mod_memcg_stateasbuh1hhjubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjbhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(henum memcg_stat_item idxh](j.)}(hjh]henum}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmemcg_stat_itemh]hmemcg_stat_item}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jPc.__mod_memcg_stateasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidxh]hidx}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint valh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hvalh]hval}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(hupdate cgroup memory statisticsh]hupdate cgroup memory statistics}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jJj3jJj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjTh]h Parameters}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjNubj)}(hhh](j)}(h/``struct mem_cgroup *memcg`` the memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjsh]hstruct mem_cgroup *memcg}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjqubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjmubj)}(hhh]j6)}(hthe memory cgrouph]hthe memory cgroup}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(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}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h8``int val`` delta to add to the counter, can be negativeh](j)}(h ``int val``h]j<)}(hjh]hint val}(hhhjhhhNhNubah}(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]j6)}(h,delta to add to the counter, can be negativeh]h,delta to add to the counter, can be negative}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__mod_lruvec_state (C function)c.__mod_lruvec_statehNtauh1hhj~ehhhNhNubh)}(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}(hhhj?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 }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhM ubh)}(h__mod_lruvec_stateh]h)}(h__mod_lruvec_stateh]h__mod_lruvec_state}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhjMhM ubj )}(h9(struct lruvec *lruvec, enum node_stat_item idx, int val)h](j )}(hstruct lruvec *lruvech](j.)}(hj1h]hstruct}(hhhj|hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]h)}(hlruvech]hlruvec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejbsbc.__mod_lruvec_stateasbuh1hhjxubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjxubh)}(hlruvech]hlruvec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubj )}(henum node_stat_item idxh](j.)}(hjh]henum}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hnode_stat_itemh]hnode_stat_item}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.__mod_lruvec_stateasbuh1hhjubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidxh]hidx}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubj )}(hint valh](j)}(hinth]hint}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hvalh]hval}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubeh}(h]h ]h"]h$]h&]jj uh1j hj;hhhjMhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhjMhM ubah}(h]j2ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj4hhubj)}(hhh]j6)}(hupdate lruvec memory statisticsh]hupdate lruvec memory statistics}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/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}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(h the lruvech]h the lruvec}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``enum node_stat_item idx`` the stat item h](j)}(h``enum node_stat_item idx``h]j<)}(hjh]henum node_stat_item idx}(hhhjhhhNhNubah}(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.chM hj ubj)}(hhh]j6)}(h the stat itemh]h the stat item}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hjubj)}(h9``int val`` delta to add to the counter, can be negative h](j)}(h ``int val``h]j<)}(hjKh]hint val}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjEubj)}(hhh]j6)}(h,delta to add to the counter, can be negativeh]h,delta to add to the counter, can be negative}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hM hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!__count_memcg_events (C function)c.__count_memcg_eventshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(havoid __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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMNubh)}(h__count_memcg_eventsh]h)}(h__count_memcg_eventsh]h__count_memcg_events}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMNubj )}(hG(struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jr)}jejsbc.__count_memcg_eventsasbuh1hhjubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjThhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(henum vm_event_item idxh](j.)}(hjh]henum}(hhhjzhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]h)}(h vm_event_itemh]h vm_event_item}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jBc.__count_memcg_eventsasbuh1hhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hidxh]hidx}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long counth](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcounth]hcount}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMNubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMNubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMRhjhhubj)}(hhh]j6)}(haccount VM events in a cgrouph]haccount VM events in a cgroup}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMNubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jXj3jXj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjbh]h Parameters}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMQhj\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}(hhhjhhhNhNubah}(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.chMNhj{ubj)}(hhh]j6)}(hthe memory cgrouph]hthe memory cgroup}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMNhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjxubj)}(h*``enum vm_event_item idx`` the event item h](j)}(h``enum vm_event_item idx``h]j<)}(hjh]henum vm_event_item idx}(hhhjhhhNhNubah}(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.chMOhjubj)}(hhh]j6)}(hthe event itemh]hthe event item}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjxubj)}(h:``unsigned long count`` the number of events that occurredh](j)}(h``unsigned long count``h]j<)}(hjh]hunsigned long count}(hhhjhhhNhNubah}(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.chMQhjubj)}(hhh]j6)}(h"the number of events that occurredh]h"the number of events that occurred}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMPhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#get_mem_cgroup_from_mm (C function)c.get_mem_cgroup_from_mmhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjMhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjIhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjnmodnameN classnameNjijl)}jo]jr)}jeget_mem_cgroup_from_mmsbc.get_mem_cgroup_from_mmasbuh1hhjIhhhjZhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjIhhhjZhMubh)}(hget_mem_cgroup_from_mmh]h)}(hjh]hget_mem_cgroup_from_mm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjZhMubj )}(h(struct mm_struct *mm)h]j )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.get_mem_cgroup_from_mmasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmmh]hmm}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjIhhhjZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjZhMubah}(h]j@ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBhhubj)}(hhh]j6)}(h.Obtain a reference on given mm_struct's memcg.h]h0Obtain a reference on given mm_struct’s memcg.}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jaj3jaj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjeubj)}(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<)}(hjh]hstruct mm_struct *mm}(hhhjhhhNhNubah}(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]j6)}(h8mm from which memcg should be extracted. It can be NULL.h]h8mm from which memcg should be extracted. It can be NULL.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjeubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(get_mem_cgroup_from_current (C function)c.get_mem_cgroup_from_currenthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h6struct mem_cgroup * get_mem_cgroup_from_current (void)h]h)}(h4struct mem_cgroup *get_mem_cgroup_from_current(void)h](j.)}(hj1h]hstruct}(hhhj 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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]jr)}jeget_mem_cgroup_from_currentsbc.get_mem_cgroup_from_currentasbuh1hhjhhhjhMubj)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj= )}(hj@ h]h*}(hhhjXhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhjhMubh)}(hget_mem_cgroup_from_currenth]h)}(hjGh]hget_mem_cgroup_from_current}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j hj|ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(h+Obtain a reference on current task's memcg.h]h-Obtain a reference on current task’s memcg.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h'**Parameters** ``void`` no argumentsh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j<)}(hjh]hvoid}(hhhjhhhNhNubah}(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]j6)}(h no argumentsh]h no arguments}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_iter (C function)c.mem_cgroup_iterhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjJhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjFhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjkmodnameN classnameNjijl)}jo]jr)}jemem_cgroup_itersbc.mem_cgroup_iterasbuh1hhjFhhhjWhMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjFhhhjWhMubh)}(hmem_cgroup_iterh]h)}(hjh]hmem_cgroup_iter}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjWhMubj )}(h](struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)h](j )}(hstruct mem_cgroup *rooth](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mem_cgroup_iterasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hrooth]hroot}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *prevh](j.)}(hj1h]hstruct}(hhhj4hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj0ubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjTmodnameN classnameNjijl)}jo]jc.mem_cgroup_iterasbuh1hhj0ubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj= )}(hj@ h]h*}(hhhj~hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj0ubh)}(hprevh]hprev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h)struct mem_cgroup_reclaim_cookie *reclaimh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmem_cgroup_reclaim_cookieh]hmem_cgroup_reclaim_cookie}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mem_cgroup_iterasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hreclaimh]hreclaim}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjFhhhjWhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjWhMubah}(h]j=ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM"hj?hhubj)}(hhh]j6)}(h$iterate over memory cgroup hierarchyh]h$iterate over memory cgroup hierarchy}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjWhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j>j3j>j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjHh]h Parameters}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBubj)}(hhh](j)}(h+``struct mem_cgroup *root`` hierarchy root h](j)}(h``struct mem_cgroup *root``h]j<)}(hjgh]hstruct mem_cgroup *root}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjeubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjaubj)}(hhh]j6)}(hhierarchy rooth]hhierarchy root}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubj)}(hP``struct mem_cgroup *prev`` previously returned memcg, NULL on first invocation h](j)}(h``struct mem_cgroup *prev``h]j<)}(hjh]hstruct mem_cgroup *prev}(hhhjhhhNhNubah}(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]j6)}(h3previously returned memcg, NULL on first invocationh]h3previously returned memcg, NULL on first invocation}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h4cookie for shared reclaim walks, NULL for full walksh]h4cookie for shared reclaim walks, NULL for full walks}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBubj6)}(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 }(h6Returns references to children of the hierarchy below hj*hhhNhNubjv)}(h**root**h]hroot}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh, or }(h, or hj*hhhNhNubjv)}(h**root**h]hroot}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubh itself, or }(h itself, or hj*hhhNhNubj<)}(h``NULL``h]hNULL}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj*ubh after a full round-trip.}(h after a full round-trip.hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBubj6)}(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 }(h%Caller must pass the return value in hjshhhNhNubjv)}(h**prev**h]hprev}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.}(h on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBubj6)}(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 }(h!Reclaimers can specify a node in hjhhhNhNubjv)}(h **reclaim**h]hreclaim}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhe to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.}(he to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"mem_cgroup_iter_break (C function)c.mem_cgroup_iter_breakhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hmem_cgroup_iter_breakh]h)}(hmem_cgroup_iter_breakh]hmem_cgroup_iter_break}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h2(struct mem_cgroup *root, struct mem_cgroup *prev)h](j )}(hstruct mem_cgroup *rooth](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj6modnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_iter_breakasbuh1hhjubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjbhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hrooth]hroot}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *prevh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jPc.mem_cgroup_iter_breakasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hprevh]hprev}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(h"abort a hierarchy walk prematurelyh]h"abort a hierarchy walk prematurely}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2j"j3j"j4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct mem_cgroup *root`` hierarchy root ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()h](j6)}(h**Parameters**h]jv)}(hj,h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj*ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&ubj)}(hhh](j)}(h+``struct mem_cgroup *root`` hierarchy root h](j)}(h``struct mem_cgroup *root``h]j<)}(hjKh]hstruct mem_cgroup *root}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjEubj)}(hhh]j6)}(hhierarchy rooth]hhierarchy root}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjBubj)}(hZ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()h](j)}(h``struct mem_cgroup *prev``h]j<)}(hjh]hstruct mem_cgroup *prev}(hhhjhhhNhNubah}(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]j6)}(h>last visited hierarchy member as returned by mem_cgroup_iter()h]h>last visited hierarchy member as returned by mem_cgroup_iter()}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"mem_cgroup_scan_tasks (C function)c.mem_cgroup_scan_taskshNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hmem_cgroup_scan_tasksh]h)}(hmem_cgroup_scan_tasksh]hmem_cgroup_scan_tasks}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hL(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;modnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_scan_tasksasbuh1hhjubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h%int (*fn)(struct task_struct*, void*)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj-h]h(}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfnh]hfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj= )}(hj!.h]h)}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(hj-h]h(}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jUc.mem_cgroup_scan_tasksasbuh1hhjubj= )}(hj@ h]h*}(hhhj'hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(h,h]h,}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj^hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubj= )}(hj!.h]h)}(hhhjkhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h void *argh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hargh]harg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(h/iterate over tasks of a memory cgroup hierarchyh]h/iterate over tasks of a memory cgroup hierarchy}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h,``struct mem_cgroup *memcg`` hierarchy root h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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]j6)}(hhierarchy rooth]hhierarchy root}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(hK``int (*fn)(struct task_struct *, void *)`` function to call for each task h](j)}(h+``int (*fn)(struct task_struct *, void *)``h]j<)}(hjQh]h'int (*fn)(struct task_struct *, void *)}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjOubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjKubj)}(hhh]j6)}(hfunction to call for each taskh]hfunction to call for each task}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(h(``void *arg`` argument passed to **fn** h](j)}(h ``void *arg``h]j<)}(hjh]h void *arg}(hhhjhhhNhNubah}(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]j6)}(hargument passed to **fn**h](hargument passed to }(hargument passed to hjhhhNhNubjv)}(h**fn**h]hfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubeh}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(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 }(h.This function iterates over tasks attached to hjhhhNhNubjv)}(h **memcg**h]hmemcg}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh( or to any of its descendants and calls }(h( or to any of its descendants and calls hjhhhNhNubjv)}(h**fn**h]hfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh for each task. If }(h for each task. If hjhhhNhNubjv)}(h**fn**h]hfn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhz returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0.}(hz 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&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(hhhhjShMubah}(h]j9ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj;hhubj)}(hhh]j6)}(hLock the lruvec for a folio.h]hLock the lruvec for a folio.}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjShMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jZj3jZj4uh1hhhhj~ehNhNubjl)}(hXG**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_memcg_lock() - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled.h](j6)}(h**Parameters**h]jv)}(hjdh]h Parameters}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubah}(h]h ]h"]h$]h&]uh1j5hP/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<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(hPointer to the folio.h]hPointer to the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj^ubj6)}(hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio_memcg_lock() - 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_memcg_lock() - folio frozen (refcount of 0)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj^ubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj^ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&folio_lruvec_lock_irqsave (C function)c.folio_lruvec_lock_irqsavehNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj*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 }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubh)}(hhh]h)}(hlruvech]hlruvec}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjKmodnameN classnameNjijl)}jo]jr)}jefolio_lruvec_lock_irqsavesbc.folio_lruvec_lock_irqsaveasbuh1hhj&hhhj7hMubj)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubj= )}(hj@ h]h*}(hhhjxhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj&hhhj7hMubh)}(hfolio_lruvec_lock_irqsaveh]h)}(hjgh]hfolio_lruvec_lock_irqsave}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj7hMubj )}(h+(struct folio *folio, unsigned long *flags)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(Fh]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jec.folio_lruvec_lock_irqsaveasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long *flagsh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjLhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hflagsh]hflags}(hhhjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj&hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj7hMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM(hjhhubj)}(hhh]j6)}(hLock the lruvec for a folio.h]hLock the lruvec for a folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX}**Parameters** ``struct folio *folio`` Pointer to the folio. ``unsigned long *flags`` Pointer to irqsave flags. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio_memcg_lock() - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h.``struct folio *folio`` Pointer to the folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(hPointer to the folio.h]hPointer to the folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``unsigned long *flags`` Pointer to irqsave flags. h](j)}(h``unsigned long *flags``h]j<)}(hjh]hunsigned long *flags}(hhhjhhhNhNubah}(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]j6)}(hPointer to irqsave flags.h]hPointer to irqsave flags.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj9h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(hThese functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio_memcg_lock() - 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_memcg_lock() - folio frozen (refcount of 0)}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM%hjubj6)}(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.}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'mem_cgroup_update_lru_size (C function)c.mem_cgroup_update_lru_sizehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM5ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubh)}(hmem_cgroup_update_lru_sizeh]h)}(hmem_cgroup_update_lru_sizeh]hmem_cgroup_update_lru_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM5ubj )}(hA(struct lruvec *lruvec, enum lru_list lru, int zid, int nr_pages)h](j )}(hstruct lruvec *lruvech](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlruvech]hlruvec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_update_lru_sizeasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj.hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hlruvech]hlruvec}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(henum lru_list lruh](j.)}(hjh]henum}(hhhjThhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjPubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]h)}(hlru_listh]hlru_list}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjtmodnameN classnameNjijl)}jo]jc.mem_cgroup_update_lru_sizeasbuh1hhjPubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hlruh]hlru}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint zidh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hzidh]hzid}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int nr_pagesh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM5ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM=hjhhubj)}(hhh]j6)}(h*account for adding or removing an lru pageh]h*account for adding or removing an lru page}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM4hj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jKj3jKj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM8hjOubj)}(hhh](j)}(h9``struct lruvec *lruvec`` mem_cgroup per zone lru vector h](j)}(h``struct lruvec *lruvec``h]j<)}(hjth]hstruct lruvec *lruvec}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM5hjnubj)}(hhh]j6)}(hmem_cgroup per zone lru vectorh]hmem_cgroup per zone lru vector}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjkubj)}(h?``enum lru_list lru`` index of lru list the page is sitting on h](j)}(h``enum lru_list lru``h]j<)}(hjh]henum lru_list lru}(hhhjhhhNhNubah}(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.chM6hjubj)}(hhh]j6)}(h(index of lru list the page is sitting onh]h(index of lru list the page is sitting on}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjkubj)}(h+``int zid`` zone id of the accounted pages h](j)}(h ``int zid``h]j<)}(hjh]hint zid}(hhhjhhhNhNubah}(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.chM7hjubj)}(hhh]j6)}(hzone id of the accounted pagesh]hzone id of the accounted pages}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjkubj)}(h@``int nr_pages`` positive when adding or negative when removing h](j)}(h``int nr_pages``h]j<)}(hjh]h int nr_pages}(hhhj!hhhNhNubah}(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.chM8hjubj)}(hhh]j6)}(h.positive when adding or negative when removingh]h.positive when adding or negative when removing}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hM8hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM8hjkubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM:hjOubj6)}(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.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM:hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_margin (C function)c.mem_cgroup_marginhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM[ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM[ubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM[ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM[ubh)}(hmem_cgroup_marginh]h)}(hmem_cgroup_marginh]hmem_cgroup_margin}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM[ubj )}(h(struct mem_cgroup *memcg)h]j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_marginasbuh1hhjubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjDhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM[ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM`hjhhubj)}(hhh]j6)}(h-calculate chargeable space of a memory cgrouph]h-calculate chargeable space of a memory cgroup}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMZhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM[ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct mem_cgroup *memcg`` the memory cgroup **Description** Returns the maximum amount of memory **mem** can be charged with, in pages.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM^hjubj)}(hhh]j)}(h/``struct mem_cgroup *memcg`` the memory cgroup h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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.chM[hjubj)}(hhh]j6)}(hthe memory cgrouph]hthe memory cgroup}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM]hjubj6)}(hKReturns the maximum amount of memory **mem** can be charged with, in pages.h](h%Returns the maximum amount of memory }(h%Returns the maximum amount of memory hjhhhNhNubjv)}(h**mem**h]hmem}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh can be charged with, in pages.}(h can be charged with, in pages.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mem_cgroup_print_oom_context (C function)c.mem_cgroup_print_oom_contexthNtauh1hhj~ehhhNhNubh)}(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}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMJubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hMJubh)}(hmem_cgroup_print_oom_contexth]h)}(hmem_cgroup_print_oom_contexth]hmem_cgroup_print_oom_context}(hhhjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhj_hMJubj )}(h1(struct mem_cgroup *memcg, struct task_struct *p)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejtsbc.mem_cgroup_print_oom_contextasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct task_struct *ph](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h task_structh]h task_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jc.mem_cgroup_print_oom_contextasbuh1hhjubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjJhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hjI h]hp}(hhhjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjMhhhj_hMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj_hMJubah}(h]jDah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMQhjFhhubj)}(hhh]j6)}(h4Print OOM information relevant to memory controller.h]h4Print OOM information relevant to memory controller.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMIhj~hhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMJubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMMhjubj)}(hhh](j)}(hD``struct mem_cgroup *memcg`` The memory cgroup that went over limit h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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.chMKhjubj)}(hhh]j6)}(h&The memory cgroup that went over limith]h&The memory cgroup that went over limit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(h:``struct task_struct *p`` Task that is going to be killed h](j)}(h``struct task_struct *p``h]j<)}(hjh]hstruct task_struct *p}(hhhjhhhNhNubah}(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.chMLhjubj)}(hhh]j6)}(hTask that is going to be killedh]hTask that is going to be killed}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**NOTE**h]jv)}(hj6h]hNOTE}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNhjubj6)}(hK**memcg** and **p**'s mem_cgroup can be different when hierarchy is enabledh](jv)}(h **memcg**h]hmemcg}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh and }(h and hjLhhhNhNubjv)}(h**p**h]hp}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjLubh:’s mem_cgroup can be different when hierarchy is enabled}(h8's mem_cgroup can be different when hierarchy is enabledhjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mem_cgroup_print_oom_meminfo (C function)c.mem_cgroup_print_oom_meminfohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj6ubj)}(hhh](j)}(h4``struct mem_cgroup *memcg`` memcg to consume from. h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hj[h]hstruct mem_cgroup *memcg}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjUubj)}(hhh]j6)}(hmemcg to consume from.h]hmemcg to consume from.}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjRubj)}(h4``unsigned int nr_pages`` how many pages to charge. h](j)}(h``unsigned int nr_pages``h]j<)}(hjh]hunsigned int nr_pages}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(hhow many pages to charge.h]hhow many pages to charge.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj6ubj6)}(hThe charges will only happen if **memcg** matches the current cpu's memcg stock, and at least **nr_pages** are available in that stock. Failure to service an allocation will refill the stock.h](h The charges will only happen if }(h The charges will only happen if hjhhhNhNubjv)}(h **memcg**h]hmemcg}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh7 matches the current cpu’s memcg stock, and at least }(h5 matches the current cpu's memcg stock, and at least hjhhhNhNubjv)}(h **nr_pages**h]hnr_pages}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhV are available in that stock. Failure to service an allocation will refill the stock.}(hV are available in that stock. Failure to service an allocation will refill the stock.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj6ubj6)}(h,returns true if successful, false otherwise.h]h,returns true if successful, false otherwise.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mem_cgroup_cancel_charge (C function)c.mem_cgroup_cancel_chargehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hOvoid mem_cgroup_cancel_charge (struct mem_cgroup *memcg, unsigned int nr_pages)h]h)}(hNvoid mem_cgroup_cancel_charge(struct mem_cgroup *memcg, unsigned int nr_pages)h](j)}(hvoidh]hvoid}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhM ubh)}(hmem_cgroup_cancel_chargeh]h)}(hmem_cgroup_cancel_chargeh]hmem_cgroup_cancel_charge}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhM ubj )}(h1(struct mem_cgroup *memcg, unsigned int nr_pages)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejmsbc.mem_cgroup_cancel_chargeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjFhhhjXhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjXhM ubah}(h]j=ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj?hhubj)}(hhh]j6)}(h(cancel an uncommitted try_charge() call.h]h(cancel an uncommitted try_charge() call.}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjYhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jtj3jtj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct mem_cgroup *memcg`` memcg previously charged. ``unsigned int nr_pages`` number of pages previously charged.h](j6)}(h**Parameters**h]jv)}(hj~h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjxubj)}(hhh](j)}(h7``struct mem_cgroup *memcg`` memcg previously charged. h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(hmemcg previously charged.h]hmemcg previously charged.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h=``unsigned int nr_pages`` number of pages previously charged.h](j)}(h``unsigned int nr_pages``h]j<)}(hjh]hunsigned int nr_pages}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(h#number of pages previously charged.h]h#number of pages previously charged.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mem_cgroup_commit_charge (C function)c.mem_cgroup_commit_chargehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hMvoid mem_cgroup_commit_charge (struct folio *folio, struct mem_cgroup *memcg)h]h)}(hLvoid mem_cgroup_commit_charge(struct folio *folio, struct mem_cgroup *memcg)h](j)}(hvoidh]hvoid}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM7 ubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj>hM7 ubh)}(hmem_cgroup_commit_chargeh]h)}(hmem_cgroup_commit_chargeh]hmem_cgroup_commit_charge}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hM7 ubj )}(h/(struct folio *folio, struct mem_cgroup *memcg)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjmhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjiubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejSsbc.mem_cgroup_commit_chargeasbuh1hhjiubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjiubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjeubj )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mem_cgroup_commit_chargeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj)hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjeubeh}(h]h ]h"]h$]h&]jj uh1j hj,hhhj>hM7 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hM7 ubah}(h]j#ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM: hj%hhubj)}(hhh]j6)}(h,commit a previously successful try_charge().h]h,commit a previously successful try_charge().}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM6 hj^hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hM7 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyj3jyj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct folio *folio`` folio to commit the charge to. ``struct mem_cgroup *memcg`` memcg previously charged.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM: hj}ubj)}(hhh](j)}(h7``struct folio *folio`` folio to commit the charge to. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chM7 hjubj)}(hhh]j6)}(hfolio to commit the charge to.h]hfolio to commit the charge to.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM7 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7 hjubj)}(h6``struct mem_cgroup *memcg`` memcg previously charged.h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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.chM9 hjubj)}(hhh]j6)}(hmemcg previously charged.h]hmemcg previously charged.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM8 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__memcg_kmem_charge_page (C function)c.__memcg_kmem_charge_pagehNtauh1hhj~ehhhNhNubh)}(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}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMe ubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjChMe ubh)}(h__memcg_kmem_charge_pageh]h)}(h__memcg_kmem_charge_pageh]h__memcg_kmem_charge_page}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjChMe ubj )}(h)(struct page *page, gfp_t gfp, int order)h](j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjrhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejXsbc.__memcg_kmem_charge_pageasbuh1hhjnubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjnubh)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.__memcg_kmem_charge_pageasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubj )}(h int orderh](j)}(hinth]hint}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(horderh]horder}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjjubeh}(h]h ]h"]h$]h&]jj uh1j hj1hhhjChMe ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjChMe ubah}(h]j(ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMk hj*hhubj)}(hhh]j6)}(h/charge a kmem page to the current memory cgrouph]h/charge a kmem page to the current memory cgroup}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMd hjphhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMe ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMh hjubj)}(hhh](j)}(h%``struct page *page`` page to charge h](j)}(h``struct page *page``h]j<)}(hjh]hstruct page *page}(hhhjhhhNhNubah}(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.chMe hjubj)}(hhh]j6)}(hpage to chargeh]hpage to charge}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMe hjubj)}(h``gfp_t gfp`` reclaim mode h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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.chMf hjubj)}(hhh]j6)}(h reclaim modeh]h reclaim mode}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMf hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMf hjubj)}(h``int order`` allocation order h](j)}(h ``int order``h]j<)}(hj&h]h int order}(hhhj(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.chMg hj ubj)}(hhh]j6)}(hallocation orderh]hallocation order}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj;hMg hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMg hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjah]h Description}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMi hjubj6)}(h/Returns 0 on success, an error code on failure.h]h/Returns 0 on success, an error code on failure.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMi hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__memcg_kmem_uncharge_page (C function)c.__memcg_kmem_uncharge_pagehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(h__memcg_kmem_uncharge_pageh]h)}(h__memcg_kmem_uncharge_pageh]h__memcg_kmem_uncharge_page}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(struct page *page, int order)h](j )}(hstruct page *pageh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hpageh]hpage}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.__memcg_kmem_uncharge_pageasbuh1hhjubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj/hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpageh]hpage}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int orderh](j)}(hinth]hint}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(horderh]horder}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjhhubj)}(hhh]j6)}(huncharge a kmem pageh]huncharge a kmem page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM~ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hZ**Parameters** ``struct page *page`` page to uncharge ``int order`` allocation orderh](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjubj)}(hhh](j)}(h'``struct page *page`` page to uncharge h](j)}(h``struct page *page``h]j<)}(hjh]hstruct page *page}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(hpage to unchargeh]hpage to uncharge}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``int order`` allocation orderh](j)}(h ``int order``h]j<)}(hjh]h int order}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(hallocation orderh]hallocation order}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mem_cgroup_move_swap_account (C function)c.mem_cgroup_move_swap_accounthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hdint mem_cgroup_move_swap_account (swp_entry_t entry, struct mem_cgroup *from, struct mem_cgroup *to)h]h)}(hcint mem_cgroup_move_swap_account(swp_entry_t entry, struct mem_cgroup *from, struct mem_cgroup *to)h](j)}(hinth]hint}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubh)}(hmem_cgroup_move_swap_accounth]h)}(hmem_cgroup_move_swap_accounth]hmem_cgroup_move_swap_account}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj~hMubj )}(hC(swp_entry_t entry, struct mem_cgroup *from, struct mem_cgroup *to)h](j )}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_move_swap_accountasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hentryh]hentry}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *fromh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mem_cgroup_move_swap_accountasbuh1hhjubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjAhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfromh]hfrom}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *toh](j.)}(hj1h]hstruct}(hhhjghhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjcubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.mem_cgroup_move_swap_accountasbuh1hhjcubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjcubh)}(htoh]hto}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjlhhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjehhubj)}(hhh]j6)}(h*move swap charge and swap_cgroup's record.h]h,move swap charge and swap_cgroup’s record.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``swp_entry_t entry`` swap entry to be moved ``struct mem_cgroup *from`` mem_cgroup which the entry is moved from ``struct mem_cgroup *to`` mem_cgroup which the entry is moved to **Description** It succeeds only when the swap_cgroup's record for this entry is the same as the mem_cgroup's id of **from**. Returns 0 on success, -EINVAL on failure. The caller must have charged to **to**, IOW, called page_counter_charge() about both res and memsw, and called css_get().h](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h-``swp_entry_t entry`` swap entry to be moved h](j)}(h``swp_entry_t entry``h]j<)}(hj*h]hswp_entry_t entry}(hhhj,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]j6)}(hswap entry to be movedh]hswap entry to be moved}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(hE``struct mem_cgroup *from`` mem_cgroup which the entry is moved from h](j)}(h``struct mem_cgroup *from``h]j<)}(hjch]hstruct mem_cgroup *from}(hhhjehhhNhNubah}(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]j6)}(h(mem_cgroup which the entry is moved fromh]h(mem_cgroup which the entry is moved from}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubj)}(hA``struct mem_cgroup *to`` mem_cgroup which the entry is moved to h](j)}(h``struct mem_cgroup *to``h]j<)}(hjh]hstruct mem_cgroup *to}(hhhjhhhNhNubah}(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]j6)}(h&mem_cgroup which the entry is moved toh]h&mem_cgroup which the entry is moved to}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(hmIt succeeds only when the swap_cgroup's record for this entry is the same as the mem_cgroup's id of **from**.h](hhIt succeeds only when the swap_cgroup’s record for this entry is the same as the mem_cgroup’s id of }(hdIt succeeds only when the swap_cgroup's record for this entry is the same as the mem_cgroup's id of hjhhhNhNubjv)}(h**from**h]hfrom}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(h)Returns 0 on success, -EINVAL on failure.h]h)Returns 0 on success, -EINVAL on failure.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(hyThe caller must have charged to **to**, IOW, called page_counter_charge() about both res and memsw, and called css_get().h](h The caller must have charged to }(h The caller must have charged to hj hhhNhNubjv)}(h**to**h]hto}(hhhj' hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubhS, IOW, called page_counter_charge() about both res and memsw, and called css_get().}(hS, IOW, called page_counter_charge() about both res and memsw, and called css_get().hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ mem_cgroup_wb_stats (C function)c.mem_cgroup_wb_statshNtauh1hhj~ehhhNhNubh)}(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}(hhhja hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMyubj)}(h h]h }(hhhjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] hhhjo hMyubh)}(hmem_cgroup_wb_statsh]h)}(hmem_cgroup_wb_statsh]hmem_cgroup_wb_stats}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj] hhhjo hMyubj )}(h(struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)h](j )}(hstruct bdi_writeback *wbh](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(h bdi_writebackh]h bdi_writeback}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jej sbc.mem_cgroup_wb_statsasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hwbh]hwb}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned long *pfilepagesh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hhhj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhjH hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(h pfilepagesh]h pfilepages}(hhhjU hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned long *pheadroomh](j)}(hunsignedh]hunsigned}(hhhjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj)}(h h]h }(hhhj| hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjj ubh)}(h pheadroomh]h pheadroom}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned long *pdirtyh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(hpdirtyh]hpdirty}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hunsigned long *pwritebackh](j)}(hunsignedh]hunsigned}(hhhj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubj)}(h h]h }(hhhj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubj)}(hlongh]hlong}(hhhjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubj)}(h h]h }(hhhjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubj= )}(hj@ h]h*}(hhhjb hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj& ubh)}(h pwritebackh]h pwriteback}(hhhjo hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj& ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hj] hhhjo hMyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjY hhhjo hMyubah}(h]jT ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjV hhubj)}(hhh]j6)}(h/retrieve writeback related stats from its memcgh]h/retrieve writeback related stats from its memcg}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMxhj hhubah}(h]h ]h"]h$]h&]uh1jhjV hhhjo hMyubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM|hj ubj)}(hhh](j)}(h7``struct bdi_writeback *wb`` bdi_writeback in question h](j)}(h``struct bdi_writeback *wb``h]j<)}(hj h]hstruct bdi_writeback *wb}(hhhj 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.chMyhj ubj)}(hhh]j6)}(hbdi_writeback in questionh]hbdi_writeback in question}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hMyhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMyhj ubj)}(hE``unsigned long *pfilepages`` out parameter for number of file pages h](j)}(h``unsigned long *pfilepages``h]j<)}(hj h]hunsigned long *pfilepages}(hhhj 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.chMzhj ubj)}(hhh]j6)}(h&out parameter for number of file pagesh]h&out parameter for number of file pages}(hj/ hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj) hMzhj* ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj) hMzhj ubj)}(h^``unsigned long *pheadroom`` out parameter for number of allocatable pages according to memcg h](j)}(h``unsigned long *pheadroom``h]j<)}(hjM h]hunsigned long *pheadroom}(hhhjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjK ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM{hjG ubj)}(hhh]j6)}(h@out parameter for number of allocatable pages according to memcgh]h@out parameter for number of allocatable pages according to memcg}(hjh hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjb hM{hjc ubah}(h]h ]h"]h$]h&]uh1jhjG ubeh}(h]h ]h"]h$]h&]uh1jhjb hM{hj ubj)}(hB``unsigned long *pdirty`` out parameter for number of dirty pages h](j)}(h``unsigned long *pdirty``h]j<)}(hj h]hunsigned long *pdirty}(hhhj 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]j6)}(h'out parameter for number of dirty pagesh]h'out parameter for number of dirty pages}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj hM|hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM|hj ubj)}(hP``unsigned long *pwriteback`` out parameter for number of pages under writeback h](j)}(h``unsigned long *pwriteback``h]j<)}(hj h]hunsigned long *pwriteback}(hhhj 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]j6)}(h1out parameter for number of pages under writebackh]h1out parameter for number of pages under writeback}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj 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 ubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj6)}(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 }(hGDetermine the numbers of file, headroom, dirty, and writeback pages in hj hhhNhNubjv)}(h**wb**h]hwb}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh^’s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved.}(h\'s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubj6)}(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 }(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 hj3 hhhNhNubjv)}(h***pheadroom**h]h *pheadroom}(hhhj< hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3 ubh accordingly.}(h accordingly.hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_from_id (C function)c.mem_cgroup_from_idhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjv hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjr hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr hhhj hMubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jemem_cgroup_from_idsbc.mem_cgroup_from_idasbuh1hhjr hhhj hMubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr hhhj hMubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjr hhhj hMubh)}(hmem_cgroup_from_idh]h)}(hj h]hmem_cgroup_from_id}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjr hhhj hMubj )}(h(unsigned short id)h]j )}(hunsigned short idh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hshorth]hshort}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hidh]hid}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubah}(h]h ]h"]h$]h&]jj uh1j hjr hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjn hhhj hMubah}(h]ji ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjk hhubj)}(hhh]j6)}(hlook up a memcg from a memcg idh]hlook up a memcg from a memcg id}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjk hhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhj~ehNhNubjl)}(hs**Parameters** ``unsigned short id`` the memcg id to look up **Description** Caller must hold rcu_read_lock().h](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjoubj)}(hhh]j)}(h.``unsigned short id`` the memcg id to look up h](j)}(h``unsigned short id``h]j<)}(hjh]hunsigned short id}(hhhjhhhNhNubah}(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]j6)}(hthe memcg id to look uph]hthe memcg id to look up}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjoubj6)}(h!Caller must hold rcu_read_lock().h]h!Caller must hold rcu_read_lock().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!mem_cgroup_css_reset (C function)c.mem_cgroup_css_resethNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM0ubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hM0ubh)}(hmem_cgroup_css_reseth]h)}(hmem_cgroup_css_reseth]hmem_cgroup_css_reset}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hM0ubj )}(h!(struct cgroup_subsys_state *css)h]j )}(hstruct cgroup_subsys_state *cssh](j.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}jej7sbc.mem_cgroup_css_resetasbuh1hhjMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjMubh)}(hcssh]hcss}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj"hM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hM0ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM;hj hhubj)}(hhh]j6)}(h reset the states of a mem_cgrouph]h reset the states of a mem_cgroup}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hM0ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM3hjubj)}(hhh]j)}(h3``struct cgroup_subsys_state *css`` the target css h](j)}(h#``struct cgroup_subsys_state *css``h]j<)}(hjh]hstruct cgroup_subsys_state *css}(hhhjhhhNhNubah}(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.chM0hjubj)}(hhh]j6)}(hthe target cssh]hthe target css}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hM0hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM0hj ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjQh]h Description}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM2hjubj6)}(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 }(h3Reset the states of the mem_cgroup associated with hjghhhNhNubjv)}(h**css**h]hcss}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubh. 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. 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.hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM2hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mem_cgroup_move_account (C function)c.mem_cgroup_move_accounthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hpint mem_cgroup_move_account (struct folio *folio, bool compound, struct mem_cgroup *from, struct mem_cgroup *to)h]h)}(hoint mem_cgroup_move_account(struct folio *folio, bool compound, struct mem_cgroup *from, struct mem_cgroup *to)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM(ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM(ubh)}(hmem_cgroup_move_accounth]h)}(hmem_cgroup_move_accounth]hmem_cgroup_move_account}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM(ubj )}(hT(struct folio *folio, bool compound, struct mem_cgroup *from, struct mem_cgroup *to)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_move_accountasbuh1hhjubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjBhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h bool compoundh](j)}(hj7h]hbool}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hcompoundh]hcompound}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *fromh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j0c.mem_cgroup_move_accountasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfromh]hfrom}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mem_cgroup *toh](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj,modnameN classnameNjijl)}jo]j0c.mem_cgroup_move_accountasbuh1hhjubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjVhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(htoh]hto}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM2hjhhubj)}(hhh]j6)}(hmove account of the folioh]hmove account of the folio}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM'hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct folio *folio`` The folio. ``bool compound`` charge the page as compound or small page ``struct mem_cgroup *from`` mem_cgroup which the folio is moved from. ``struct mem_cgroup *to`` mem_cgroup which the folio is moved to. **from** != **to**. **Description** The folio must be locked and not on the LRU. This function doesn't do "charge" to new cgroup and doesn't do "uncharge" from old cgroup.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM+hjubj)}(hhh](j)}(h#``struct folio *folio`` The folio. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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.chM(hjubj)}(hhh]j6)}(h The folio.h]h The folio.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h<``bool compound`` charge the page as compound or small page h](j)}(h``bool compound``h]j<)}(hjh]h bool compound}(hhhj hhhNhNubah}(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.chM)hjubj)}(hhh]j6)}(h)charge the page as compound or small pageh]h)charge the page as compound or small page}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(hF``struct mem_cgroup *from`` mem_cgroup which the folio is moved from. h](j)}(h``struct mem_cgroup *from``h]j<)}(hjAh]hstruct mem_cgroup *from}(hhhjChhhNhNubah}(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]j6)}(h)mem_cgroup which the folio is moved from.h]h)mem_cgroup which the folio is moved from.}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVhM*hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM*hjubj)}(hV``struct mem_cgroup *to`` mem_cgroup which the folio is moved to. **from** != **to**. h](j)}(h``struct mem_cgroup *to``h]j<)}(hjzh]hstruct mem_cgroup *to}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM+hjtubj)}(hhh]j6)}(h;mem_cgroup which the folio is moved to. **from** != **to**.h](h(mem_cgroup which the folio is moved to. }(h(mem_cgroup which the folio is moved to. hjhhhNhNubjv)}(h**from**h]hfrom}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh != }(h != hjhhhNhNubjv)}(h**to**h]hto}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM-hjubj6)}(h,The folio must be locked and not on the LRU.h]h,The folio must be locked and not on the LRU.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM-hjubj6)}(hZThis function doesn't do "charge" to new cgroup and doesn't do "uncharge" from old cgroup.h]hfThis function doesn’t do “charge” to new cgroup and doesn’t do “uncharge” from old cgroup.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_mctgt_type (C function)c.get_mctgt_typehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hyenum mc_target_type get_mctgt_type (struct vm_area_struct *vma, unsigned long addr, pte_t ptent, union mc_target *target)h]h)}(hxenum mc_target_type get_mctgt_type(struct vm_area_struct *vma, unsigned long addr, pte_t ptent, union mc_target *target)h](j.)}(hjh]henum}(hhhj/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 }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj<hMubh)}(hhh]h)}(hmc_target_typeh]hmc_target_type}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjPmodnameN classnameNjijl)}jo]jr)}jeget_mctgt_typesbc.get_mctgt_typeasbuh1hhj+hhhj<hMubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj<hMubh)}(hget_mctgt_typeh]h)}(hjlh]hget_mctgt_type}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj<hMubj )}(hV(struct vm_area_struct *vma, unsigned long addr, pte_t ptent, union mc_target *target)h](j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jjc.get_mctgt_typeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hvmah]hvma}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(haddrh]haddr}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pte_t ptenth](h)}(hhh]h)}(hpte_th]hpte_t}(hhhj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjbmodnameN classnameNjijl)}jo]jjc.get_mctgt_typeasbuh1hhjYubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hptenth]hptent}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunion mc_target *targeth](j.)}(hunionh]hunion}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mc_targeth]h mc_target}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jjc.get_mctgt_typeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(htargeth]htarget}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj+hhhj<hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj<hMubah}(h]j"ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj$hhubj)}(hhh]j6)}(h get target type of moving chargeh]h get target type of moving charge}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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&]j1j,j2j@j3j@j4uh1hhhhj~ehNhNubjl)}(hX-**Parameters** ``struct vm_area_struct *vma`` the vma the pte to be checked belongs ``unsigned long addr`` the address corresponding to the pte to be checked ``pte_t ptent`` the pte to be checked ``union mc_target *target`` the pointer the target page or swap ent will be stored(can be NULL) **Context** Called with pte lock held. **Return** * MC_TARGET_NONE - If the pte is not a target for move charge. * MC_TARGET_PAGE - If the page corresponding to this pte is a target for move charge. If **target** is not NULL, the folio is stored in target->folio with extra refcnt taken (Caller should release it). * MC_TARGET_SWAP - If the swap entry corresponding to this pte is a target for charge migration. If **target** is not NULL, the entry is stored in target->ent. * MC_TARGET_DEVICE - Like MC_TARGET_PAGE but page is device memory and thus not on the lru. For now such page is charged like a regular page would be as it is just special memory taking the place of a regular page. See Documentations/vm/hmm.txt and include/linux/hmm.hh](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj)}(hhh](j)}(hE``struct vm_area_struct *vma`` the vma the pte to be checked belongs h](j)}(h``struct vm_area_struct *vma``h]j<)}(hjih]hstruct vm_area_struct *vma}(hhhjkhhhNhNubah}(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.chMhjcubj)}(hhh]j6)}(h%the vma the pte to be checked belongsh]h%the vma the pte to be checked belongs}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubj)}(hJ``unsigned long addr`` the address corresponding to the pte to be checked h](j)}(h``unsigned long addr``h]j<)}(hjh]hunsigned long addr}(hhhjhhhNhNubah}(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]j6)}(h2the address corresponding to the pte to be checkedh]h2the address corresponding to the pte to be checked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubj)}(h&``pte_t ptent`` the pte to be checked h](j)}(h``pte_t ptent``h]j<)}(hjh]h pte_t ptent}(hhhjhhhNhNubah}(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]j6)}(hthe pte to be checkedh]hthe pte to be checked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubj)}(h```union mc_target *target`` the pointer the target page or swap ent will be stored(can be NULL) h](j)}(h``union mc_target *target``h]j<)}(hjh]hunion mc_target *target}(hhhjhhhNhNubah}(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]j6)}(hCthe pointer the target page or swap ent will be stored(can be NULL)h]hCthe pointer the target page or swap ent will be stored(can be NULL)}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubj6)}(h **Context**h]jv)}(hjOh]hContext}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj6)}(hCalled with pte lock held.h]hCalled with pte lock held.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubj6)}(h **Return**h]jv)}(hjvh]hReturn}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjtubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjDubjx)}(hhh](jx)}(hfolio with extra refcnt taken (Caller should release it).h]j6)}(hMC_TARGET_PAGE - If the page corresponding to this pte is a target for move charge. If **target** is not NULL, the folio is stored in target->folio with extra refcnt taken (Caller should release it).h](hWMC_TARGET_PAGE - If the page corresponding to this pte is a target for move charge. If }(hWMC_TARGET_PAGE - If the page corresponding to this pte is a target for move charge. If hjhhhNhNubjv)}(h **target**h]htarget}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhf is not NULL, the folio is stored in target->folio with extra refcnt taken (Caller should release it).}(hf is not NULL, the folio is stored in target->folio with extra refcnt taken (Caller should release it).hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hMC_TARGET_SWAP - If the swap entry corresponding to this pte is a target for charge migration. If **target** is not NULL, the entry is stored in target->ent.h]j6)}(hMC_TARGET_SWAP - If the swap entry corresponding to this pte is a target for charge migration. If **target** is not NULL, the entry is stored in target->ent.h](hcMC_TARGET_SWAP - If the swap entry corresponding to this pte is a target for charge migration. If }(hcMC_TARGET_SWAP - If the swap entry corresponding to this pte is a target for charge migration. If hjhhhNhNubjv)}(h **target**h]htarget}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh1 is not NULL, the entry is stored in target->ent.}(h1 is not NULL, the entry is stored in target->ent.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hX MC_TARGET_DEVICE - Like MC_TARGET_PAGE but page is device memory and thus not on the lru. For now such page is charged like a regular page would be as it is just special memory taking the place of a regular page. See Documentations/vm/hmm.txt and include/linux/hmm.hh]j6)}(hX MC_TARGET_DEVICE - Like MC_TARGET_PAGE but page is device memory and thus not on the lru. For now such page is charged like a regular page would be as it is just special memory taking the place of a regular page. See Documentations/vm/hmm.txt and include/linux/hmm.hh]hX MC_TARGET_DEVICE - Like MC_TARGET_PAGE but page is device memory and thus not on the lru. For now such page is charged like a regular page would be as it is just special memory taking the place of a regular page. See Documentations/vm/hmm.txt and include/linux/hmm.h}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,mem_cgroup_calculate_protection (C function)!c.mem_cgroup_calculate_protectionhNtauh1hhj~ehhhNhNubh)}(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}(hhhj@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 }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjNhM ubh)}(hmem_cgroup_calculate_protectionh]h)}(hmem_cgroup_calculate_protectionh]hmem_cgroup_calculate_protection}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjNhM ubj )}(h3(struct mem_cgroup *root, struct mem_cgroup *memcg)h](j )}(hstruct mem_cgroup *rooth](j.)}(hj1h]hstruct}(hhhj}hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjyubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejcsb!c.mem_cgroup_calculate_protectionasbuh1hhjyubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjyubh)}(hrooth]hroot}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubj )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j!c.mem_cgroup_calculate_protectionasbuh1hhjubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj9hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjuubeh}(h]h ]h"]h$]h&]jj uh1j hj<hhhjNhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjNhM ubah}(h]j3ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj5hhubj)}(hhh]j6)}(h2check if memory consumption is in the normal rangeh]h2check if memory consumption is in the normal range}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjNhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(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<)}(hjh]hstruct mem_cgroup *root}(hhhjhhhNhNubah}(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.chM hjubj)}(hhh]j6)}(h.the top ancestor of the sub-tree being checkedh]h.the top ancestor of the sub-tree being checked}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h8``struct mem_cgroup *memcg`` the memory cgroup to check h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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]j6)}(hthe memory cgroup to checkh]hthe memory cgroup to check}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj&h]h Description}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(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}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj?ubj)}(hhh]j6)}(h7of a top-down tree iteration, not for isolated queries.h]h7of a top-down tree iteration, not for isolated queries.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjRubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj<ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*mem_cgroup_hugetlb_try_charge (C function)c.mem_cgroup_hugetlb_try_chargehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hVint mem_cgroup_hugetlb_try_charge (struct mem_cgroup *memcg, gfp_t gfp, long nr_pages)h]h)}(hUint mem_cgroup_hugetlb_try_charge(struct mem_cgroup *memcg, gfp_t gfp, long nr_pages)h](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM^ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubh)}(hmem_cgroup_hugetlb_try_chargeh]h)}(hmem_cgroup_hugetlb_try_chargeh]hmem_cgroup_hugetlb_try_charge}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM^ubj )}(h4(struct mem_cgroup *memcg, gfp_t gfp, long nr_pages)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mem_cgroup_hugetlb_try_chargeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmemcgh]hmemcg}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjJmodnameN classnameNjijl)}jo]j c.mem_cgroup_hugetlb_try_chargeasbuh1hhjAubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hgfph]hgfp}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h long nr_pagesh](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM^ubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMmhjhhubj)}(hhh]j6)}(h+try to charge the memcg for a hugetlb folioh]h+try to charge the memcg for a hugetlb folio}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct mem_cgroup *memcg`` memcg to charge. ``gfp_t gfp`` reclaim mode. ``long nr_pages`` number of pages to charge. **Description** This function is called when allocating a huge page folio to determine if the memcg has the capacity for it. It does not commit the charge yet, as the hugetlb folio itself has not been obtained from the hugetlb pool. Once we have obtained the hugetlb folio, we can call mem_cgroup_commit_charge() to commit the charge. If we fail to obtain the folio, we should instead call mem_cgroup_cancel_charge() to undo the effect of try_charge(). Returns 0 on success. Otherwise, an error code is returned.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMahjubj)}(hhh](j)}(h.``struct mem_cgroup *memcg`` memcg to charge. h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjh]hstruct mem_cgroup *memcg}(hhhjhhhNhNubah}(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.chM^hjubj)}(hhh]j6)}(hmemcg to charge.h]hmemcg to charge.}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj*hM^hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM^hj ubj)}(h``gfp_t gfp`` reclaim mode. h](j)}(h ``gfp_t gfp``h]j<)}(hjNh]h gfp_t gfp}(hhhjPhhhNhNubah}(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.chM_hjHubj)}(hhh]j6)}(h reclaim mode.h]h reclaim mode.}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchM_hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM_hj ubj)}(h-``long nr_pages`` number of pages to charge. h](j)}(h``long nr_pages``h]j<)}(hjh]h long nr_pages}(hhhjhhhNhNubah}(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.chM`hjubj)}(hhh]j6)}(hnumber of pages to charge.h]hnumber of pages to charge.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMbhjubj6)}(hThis function is called when allocating a huge page folio to determine if the memcg has the capacity for it. It does not commit the charge yet, as the hugetlb folio itself has not been obtained from the hugetlb pool.h]hThis function is called when allocating a huge page folio to determine if the memcg has the capacity for it. It does not commit the charge yet, as the hugetlb folio itself has not been obtained from the hugetlb pool.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMbhjubj6)}(hOnce we have obtained the hugetlb folio, we can call mem_cgroup_commit_charge() to commit the charge. If we fail to obtain the folio, we should instead call mem_cgroup_cancel_charge() to undo the effect of try_charge().h]hOnce we have obtained the hugetlb folio, we can call mem_cgroup_commit_charge() to commit the charge. If we fail to obtain the folio, we should instead call mem_cgroup_cancel_charge() to undo the effect of try_charge().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMfhjubj6)}(h;Returns 0 on success. Otherwise, an error code is returned.h]h;Returns 0 on success. Otherwise, an error code is returned.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+mem_cgroup_swapin_charge_folio (C function) c.mem_cgroup_swapin_charge_foliohNtauh1hhj~ehhhNhNubh)}(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}(hhhj%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 }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMubh)}(hmem_cgroup_swapin_charge_folioh]h)}(hmem_cgroup_swapin_charge_folioh]hmem_cgroup_swapin_charge_folio}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj3hMubj )}(hI(struct folio *folio, struct mm_struct *mm, gfp_t gfp, swp_entry_t entry)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjbhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj^ubj)}(h h]h }(hhhjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejHsb c.mem_cgroup_swapin_charge_folioasbuh1hhj^ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj^ubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.mem_cgroup_swapin_charge_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmmh]hmm}(hhhj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjImodnameN classnameNjijl)}jo]j c.mem_cgroup_swapin_charge_folioasbuh1hhj@ubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hgfph]hgfp}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubj )}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.mem_cgroup_swapin_charge_folioasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hentryh]hentry}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjZubeh}(h]h ]h"]h$]h&]jj uh1j hj!hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj3hMubah}(h]jah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubj)}(hhh]j6)}(h*Charge a newly allocated folio for swapin.h]h*Charge a newly allocated folio for swapin.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj)}(hhh](j)}(h)``struct folio *folio`` folio to charge. h](j)}(h``struct folio *folio``h]j<)}(hj'h]hstruct folio *folio}(hhhj)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]j6)}(hfolio to charge.h]hfolio to charge.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h2``struct mm_struct *mm`` mm context of the victim h](j)}(h``struct mm_struct *mm``h]j<)}(hj`h]hstruct mm_struct *mm}(hhhjbhhhNhNubah}(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.chMhjZubj)}(hhh]j6)}(hmm context of the victimh]hmm context of the victim}(hj{hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubj)}(h``gfp_t gfp`` reclaim mode h](j)}(h ``gfp_t gfp``h]j<)}(hjh]h gfp_t gfp}(hhhjhhhNhNubah}(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]j6)}(h reclaim modeh]h reclaim mode}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``swp_entry_t entry`` swap entry for which the folio is allocated h](j)}(h``swp_entry_t entry``h]j<)}(hjh]hswp_entry_t entry}(hhhjhhhNhNubah}(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]j6)}(h+swap entry for which the folio is allocatedh]h+swap entry for which the folio is allocated}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(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% hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubj6)}(h;Returns 0 on success. Otherwise, an error code is returned.h]h;Returns 0 on success. Otherwise, an error code is returned.}(hj4 hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%mem_cgroup_replace_folio (C function)c.mem_cgroup_replace_foliohNtauh1hhj~ehhhNhNubh)}(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}(hhhja 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 }(hhhjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] hhhjo hM@ubh)}(hmem_cgroup_replace_folioh]h)}(hmem_cgroup_replace_folioh]hmem_cgroup_replace_folio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj] hhhjo hM@ubj )}(h&(struct folio *old, struct folio *new)h](j )}(hstruct folio *oldh](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jej sbc.mem_cgroup_replace_folioasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj= )}(hj@ h]h*}(hhhj hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj ubh)}(holdh]hold}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubj )}(hstruct folio *newh](j.)}(hj1h]hstruct}(hhhj!hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj !ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj !ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj.!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+!ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0!modnameN classnameNjijl)}jo]j c.mem_cgroup_replace_folioasbuh1hhj !ubj)}(h h]h }(hhhjL!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj !ubj= )}(hj@ h]h*}(hhhjZ!hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj !ubh)}(hnewh]hnew}(hhhjg!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj !ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj ubeh}(h]h ]h"]h$]h&]jj uh1j hj] hhhjo hM@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjY hhhjo hM@ubah}(h]jT ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMIhjV hhubj)}(hhh]j6)}(hCharge a folio's replacement.h]hCharge a folio’s replacement.}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM?hj!hhubah}(h]h ]h"]h$]h&]uh1jhjV hhhjo hM@ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j!j3j!j4uh1hhhhj~ehNhNubjl)}(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. This is only used by the page cache (in replace_page_cache_folio()). Both folios must be locked, **new->mapping** must be set up.h](j6)}(h**Parameters**h]jv)}(hj!h]h Parameters}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMChj!ubj)}(hhh](j)}(h3``struct folio *old`` Currently circulating folio. h](j)}(h``struct folio *old``h]j<)}(hj!h]hstruct folio *old}(hhhj!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]j6)}(hCurrently circulating folio.h]hCurrently circulating folio.}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!hM@hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM@hj!ubj)}(h)``struct folio *new`` Replacement folio. h](j)}(h``struct folio *new``h]j<)}(hj "h]hstruct folio *new}(hhhj"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.chMAhj"ubj)}(hhh]j6)}(hReplacement folio.h]hReplacement folio.}(hj'"hj%"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj!"hMAhj""ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj!"hMAhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj6)}(h**Description**h]jv)}(hjG"h]h Description}(hhhjI"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjE"ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMChj!ubj6)}(hCharge **new** as a replacement folio for **old**. **old** will be uncharged upon free. This is only used by the page cache (in replace_page_cache_folio()).h](hCharge }(hCharge hj]"hhhNhNubjv)}(h**new**h]hnew}(hhhjf"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]"ubh as a replacement folio for }(h as a replacement folio for hj]"hhhNhNubjv)}(h**old**h]hold}(hhhjy"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]"ubh. }(h. hj]"hhhNhNubjv)}(h**old**h]hold}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]"ubhb will be uncharged upon free. This is only used by the page cache (in replace_page_cache_folio()).}(hb will be uncharged upon free. This is only used by the page cache (in replace_page_cache_folio()).hj]"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMChj!ubj6)}(hmapping** must be set up.h](hBoth folios must be locked, }(hBoth folios must be locked, hj"hhhNhNubjv)}(h**new->mapping**h]h new->mapping}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"ubh must be set up.}(h must be set up.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMGhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_migrate (C function)c.mem_cgroup_migratehNtauh1hhj~ehhhNhNubh)}(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}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hMrubh)}(hmem_cgroup_migrateh]h)}(hmem_cgroup_migrateh]hmem_cgroup_migrate}(hhhj #hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj"hMrubj )}(h&(struct folio *old, struct folio *new)h](j )}(hstruct folio *oldh](j.)}(hj1h]hstruct}(hhhj&#hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj"#ubj)}(h h]h }(hhhj3#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"#ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjD#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjA#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjF#modnameN classnameNjijl)}jo]jr)}jej #sbc.mem_cgroup_migrateasbuh1hhj"#ubj)}(h h]h }(hhhjd#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"#ubj= )}(hj@ h]h*}(hhhjr#hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj"#ubh)}(holdh]hold}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj#ubj )}(hstruct folio *newh](j.)}(hj1h]hstruct}(hhhj#hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj#ubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#modnameN classnameNjijl)}jo]j`#c.mem_cgroup_migrateasbuh1hhj#ubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj= )}(hj@ h]h*}(hhhj#hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj#ubh)}(hnewh]hnew}(hhhj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj#ubeh}(h]h ]h"]h$]h&]jj uh1j hj"hhhj"hMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj"hMrubah}(h]j"ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM{hj"hhubj)}(hhh]j6)}(h6Transfer the memcg data from the old to the new folio.h]h6Transfer the memcg data from the old to the new folio.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMqhj$hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hMrubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2$j3j2$j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj<$h]h Parameters}(hhhj>$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:$ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMuhj6$ubj)}(hhh](j)}(h3``struct folio *old`` Currently circulating folio. h](j)}(h``struct folio *old``h]j<)}(hj[$h]hstruct folio *old}(hhhj]$hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjY$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMrhjU$ubj)}(hhh]j6)}(hCurrently circulating folio.h]hCurrently circulating folio.}(hjv$hjt$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjp$hMrhjq$ubah}(h]h ]h"]h$]h&]uh1jhjU$ubeh}(h]h ]h"]h$]h&]uh1jhjp$hMrhjR$ubj)}(h)``struct folio *new`` Replacement folio. h](j)}(h``struct folio *new``h]j<)}(hj$h]hstruct folio *new}(hhhj$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.chMshj$ubj)}(hhh]j6)}(hReplacement folio.h]hReplacement folio.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hMshj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMshjR$ubeh}(h]h ]h"]h$]h&]uh1jhj6$ubj6)}(h**Description**h]jv)}(hj$h]h Description}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMuhj6$ubj6)}(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.}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMuhj6$ubj6)}(hmapping** must be set up.h](hBoth folios must be locked, }(hBoth folios must be locked, hj$hhhNhNubjv)}(h**new->mapping**h]h new->mapping}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubh must be set up.}(h must be set up.hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMyhj6$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mem_cgroup_charge_skmem (C function)c.mem_cgroup_charge_skmemhNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhj7%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3%hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjE%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3%hhhjD%hMubh)}(hmem_cgroup_charge_skmemh]h)}(hmem_cgroup_charge_skmemh]hmem_cgroup_charge_skmem}(hhhjW%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjS%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3%hhhjD%hMubj )}(hA(struct mem_cgroup *memcg, unsigned int nr_pages, gfp_t gfp_mask)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhjs%hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjo%ubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo%ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj%modnameN classnameNjijl)}jo]jr)}jejY%sbc.mem_cgroup_charge_skmemasbuh1hhjo%ubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo%ubj= )}(hj@ h]h*}(hhhj%hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjo%ubh)}(hmemcgh]hmemcg}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjk%ubj )}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hinth]hint}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hnr_pagesh]hnr_pages}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjk%ubj )}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhj9&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj;&modnameN classnameNjijl)}jo]j%c.mem_cgroup_charge_skmemasbuh1hhj2&ubj)}(h h]h }(hhhjW&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2&ubh)}(hgfp_maskh]hgfp_mask}(hhhje&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjk%ubeh}(h]h ]h"]h$]h&]jj uh1j hj3%hhhjD%hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/%hhhjD%hMubah}(h]j*%ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj,%hhubj)}(hhh]j6)}(hcharge socket memoryh]hcharge socket memory}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj,%hhhjD%hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j&j3j&j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hhhj&hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&ubj)}(hhh](j)}(h-``struct mem_cgroup *memcg`` memcg to charge h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hj&h]hstruct mem_cgroup *memcg}(hhhj&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]j6)}(hmemcg to chargeh]hmemcg to charge}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubj)}(h4``unsigned int nr_pages`` number of pages to charge h](j)}(h``unsigned int nr_pages``h]j<)}(hj 'h]hunsigned int nr_pages}(hhhj '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]j6)}(hnumber of pages to chargeh]hnumber of pages to charge}(hj%'hj#'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj'hMhj 'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj&ubj)}(h ``gfp_t gfp_mask`` reclaim mode h](j)}(h``gfp_t gfp_mask``h]j<)}(hjC'h]hgfp_t gfp_mask}(hhhjE'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]j6)}(h reclaim modeh]h reclaim mode}(hj^'hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX'hMhjY'ubah}(h]h ]h"]h$]h&]uh1jhj='ubeh}(h]h ]h"]h$]h&]uh1jhjX'hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubj6)}(h**Description**h]jv)}(hj~'h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|'ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&ubj6)}(hCharges **nr_pages** to **memcg**. Returns ``true`` if the charge fit within **memcg**'s configured limit, ``false`` if it doesn't.h](hCharges }(hCharges hj'hhhNhNubjv)}(h **nr_pages**h]hnr_pages}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh to }(h to hj'hhhNhNubjv)}(h **memcg**h]hmemcg}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh . Returns }(h . Returns hj'hhhNhNubj<)}(h``true``h]htrue}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubh if the charge fit within }(h if the charge fit within hj'hhhNhNubjv)}(h **memcg**h]hmemcg}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj'ubh’s configured limit, }(h's configured limit, hj'hhhNhNubj<)}(h ``false``h]hfalse}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'ubh if it doesn’t.}(h if it doesn't.hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&mem_cgroup_uncharge_skmem (C function)c.mem_cgroup_uncharge_skmemhNtauh1hhj~ehhhNhNubh)}(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}(hhhj#(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 }(hhhj2(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj1(hMubh)}(hmem_cgroup_uncharge_skmemh]h)}(hmem_cgroup_uncharge_skmemh]hmem_cgroup_uncharge_skmem}(hhhjD(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj1(hMubj )}(h1(struct mem_cgroup *memcg, unsigned int nr_pages)h](j )}(hstruct mem_cgroup *memcgh](j.)}(hj1h]hstruct}(hhhj`(hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj\(ubj)}(h h]h }(hhhjm(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\(ubh)}(hhh]h)}(h mem_cgrouph]h mem_cgroup}(hhhj~(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{(ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jr)}jejF(sbc.mem_cgroup_uncharge_skmemasbuh1hhj\(ubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\(ubj= )}(hj@ h]h*}(hhhj(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj\(ubh)}(hmemcgh]hmemcg}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjX(ubj )}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hinth]hint}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hnr_pagesh]hnr_pages}(hhhj )hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjX(ubeh}(h]h ]h"]h$]h&]jj uh1j hj(hhhj1(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj1(hMubah}(h]j(ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj(hhubj)}(hhh]j6)}(huncharge socket memoryh]huncharge socket memory}(hj7)hj5)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj2)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj1(hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jM)j3jM)j4uh1hhhhj~ehNhNubjl)}(hy**Parameters** ``struct mem_cgroup *memcg`` memcg to uncharge ``unsigned int nr_pages`` number of pages to unchargeh](j6)}(h**Parameters**h]jv)}(hjW)h]h Parameters}(hhhjY)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU)ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjQ)ubj)}(hhh](j)}(h/``struct mem_cgroup *memcg`` memcg to uncharge h](j)}(h``struct mem_cgroup *memcg``h]j<)}(hjv)h]hstruct mem_cgroup *memcg}(hhhjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjt)ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjp)ubj)}(hhh]j6)}(hmemcg to unchargeh]hmemcg to uncharge}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhjp)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjm)ubj)}(h5``unsigned int nr_pages`` number of pages to unchargeh](j)}(h``unsigned int nr_pages``h]j<)}(hj)h]hunsigned int nr_pages}(hhhj)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]j6)}(hnumber of pages to unchargeh]hnumber of pages to uncharge}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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)hMhjm)ubeh}(h]h ]h"]h$]h&]uh1jhjQ)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmem_cgroup_swapout (C function)c.mem_cgroup_swapouthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h@void mem_cgroup_swapout (struct folio *folio, swp_entry_t entry)h]h)}(h?void mem_cgroup_swapout(struct folio *folio, swp_entry_t entry)h](j)}(hvoidh]hvoid}(hhhj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMFubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hMFubh)}(hmem_cgroup_swapouth]h)}(hmem_cgroup_swapouth]hmem_cgroup_swapout}(hhhj**hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj*hMFubj )}(h((struct folio *folio, swp_entry_t entry)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjF*hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjB*ubj)}(h h]h }(hhhjS*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB*ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjd*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja*ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjf*modnameN classnameNjijl)}jo]jr)}jej,*sbc.mem_cgroup_swapoutasbuh1hhjB*ubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB*ubj= )}(hj@ h]h*}(hhhj*hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjB*ubh)}(hfolioh]hfolio}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>*ubj )}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj*modnameN classnameNjijl)}jo]j*c.mem_cgroup_swapoutasbuh1hhj*ubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hentryh]hentry}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>*ubeh}(h]h ]h"]h$]h&]jj uh1j hj*hhhj*hMFubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj*hMFubah}(h]j)ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMKhj)hhubj)}(hhh]j6)}(htransfer a memsw charge to swaph]htransfer a memsw charge to swap}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMEhj+hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj*hMFubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j*+j3j*+j4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct folio *folio`` folio whose memsw charge to transfer ``swp_entry_t entry`` swap entry to move the charge to **Description** Transfer the memsw charge of **folio** to **entry**.h](j6)}(h**Parameters**h]jv)}(hj4+h]h Parameters}(hhhj6+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2+ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMIhj.+ubj)}(hhh](j)}(h=``struct folio *folio`` folio whose memsw charge to transfer h](j)}(h``struct folio *folio``h]j<)}(hjS+h]hstruct folio *folio}(hhhjU+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.chMFhjM+ubj)}(hhh]j6)}(h$folio whose memsw charge to transferh]h$folio whose memsw charge to transfer}(hjn+hjl+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjh+hMFhji+ubah}(h]h ]h"]h$]h&]uh1jhjM+ubeh}(h]h ]h"]h$]h&]uh1jhjh+hMFhjJ+ubj)}(h7``swp_entry_t entry`` swap entry to move the charge to h](j)}(h``swp_entry_t entry``h]j<)}(hj+h]hswp_entry_t entry}(hhhj+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.chMGhj+ubj)}(hhh]j6)}(h swap entry to move the charge toh]h swap entry to move the charge to}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMGhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMGhjJ+ubeh}(h]h ]h"]h$]h&]uh1jhj.+ubj6)}(h**Description**h]jv)}(hj+h]h Description}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMIhj.+ubj6)}(h4Transfer the memsw charge of **folio** to **entry**.h](hTransfer the memsw charge of }(hTransfer the memsw charge of hj+hhhNhNubjv)}(h **folio**h]hfolio}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh to }(h to hj+hhhNhNubjv)}(h **entry**h]hentry}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubh.}(hjyhj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMIhj.+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)__mem_cgroup_try_charge_swap (C function)c.__mem_cgroup_try_charge_swaphNtauh1hhj~ehhhNhNubh)}(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}(hhhj2,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 }(hhhjA,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.,hhhj@,hMubh)}(h__mem_cgroup_try_charge_swaph]h)}(h__mem_cgroup_try_charge_swaph]h__mem_cgroup_try_charge_swap}(hhhjS,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.,hhhj@,hMubj )}(h((struct folio *folio, swp_entry_t entry)h](j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjo,hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjk,ubj)}(h h]h }(hhhj|,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk,ubh)}(hhh]h)}(hfolioh]hfolio}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj,modnameN classnameNjijl)}jo]jr)}jejU,sbc.__mem_cgroup_try_charge_swapasbuh1hhjk,ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk,ubj= )}(hj@ h]h*}(hhhj,hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjk,ubh)}(hfolioh]hfolio}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjg,ubj )}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hhhj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj,modnameN classnameNjijl)}jo]j,c.__mem_cgroup_try_charge_swapasbuh1hhj,ubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hentryh]hentry}(hhhj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjg,ubeh}(h]h ]h"]h$]h&]jj uh1j hj.,hhhj@,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*,hhhj@,hMubah}(h]j%,ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj',hhubj)}(hhh]j6)}(h#try charging swap space for a folioh]h#try charging swap space for a folio}(hj=-hj;-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj8-hhubah}(h]h ]h"]h$]h&]uh1jhj',hhhj@,hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jS-j3jS-j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj]-h]h Parameters}(hhhj_-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[-ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjW-ubj)}(hhh](j)}(h2``struct folio *folio`` folio being added to swap h](j)}(h``struct folio *folio``h]j<)}(hj|-h]hstruct folio *folio}(hhhj~-hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjz-ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjv-ubj)}(hhh]j6)}(hfolio being added to swaph]hfolio being added to swap}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjv-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjs-ubj)}(h+``swp_entry_t entry`` swap entry to charge h](j)}(h``swp_entry_t entry``h]j<)}(hj-h]hswp_entry_t entry}(hhhj-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]j6)}(hswap entry to chargeh]hswap entry to charge}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjs-ubeh}(h]h ]h"]h$]h&]uh1jhjW-ubj6)}(h**Description**h]jv)}(hj-h]h Description}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjW-ubj6)}(h@Try to charge **folio**'s memcg for the swap space at **entry**.h](hTry to charge }(hTry to charge hj.hhhNhNubjv)}(h **folio**h]hfolio}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh!’s memcg for the swap space at }(h's memcg for the swap space at hj.hhhNhNubjv)}(h **entry**h]hentry}(hhhj".hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubh.}(hjyhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjW-ubj6)}(h)Returns 0 on success, -ENOMEM on failure.h]h)Returns 0 on success, -ENOMEM on failure.}(hj=.hj;.hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjW-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'__mem_cgroup_uncharge_swap (C function)c.__mem_cgroup_uncharge_swaphNtauh1hhj~ehhhNhNubh)}(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}(hhhjj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf.hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMubj)}(h h]h }(hhhjy.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf.hhhjx.hMubh)}(h__mem_cgroup_uncharge_swaph]h)}(h__mem_cgroup_uncharge_swaph]h__mem_cgroup_uncharge_swap}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjf.hhhjx.hMubj )}(h*(swp_entry_t entry, unsigned int nr_pages)h](j )}(hswp_entry_t entryh](h)}(hhh]h)}(h swp_entry_th]h swp_entry_t}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj.modnameN classnameNjijl)}jo]jr)}jej.sbc.__mem_cgroup_uncharge_swapasbuh1hhj.ubj)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hentryh]hentry}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.ubj )}(hunsigned int nr_pagesh](j)}(hunsignedh]hunsigned}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hinth]hint}(hhhj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hnr_pagesh]hnr_pages}(hhhj)/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj.ubeh}(h]h ]h"]h$]h&]jj uh1j hjf.hhhjx.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjb.hhhjx.hMubah}(h]j].ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhj_.hhubj)}(hhh]j6)}(huncharge swap spaceh]huncharge swap space}(hjV/hjT/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjQ/hhubah}(h]h ]h"]h$]h&]uh1jhj_.hhhjx.hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jl/j3jl/j4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``swp_entry_t entry`` swap entry to uncharge ``unsigned int nr_pages`` the amount of swap space to unchargeh](j6)}(h**Parameters**h]jv)}(hjv/h]h Parameters}(hhhjx/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt/ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chMhjp/ubj)}(hhh](j)}(h-``swp_entry_t entry`` swap entry to uncharge h](j)}(h``swp_entry_t entry``h]j<)}(hj/h]hswp_entry_t entry}(hhhj/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]j6)}(hswap entry to unchargeh]hswap entry to uncharge}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubj)}(h>``unsigned int nr_pages`` the amount of swap space to unchargeh](j)}(h``unsigned int nr_pages``h]j<)}(hj/h]hunsigned int nr_pages}(hhhj/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]j6)}(h$the amount of swap space to unchargeh]h$the amount of swap space to uncharge}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/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/hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjp/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!obj_cgroup_may_zswap (C function)c.obj_cgroup_may_zswaphNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h4bool obj_cgroup_may_zswap (struct obj_cgroup *objcg)h]h)}(h3bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)h](j)}(hj7h]hbool}(hhhj(0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$0hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hhhj60hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$0hhhj50hM ubh)}(hobj_cgroup_may_zswaph]h)}(hobj_cgroup_may_zswaph]hobj_cgroup_may_zswap}(hhhjH0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$0hhhj50hM ubj )}(h(struct obj_cgroup *objcg)h]j )}(hstruct obj_cgroup *objcgh](j.)}(hj1h]hstruct}(hhhjd0hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj`0ubj)}(h h]h }(hhhjq0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`0ubh)}(hhh]h)}(h obj_cgrouph]h obj_cgroup}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0modnameN classnameNjijl)}jo]jr)}jejJ0sbc.obj_cgroup_may_zswapasbuh1hhj`0ubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`0ubj= )}(hj@ h]h*}(hhhj0hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj`0ubh)}(hobjcgh]hobjcg}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj\0ubah}(h]h ]h"]h$]h&]jj uh1j hj$0hhhj50hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj 0hhhj50hM ubah}(h]j0ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj0hhubj)}(hhh]j6)}(hcheck if this cgroup can zswaph]hcheck if this cgroup can zswap}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj0hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj50hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j1j3j1j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj 1h]h Parameters}(hhhj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubj)}(hhh]j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j<)}(hj)1h]hstruct obj_cgroup *objcg}(hhhj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj'1ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj#1ubj)}(hhh]j6)}(hthe object cgrouph]hthe object cgroup}(hjD1hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>1hM hj?1ubah}(h]h ]h"]h$]h&]uh1jhj#1ubeh}(h]h ]h"]h$]h&]uh1jhj>1hM hj 1ubah}(h]h ]h"]h$]h&]uh1jhj1ubj6)}(h**Description**h]jv)}(hjd1h]h Description}(hhhjf1hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjb1ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubj6)}(h7Check if the hierarchical zswap limit has been reached.h]h7Check if the hierarchical zswap limit has been reached.}(hj|1hjz1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubj6)}(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.}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$obj_cgroup_charge_zswap (C function)c.obj_cgroup_charge_zswaphNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hDvoid obj_cgroup_charge_zswap (struct obj_cgroup *objcg, size_t size)h]h)}(hCvoid obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size)h](j)}(hvoidh]hvoid}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hM ubh)}(hobj_cgroup_charge_zswaph]h)}(hobj_cgroup_charge_zswaph]hobj_cgroup_charge_zswap}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhj1hM ubj )}(h'(struct obj_cgroup *objcg, size_t size)h](j )}(hstruct obj_cgroup *objcgh](j.)}(hj1h]hstruct}(hhhj1hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj1ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]h)}(h obj_cgrouph]h obj_cgroup}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj2modnameN classnameNjijl)}jo]jr)}jej1sbc.obj_cgroup_charge_zswapasbuh1hhj1ubj)}(h h]h }(hhhj32hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj= )}(hj@ h]h*}(hhhjA2hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj1ubh)}(hobjcgh]hobjcg}(hhhjN2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg2ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjl2modnameN classnameNjijl)}jo]j/2c.obj_cgroup_charge_zswapasbuh1hhjc2ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc2ubh)}(hsizeh]hsize}(hhhj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjc2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1ubeh}(h]h ]h"]h$]h&]jj uh1j hj1hhhj1hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhj1hM ubah}(h]j1ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj1hhubj)}(hhh]j6)}(h!charge compression backend memoryh]h!charge compression backend memory}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2j3j2j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj2h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj)}(hhh](j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j<)}(hj3h]hstruct obj_cgroup *objcg}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj)}(hhh]j6)}(hthe object cgrouph]hthe object cgroup}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hj2ubj)}(h*``size_t size`` size of compressed object h](j)}(h``size_t size``h]j<)}(hj;3h]h size_t size}(hhhj=3hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj93ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj53ubj)}(hhh]j6)}(hsize of compressed objecth]hsize of compressed object}(hjV3hjT3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjP3hM hjQ3ubah}(h]h ]h"]h$]h&]uh1jhj53ubeh}(h]h ]h"]h$]h&]uh1jhjP3hM hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubj6)}(h**Description**h]jv)}(hjv3h]h Description}(hhhjx3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjt3ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubj6)}(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.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&obj_cgroup_uncharge_zswap (C function)c.obj_cgroup_uncharge_zswaphNtauh1hhj~ehhhNhNubh)}(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}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM ubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hM ubh)}(hobj_cgroup_uncharge_zswaph]h)}(hobj_cgroup_uncharge_zswaph]hobj_cgroup_uncharge_zswap}(hhhj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hM ubj )}(h'(struct obj_cgroup *objcg, size_t size)h](j )}(hstruct obj_cgroup *objcgh](j.)}(hj1h]hstruct}(hhhj3hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj3ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]h)}(h obj_cgrouph]h obj_cgroup}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj4modnameN classnameNjijl)}jo]jr)}jej3sbc.obj_cgroup_uncharge_zswapasbuh1hhj3ubj)}(h h]h }(hhhj64hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj= )}(hj@ h]h*}(hhhjD4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj3ubh)}(hobjcgh]hobjcg}(hhhjQ4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjm4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj4ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjo4modnameN classnameNjijl)}jo]j24c.obj_cgroup_uncharge_zswapasbuh1hhjf4ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf4ubh)}(hsizeh]hsize}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubeh}(h]h ]h"]h$]h&]jj uh1j hj3hhhj3hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hM ubah}(h]j3ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj3hhubj)}(hhh]j6)}(h#uncharge compression backend memoryh]h#uncharge compression backend memory}(hj4hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j4j3j4j4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct obj_cgroup *objcg`` the object cgroup ``size_t size`` size of compressed object **Description** Uncharges zswap memory on page in.h](j6)}(h**Parameters**h]jv)}(hj4h]h Parameters}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj4ubj)}(hhh](j)}(h/``struct obj_cgroup *objcg`` the object cgroup h](j)}(h``struct obj_cgroup *objcg``h]j<)}(hj5h]hstruct obj_cgroup *objcg}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj5ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj4ubj)}(hhh]j6)}(hthe object cgrouph]hthe object cgroup}(hj 5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hM hj4ubj)}(h*``size_t size`` size of compressed object h](j)}(h``size_t size``h]j<)}(hj>5h]h size_t size}(hhhj@5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj<5ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj85ubj)}(hhh]j6)}(hsize of compressed objecth]hsize of compressed object}(hjY5hjW5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjS5hM hjT5ubah}(h]h ]h"]h$]h&]uh1jhj85ubeh}(h]h ]h"]h$]h&]uh1jhjS5hM hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubj6)}(h**Description**h]jv)}(hjy5h]h Description}(hhhj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjw5ubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj4ubj6)}(h"Uncharges zswap memory on page in.h]h"Uncharges zswap memory on page in.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/memcontrol.chM hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubjכ)}(h0#kernel-doc:: mm/memory-tiers.c (build warnings)h]h0#kernel-doc:: mm/memory-tiers.c (build warnings)}(hhhj5ubah}(h]h ]h"]h$]h&]jj uh1j֛hj~ehhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_recalc_inode (C function)c.shmem_recalc_inodehNtauh1hhj~ehhhNhNubh)}(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}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMubh)}(hshmem_recalc_inodeh]h)}(hshmem_recalc_inodeh]hshmem_recalc_inode}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj5hMubj )}(h1(struct inode *inode, long alloced, long swapped)h](j )}(hstruct inode *inodeh](j.)}(hj1h]hstruct}(hhhj 6hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj6ubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]h)}(hinodeh]hinode}(hhhj'6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$6ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj)6modnameN classnameNjijl)}jo]jr)}jej5sbc.shmem_recalc_inodeasbuh1hhj6ubj)}(h h]h }(hhhjG6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj= )}(hj@ h]h*}(hhhjU6hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6ubh)}(hinodeh]hinode}(hhhjb6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubj )}(h long allocedh](j)}(hlongh]hlong}(hhhj{6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw6ubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw6ubh)}(hallocedh]halloced}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubj )}(h long swappedh](j)}(hlongh]hlong}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hswappedh]hswapped}(hhhj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj6ubeh}(h]h ]h"]h$]h&]jj uh1j hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj5hMubah}(h]j5ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj5hhubj)}(hhh]j6)}(h'recalculate the block usage of an inodeh]h'recalculate the block usage of an inode}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j7j3j7j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj7h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj7ubj)}(hhh](j)}(h(``struct inode *inode`` inode to recalc h](j)}(h``struct inode *inode``h]j<)}(hj87h]hstruct inode *inode}(hhhj:7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj67ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj27ubj)}(hhh]j6)}(hinode to recalch]hinode to recalc}(hjS7hjQ7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjM7hMhjN7ubah}(h]h ]h"]h$]h&]uh1jhj27ubeh}(h]h ]h"]h$]h&]uh1jhjM7hMhj/7ubj)}(hB``long alloced`` the change in number of pages allocated to inode h](j)}(h``long alloced``h]j<)}(hjq7h]h long alloced}(hhhjs7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjo7ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjk7ubj)}(hhh]j6)}(h0the change in number of pages allocated to inodeh]h0the change in number of pages allocated to inode}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjk7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj/7ubj)}(hB``long swapped`` the change in number of pages swapped from inode h](j)}(h``long swapped``h]j<)}(hj7h]h long swapped}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj7ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj7ubj)}(hhh]j6)}(h0the change in number of pages swapped from inodeh]h0the change in number of pages swapped from inode}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj/7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubj6)}(h**Description**h]jv)}(hj7h]h Description}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj7ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj7ubj6)}(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.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj7ubj6)}(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)}(hj 8hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_get_folio (C function)c.shmem_get_foliohNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hbint shmem_get_folio (struct inode *inode, pgoff_t index, struct folio **foliop, enum sgp_type sgp)h]h)}(haint shmem_get_folio(struct inode *inode, pgoff_t index, struct folio **foliop, enum sgp_type sgp)h](j)}(hinth]hint}(hhhj98hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj58hhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMXubj)}(h h]h }(hhhjH8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj58hhhjG8hMXubh)}(hshmem_get_folioh]h)}(hshmem_get_folioh]hshmem_get_folio}(hhhjZ8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj58hhhjG8hMXubj )}(hN(struct inode *inode, pgoff_t index, struct folio **foliop, enum sgp_type sgp)h](j )}(hstruct inode *inodeh](j.)}(hj1h]hstruct}(hhhjv8hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjr8ubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr8ubh)}(hhh]h)}(hinodeh]hinode}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj8modnameN classnameNjijl)}jo]jr)}jej\8sbc.shmem_get_folioasbuh1hhjr8ubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr8ubj= )}(hj@ h]h*}(hhhj8hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjr8ubh)}(hinodeh]hinode}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn8ubj )}(h pgoff_t indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj8modnameN classnameNjijl)}jo]j8c.shmem_get_folioasbuh1hhj8ubj)}(h h]h }(hhhj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hindexh]hindex}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn8ubj )}(hstruct folio **folioph](j.)}(hj1h]hstruct}(hhhj09hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj,9ubj)}(h h]h }(hhhj=9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubh)}(hhh]h)}(hfolioh]hfolio}(hhhjN9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK9ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjP9modnameN classnameNjijl)}jo]j8c.shmem_get_folioasbuh1hhj,9ubj)}(h h]h }(hhhjl9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubj= )}(hj@ h]h*}(hhhjz9hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj,9ubj= )}(hj@ h]h*}(hhhj9hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj,9ubh)}(hfolioph]hfoliop}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn8ubj )}(henum sgp_type sgph](j.)}(hjh]henum}(hhhj9hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj9ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]h)}(hsgp_typeh]hsgp_type}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj9modnameN classnameNjijl)}jo]j8c.shmem_get_folioasbuh1hhj9ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hsgph]hsgp}(hhhj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjn8ubeh}(h]h ]h"]h$]h&]jj uh1j hj58hhhjG8hMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhj18hhhjG8hMXubah}(h]j,8ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMmhj.8hhubj)}(hhh]j6)}(hfind, and lock a shmem folio.h]hfind, and lock a shmem folio.}(hj$:hj":hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMWhj:hhubah}(h]h ]h"]h$]h&]uh1jhj.8hhhjG8hMXubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j::j3j::j4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct inode *inode`` inode to search ``pgoff_t index`` the page index. ``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](j6)}(h**Parameters**h]jv)}(hjD:h]h Parameters}(hhhjF:hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjB:ubah}(h]h ]h"]h$]h&]uh1j5hK/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<)}(hjc:h]hstruct inode *inode}(hhhje:hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hja:ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMXhj]:ubj)}(hhh]j6)}(hinode to searchh]hinode to search}(hj~:hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjx:hMXhjy:ubah}(h]h ]h"]h$]h&]uh1jhj]:ubeh}(h]h ]h"]h$]h&]uh1jhjx:hMXhjZ:ubj)}(h"``pgoff_t index`` the page index. h](j)}(h``pgoff_t index``h]j<)}(hj:h]h pgoff_t index}(hhhj: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.chMYhj:ubj)}(hhh]j6)}(hthe page index.h]hthe page index.}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMYhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMYhjZ:ubj)}(h8``struct folio **foliop`` pointer to the folio if found h](j)}(h``struct folio **foliop``h]j<)}(hj:h]hstruct folio **foliop}(hhhj: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.chMZhj:ubj)}(hhh]j6)}(hpointer to the folio if foundh]hpointer to the folio if found}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMZhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMZhjZ: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}(hhhj;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]j6)}(hSGP_* flags to control behaviorh]hSGP_* flags to control behavior}(hj);hj';hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj#;hM[hj$;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj#;hM[hjZ:ubeh}(h]h ]h"]h$]h&]uh1jhj>:ubj6)}(h**Description**h]jv)}(hjI;h]h Description}(hhhjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG;ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM]hj>:ubj6)}(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 }(h!Looks up the page cache entry at hj_;hhhNhNubjv)}(h **inode**h]hinode}(hhhjh;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_;ubh & }(h & hj_;hhhNhNubjv)}(h **index**h]hindex}(hhhj{;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_;ubhK. If a folio is present, it is returned locked with an increased refcount.}(hK. If a folio is present, it is returned locked with an increased refcount.hj_;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM]hj>:ubj6)}(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;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM`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 }(h0When no folio is found, the behavior depends on hj;hhhNhNubjv)}(h**sgp**h]hsgp}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh:}(hjhj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhhj;ubj)}(hhh]jx)}(hhh](jx)}(h7for SGP_READ, ***foliop** is ``NULL`` and 0 is returnedh]j6)}(hj;h](hfor SGP_READ, }(hfor SGP_READ, hj;hhhNhNubjv)}(h ***foliop**h]h*foliop}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh is }(h is hj;hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj;ubh and 0 is returned}(h and 0 is returnedhj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMehj;ubah}(h]h ]h"]h$]h&]uh1jxhj;ubjx)}(h@for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returnedh]j6)}(hj<h](hfor SGP_NOALLOC, }(hfor SGP_NOALLOC, hj<hhhNhNubjv)}(h ***foliop**h]h*foliop}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubh is }(h is hj<hhhNhNubj<)}(h``NULL``h]hNULL}(hhhj1<hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj<ubh and -ENOENT is returned}(h and -ENOENT is returnedhj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMfhj<ubah}(h]h ]h"]h$]h&]uh1jxhj;ubjx)}(hnfor all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. h]j6)}(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 }(hbfor all other flags a new folio is allocated, inserted into the page cache and returned locked in hjU<hhhNhNubjv)}(h **foliop**h]hfoliop}(hhhj^<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjU<ubh.}(hjyhjU<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMghjQ<ubah}(h]h ]h"]h$]h&]uh1jxhj;ubeh}(h]h ]h"]h$]h&]jxjxuh1jxhj <hMehj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhhj;ubah}(h]h ]h"]h$]h&]uh1jhj>:ubj6)}(h **Context**h]jv)}(hj<h]hContext}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMjhj>:ubj6)}(h May sleep.h]h May sleep.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMjhj>:ubj6)}(h **Return**h]jv)}(hj<h]hReturn}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMlhj>:ubj6)}(h,0 if successful, else a negative error code.h]h,0 if successful, else a negative error code.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMkhj>:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$shmem_kernel_file_setup (C function)c.shmem_kernel_file_setuphNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj=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 }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj=hMubh)}(hhh]h)}(hfileh]hfile}(hhhj"=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$=modnameN classnameNjijl)}jo]jr)}jeshmem_kernel_file_setupsbc.shmem_kernel_file_setupasbuh1hhj<hhhj=hMubj)}(h h]h }(hhhjC=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj=hMubj= )}(hj@ h]h*}(hhhjQ=hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj<hhhj=hMubh)}(hshmem_kernel_file_setuph]h)}(hj@=h]hshmem_kernel_file_setup}(hhhjb=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^=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.)}(hjh]hconst}(hhhj}=hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjy=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj)}(hcharh]hchar}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy=ubj= )}(hj@ h]h*}(hhhj=hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjy=ubh)}(hnameh]hname}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hju=ubj )}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj=modnameN classnameNjijl)}jo]j>=c.shmem_kernel_file_setupasbuh1hhj=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hsizeh]hsize}(hhhj >hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hju=ubj )}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hhhj">hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hhhj0>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hlongh]hlong}(hhhj>>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hhhjL>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hflagsh]hflags}(hhhjZ>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hju=ubeh}(h]h ]h"]h$]h&]jj uh1j hj<hhhj=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj=hMubah}(h]j<ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hj<hhubj)}(hhh]j6)}(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>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/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&]j1j,j2j>j3j>j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj>ubj)}(hhh](j)}(hE``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}(hhhj>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]j6)}(h/name for dentry (to be seen in /proc//mapsh]h/name for dentry (to be seen in /proc//maps}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj>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}(hhhj?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]j6)}(hsize to be set for the fileh]hsize to be set for the file}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj>ubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j<)}(hj8?h]hunsigned long flags}(hhhj:?hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6?ubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hj2?ubj)}(hhh]j6)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hjS?hjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjN?ubah}(h]h ]h"]h$]h&]uh1jhj2?ubeh}(h]h ]h"]h$]h&]uh1jhjM?hM hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_file_setup (C function)c.shmem_file_setuphNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj?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 }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hMubh)}(hhh]h)}(hfileh]hfile}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj?modnameN classnameNjijl)}jo]jr)}jeshmem_file_setupsbc.shmem_file_setupasbuh1hhj?hhhj?hMubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hMubj= )}(hj@ h]h*}(hhhj?hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj?hhhj?hMubh)}(hshmem_file_setuph]h)}(hj?h]hshmem_file_setup}(hhhj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?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.)}(hjh]hconst}(hhhj @hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hcharh]hchar}(hhhj'@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hhhj5@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj= )}(hj@ h]h*}(hhhjC@hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj@ubh)}(hnameh]hname}(hhhjP@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubj )}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjl@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjn@modnameN classnameNjijl)}jo]j?c.shmem_file_setupasbuh1hhje@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje@ubh)}(hsizeh]hsize}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubj )}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hlongh]hlong}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hflagsh]hflags}(hhhj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj@ubeh}(h]h ]h"]h$]h&]jj uh1j hj?hhhj?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhj?hMubah}(h]j?ah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj?hhubj)}(hhh]j6)}(h$get an unlinked file living in tmpfsh]h$get an unlinked file living in tmpfs}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j,Aj3j,Aj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj6Ah]h Parameters}(hhhj8AhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj4Aubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhj0Aubj)}(hhh](j)}(hE``const char *name`` name for dentry (to be seen in /proc//maps h](j)}(h``const char *name``h]j<)}(hjUAh]hconst char *name}(hhhjWAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjSAubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjOAubj)}(hhh]j6)}(h/name for dentry (to be seen in /proc//mapsh]h/name for dentry (to be seen in /proc//maps}(hjpAhjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjjAhMhjkAubah}(h]h ]h"]h$]h&]uh1jhjOAubeh}(h]h ]h"]h$]h&]uh1jhjjAhMhjLAubj)}(h,``loff_t size`` size to be set for the file h](j)}(h``loff_t size``h]j<)}(hjAh]h loff_t size}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjAubj)}(hhh]j6)}(hsize to be set for the fileh]hsize to be set for the file}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjLAubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j<)}(hjAh]hunsigned long flags}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjAubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjAubj)}(hhh]j6)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjLAubeh}(h]h ]h"]h$]h&]uh1jhj0Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&shmem_file_setup_with_mnt (C function)c.shmem_file_setup_with_mnthNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj!BhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjBhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM ubj)}(h h]h }(hhhj/BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj.BhM ubh)}(hhh]h)}(hfileh]hfile}(hhhj@BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=Bubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjBBmodnameN classnameNjijl)}jo]jr)}jeshmem_file_setup_with_mntsbc.shmem_file_setup_with_mntasbuh1hhjBhhhj.BhM ubj)}(h h]h }(hhhjaBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj.BhM ubj= )}(hj@ h]h*}(hhhjoBhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjBhhhj.BhM ubh)}(hshmem_file_setup_with_mnth]h)}(hj^Bh]hshmem_file_setup_with_mnt}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|Bubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhj.BhM ubj )}(hJ(struct vfsmount *mnt, const char *name, loff_t size, unsigned long flags)h](j )}(hstruct vfsmount *mnth](j.)}(hj1h]hstruct}(hhhjBhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjBubj)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]h)}(hvfsmounth]hvfsmount}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjBmodnameN classnameNjijl)}jo]j\Bc.shmem_file_setup_with_mntasbuh1hhjBubj)}(h h]h }(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj= )}(hj@ h]h*}(hhhjBhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjBubh)}(hmnth]hmnt}(hhhjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubj )}(hconst char *nameh](j.)}(hjh]hconst}(hhhj ChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hcharh]hchar}(hhhj&ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hhhj4ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj= )}(hj@ h]h*}(hhhjBChhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjCubh)}(hnameh]hname}(hhhjOChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubj )}(h loff_t sizeh](h)}(hhh]h)}(hloff_th]hloff_t}(hhhjkChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhCubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmCmodnameN classnameNjijl)}jo]j\Bc.shmem_file_setup_with_mntasbuh1hhjdCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdCubh)}(hsizeh]hsize}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdCubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubj )}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hlongh]hlong}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hflagsh]hflags}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjBubeh}(h]h ]h"]h$]h&]jj uh1j hjBhhhj.BhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhj.BhM ubah}(h]jBah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM%hjBhhubj)}(hhh]j6)}(h$get an unlinked file living in tmpfsh]h$get an unlinked file living in tmpfs}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj.BhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j+Dj3j+Dj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5Dh]h Parameters}(hhhj7DhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3Dubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM#hj/Dubj)}(hhh](j)}(hH``struct vfsmount *mnt`` the tmpfs mount where the file will be created h](j)}(h``struct vfsmount *mnt``h]j<)}(hjTDh]hstruct vfsmount *mnt}(hhhjVDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRDubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM hjNDubj)}(hhh]j6)}(h.the tmpfs mount where the file will be createdh]h.the tmpfs mount where the file will be created}(hjoDhjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjiDhM hjjDubah}(h]h ]h"]h$]h&]uh1jhjNDubeh}(h]h ]h"]h$]h&]uh1jhjiDhM hjKDubj)}(hE``const char *name`` name for dentry (to be seen in /proc//maps h](j)}(h``const char *name``h]j<)}(hjDh]hconst char *name}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM!hjDubj)}(hhh]j6)}(h/name for dentry (to be seen in /proc//mapsh]h/name for dentry (to be seen in /proc//maps}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhM!hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM!hjKDubj)}(h,``loff_t size`` size to be set for the file h](j)}(h``loff_t size``h]j<)}(hjDh]h loff_t size}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM"hjDubj)}(hhh]j6)}(hsize to be set for the fileh]hsize to be set for the file}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjDhM"hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM"hjKDubj)}(hX``unsigned long flags`` VM_NORESERVE suppresses pre-accounting of the entire object sizeh](j)}(h``unsigned long flags``h]j<)}(hjDh]hunsigned long flags}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjDubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM$hjDubj)}(hhh]j6)}(h@VM_NORESERVE suppresses pre-accounting of the entire object sizeh]h@VM_NORESERVE suppresses pre-accounting of the entire object size}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM#hjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhM$hjKDubeh}(h]h ]h"]h$]h&]uh1jhj/Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshmem_zero_setup (C function)c.shmem_zero_setuphNtauh1hhj~ehhhNhNubh)}(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}(hhhjYEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUEhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM.ubj)}(h h]h }(hhhjhEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUEhhhjgEhM.ubh)}(hshmem_zero_setuph]h)}(hshmem_zero_setuph]hshmem_zero_setup}(hhhjzEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUEhhhjgEhM.ubj )}(h(struct vm_area_struct *vma)h]j )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjEhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjEubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jr)}jej|Esbc.shmem_zero_setupasbuh1hhjEubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj= )}(hj@ h]h*}(hhhjEhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjEubh)}(hvmah]hvma}(hhhjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjEubah}(h]h ]h"]h$]h&]jj uh1j hjUEhhhjgEhM.ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQEhhhjgEhM.ubah}(h]jLEah ](jjeh"]h$]h&]juh1hhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM0hjNEhhubj)}(hhh]j6)}(h setup a shared anonymous mappingh]h setup a shared anonymous mapping}(hjFhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM-hjFhhubah}(h]h ]h"]h$]h&]uh1jhjNEhhhjgEhM.ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j2Fj3j2Fj4uh1hhhhj~ehNhNubjl)}(h]**Parameters** ``struct vm_area_struct *vma`` the vma to be mmapped is prepared by do_mmaph](j6)}(h**Parameters**h]jv)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:Fubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM1hj6Fubj)}(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<)}(hj[Fh]hstruct vm_area_struct *vma}(hhhj]FhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYFubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM3hjUFubj)}(hhh]j6)}(h,the vma to be mmapped is prepared by do_mmaph]h,the vma to be mmapped is prepared by do_mmap}(hjvFhjtFhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chM.hjqFubah}(h]h ]h"]h$]h&]uh1jhjUFubeh}(h]h ]h"]h$]h&]uh1jhjpFhM3hjRFubah}(h]h ]h"]h$]h&]uh1jhj6Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!shmem_read_folio_gfp (C function)c.shmem_read_folio_gfphNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjFhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjFhhhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMIubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMIubh)}(hhh]h)}(hfolioh]hfolio}(hhhjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjFmodnameN classnameNjijl)}jo]jr)}jeshmem_read_folio_gfpsbc.shmem_read_folio_gfpasbuh1hhjFhhhjFhMIubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhMIubj= )}(hj@ h]h*}(hhhjGhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjFhhhjFhMIubh)}(hshmem_read_folio_gfph]h)}(hjFh]hshmem_read_folio_gfp}(hhhjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjFhMIubj )}(h9(struct address_space *mapping, pgoff_t index, gfp_t gfp)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhj/GhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj+Gubj)}(h h]h }(hhhjHhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjFhMIubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jYHj3jYHj4uh1hhhhj~ehNhNubjl)}(hX**Parameters** ``struct address_space *mapping`` the folio's address_space ``pgoff_t index`` the folio index ``gfp_t gfp`` the page allocator flags to use if allocating **Description** This 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. i915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.h](j6)}(h**Parameters**h]jv)}(hjcHh]h Parameters}(hhhjeHhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaHubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMLhj]Hubj)}(hhh](j)}(h<``struct address_space *mapping`` the folio's address_space h](j)}(h!``struct address_space *mapping``h]j<)}(hjHh]hstruct address_space *mapping}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMIhj|Hubj)}(hhh]j6)}(hthe folio's address_spaceh]hthe folio’s address_space}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMIhjHubah}(h]h ]h"]h$]h&]uh1jhj|Hubeh}(h]h ]h"]h$]h&]uh1jhjHhMIhjyHubj)}(h"``pgoff_t index`` the folio index h](j)}(h``pgoff_t index``h]j<)}(hjHh]h pgoff_t index}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMJhjHubj)}(hhh]j6)}(hthe folio indexh]hthe folio index}(hjHhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMJhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMJhjyHubj)}(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}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjHubah}(h]h ]h"]h$]h&]uh1jhK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMKhjHubj)}(hhh]j6)}(h-the page allocator flags to use if allocatingh]h-the page allocator flags to use if allocating}(hjIhj IhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj IhMKhj Iubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj IhMKhjyHubeh}(h]h ]h"]h$]h&]uh1jhj]Hubj6)}(h**Description**h]jv)}(hj/Ih]h Description}(hhhj1IhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj-Iubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMMhj]Hubj6)}(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.}(hjGIhjEIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMMhj]Hubj6)}(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.}(hjVIhjTIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/shmem.chMShj]Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_vma_setup (C function)c.migrate_vma_setuphNtauh1hhj~ehhhNhNubh)}(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}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubh)}(hmigrate_vma_setuph]h)}(hmigrate_vma_setuph]hmigrate_vma_setup}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjIhMubj )}(h(struct migrate_vma *args)h]j )}(hstruct migrate_vma *argsh](j.)}(hj1h]hstruct}(hhhjIhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjIubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]h)}(h migrate_vmah]h migrate_vma}(hhhjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjImodnameN classnameNjijl)}jo]jr)}jejIsbc.migrate_vma_setupasbuh1hhjIubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj= )}(hj@ h]h*}(hhhj JhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjIubh)}(hargsh]hargs}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjIubah}(h]h ]h"]h$]h&]jj uh1j hjIhhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{IhhhjIhMubah}(h]jvIah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjxIhhubj)}(hhh]j6)}(h$prepare to migrate a range of memoryh]h$prepare to migrate a range of memory}(hjFJhjDJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjAJhhubah}(h]h ]h"]h$]h&]uh1jhjxIhhhjIhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\Jj3j\Jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjfJh]h Parameters}(hhhjhJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdJubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj)}(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<)}(hjJh]hstruct migrate_vma *args}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjJubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjJubj)}(hhh]j6)}(h:contains the vma, start, and pfns arrays for the migrationh]h:contains the vma, start, and pfns arrays for the migration}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj|Jubah}(h]h ]h"]h$]h&]uh1jhj`Jubj6)}(h **Return**h]jv)}(hjJh]hReturn}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(h**Description**h]jv)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjJubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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().}(hjKhj KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(hX0For empty entries inside CPU page table (pte_none() or pmd_none() is true) we do set MIGRATE_PFN_MIGRATE flag inside the corresponding source array thus allowing the caller to allocate device memory for those unbacked virtual addresses. For this the caller simply has to allocate device memory and properly set the destination entry like for regular migration. Note that this can still fail, and thus inside the device driver you must check if the migration was successful for those entries after calling migrate_vma_pages(), just like for regular migration.h]hX0For empty entries inside CPU page table (pte_none() or pmd_none() is true) we do set MIGRATE_PFN_MIGRATE flag inside the corresponding source array thus allowing the caller to allocate device memory for those unbacked virtual addresses. For this the caller simply has to allocate device memory and properly set the destination entry like for regular migration. Note that this can still fail, and thus inside the device driver you must check if the migration was successful for those entries after calling migrate_vma_pages(), just like for regular migration.}(hj,Khj*KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hj;Khj9KhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjJKhjHKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjYKhjWKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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).}(hjhKhjfKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubj6)}(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.}(hjwKhjuKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj`Jubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!migrate_device_pages (C function)c.migrate_device_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubh)}(hmigrate_device_pagesh]h)}(hmigrate_device_pagesh]hmigrate_device_pages}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhjKhMubj )}(hH(unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)h](j )}(hunsigned long *src_pfnsh](j)}(hunsignedh]hunsigned}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hlongh]hlong}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hhhj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj= )}(hj@ h]h*}(hhhjLhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjKubh)}(hsrc_pfnsh]hsrc_pfns}(hhhj&LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubj )}(hunsigned long *dst_pfnsh](j)}(hunsignedh]hunsigned}(hhhj?LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj)}(h h]h }(hhhjMLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj)}(hlongh]hlong}(hhhj[LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj)}(h h]h }(hhhjiLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj= )}(hj@ h]h*}(hhhjwLhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj;Lubh)}(hdst_pfnsh]hdst_pfns}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;Lubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubj )}(hunsigned long npagesh](j)}(hunsignedh]hunsigned}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hlongh]hlong}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hnpagesh]hnpages}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjKubeh}(h]h ]h"]h$]h&]jj uh1j hjKhhhjKhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjKhMubah}(h]jKah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM hjKhhubj)}(hhh]j6)}(h+migrate meta-data from src page to dst pageh]h+migrate meta-data from src page to dst page}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jMj3jMj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj"Mh]h Parameters}(hhhj$MhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj Mubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjMubj)}(hhh](j)}(hJ``unsigned long *src_pfns`` src_pfns returned from migrate_device_range() h](j)}(h``unsigned long *src_pfns``h]j<)}(hjAMh]hunsigned long *src_pfns}(hhhjCMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj?Mubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj;Mubj)}(hhh]j6)}(h-src_pfns returned from migrate_device_range()h]h-src_pfns returned from migrate_device_range()}(hj\MhjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjVMhMhjWMubah}(h]h ]h"]h$]h&]uh1jhj;Mubeh}(h]h ]h"]h$]h&]uh1jhjVMhMhj8Mubj)}(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<)}(hjzMh]hunsigned long *dst_pfns}(hhhj|MhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjxMubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjtMubj)}(hhh]j6)}(h:array of pfns allocated by the driver to migrate memory toh]h:array of pfns allocated by the driver to migrate memory to}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjtMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj8Mubj)}(h6``unsigned long npages`` number of pages in the range h](j)}(h``unsigned long npages``h]j<)}(hjMh]hunsigned long npages}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjMubj)}(hhh]j6)}(hnumber of pages in the rangeh]hnumber of pages in the range}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj8Mubeh}(h]h ]h"]h$]h&]uh1jhjMubj6)}(h**Description**h]jv)}(hjMh]h Description}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjMubj6)}(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.}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmigrate_vma_pages (C function)c.migrate_vma_pageshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h4void migrate_vma_pages (struct migrate_vma *migrate)h]h)}(h3void migrate_vma_pages(struct migrate_vma *migrate)h](j)}(hvoidh]hvoid}(hhhj3NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/NhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMubj)}(h h]h }(hhhjBNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/NhhhjANhMubh)}(hmigrate_vma_pagesh]h)}(hmigrate_vma_pagesh]hmigrate_vma_pages}(hhhjTNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPNubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/NhhhjANhMubj )}(h(struct migrate_vma *migrate)h]j )}(hstruct migrate_vma *migrateh](j.)}(hj1h]hstruct}(hhhjpNhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjlNubj)}(h h]h }(hhhj}NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlNubh)}(hhh]h)}(h migrate_vmah]h migrate_vma}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjNmodnameN classnameNjijl)}jo]jr)}jejVNsbc.migrate_vma_pagesasbuh1hhjlNubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlNubj= )}(hj@ h]h*}(hhhjNhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjlNubh)}(hmigrateh]hmigrate}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlNubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhNubah}(h]h ]h"]h$]h&]jj uh1j hj/NhhhjANhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+NhhhjANhMubah}(h]j&Nah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj(Nhhubj)}(hhh]j6)}(h+migrate meta-data from src page to dst pageh]h+migrate meta-data from src page to dst page}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjNhhubah}(h]h ]h"]h$]h&]uh1jhj(NhhhjANhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j Oj3j Oj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjOh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjOubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjOubj)}(hhh]j)}(hT``struct migrate_vma *migrate`` migrate struct containing all migration information h](j)}(h``struct migrate_vma *migrate``h]j<)}(hj5Oh]hstruct migrate_vma *migrate}(hhhj7OhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj3Oubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhj/Oubj)}(hhh]j6)}(h3migrate struct containing all migration informationh]h3migrate struct containing all migration information}(hjPOhjNOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjJOhMhjKOubah}(h]h ]h"]h$]h&]uh1jhj/Oubeh}(h]h ]h"]h$]h&]uh1jhjJOhMhj,Oubah}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjpOh]h Description}(hhhjrOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjnOubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjOubj6)}(hThis 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]hThis 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.}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!migrate_vma_finalize (C function)c.migrate_vma_finalizehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h7void migrate_vma_finalize (struct migrate_vma *migrate)h]h)}(h6void migrate_vma_finalize(struct migrate_vma *migrate)h](j)}(hvoidh]hvoid}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM[ubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhM[ubh)}(hmigrate_vma_finalizeh]h)}(hmigrate_vma_finalizeh]hmigrate_vma_finalize}(hhhjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjOhM[ubj )}(h(struct migrate_vma *migrate)h]j )}(hstruct migrate_vma *migrateh](j.)}(hj1h]hstruct}(hhhjOhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjOubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]h)}(h migrate_vmah]h migrate_vma}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Pubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjPmodnameN classnameNjijl)}jo]jr)}jejOsbc.migrate_vma_finalizeasbuh1hhjOubj)}(h h]h }(hhhj0PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj= )}(hj@ h]h*}(hhhj>PhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjOubh)}(hmigrateh]hmigrate}(hhhjKPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjOubah}(h]h ]h"]h$]h&]jj uh1j hjOhhhjOhM[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjOhM[ubah}(h]jOah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMdhjOhhubj)}(hhh]j6)}(hrestore CPU page table entryh]hrestore CPU page table entry}(hjxPhjvPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMZhjsPhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjOhM[ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjPh]h Parameters}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hT/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<)}(hjPh]hstruct migrate_vma *migrate}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM[hjPubj)}(hhh]j6)}(h3migrate struct containing all migration informationh]h3migrate struct containing all migration information}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjPhM[hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM[hjPubah}(h]h ]h"]h$]h&]uh1jhjPubj6)}(h**Description**h]jv)}(hjPh]h Description}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjPubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM]hjPubj6)}(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.}(hj QhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM]hjPubj6)}(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.}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMahjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!migrate_device_range (C function)c.migrate_device_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhjFQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBQhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMlubj)}(h h]h }(hhhjUQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBQhhhjTQhMlubh)}(hmigrate_device_rangeh]h)}(hmigrate_device_rangeh]hmigrate_device_range}(hhhjgQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBQhhhjTQhMlubj )}(hD(unsigned long *src_pfns, unsigned long start, unsigned long npages)h](j )}(hunsigned long *src_pfnsh](j)}(hunsignedh]hunsigned}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hlongh]hlong}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj= )}(hj@ h]h*}(hhhjQhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjQubh)}(hsrc_pfnsh]hsrc_pfns}(hhhjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{Qubj )}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hlongh]hlong}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hhhj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hstarth]hstart}(hhhjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{Qubj )}(hunsigned long npagesh](j)}(hunsignedh]hunsigned}(hhhj2RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubj)}(h h]h }(hhhj@RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubj)}(hlongh]hlong}(hhhjNRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubj)}(h h]h }(hhhj\RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubh)}(hnpagesh]hnpages}(hhhjjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.Rubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj{Qubeh}(h]h ]h"]h$]h&]jj uh1j hjBQhhhjTQhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>QhhhjTQhMlubah}(h]j9Qah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chM}hj;Qhhubj)}(hhh]j6)}(h-migrate device private pfns to normal memory.h]h-migrate device private pfns to normal memory.}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMkhjRhhubah}(h]h ]h"]h$]h&]uh1jhj;QhhhjTQhMlubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jRj3jRj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjRh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMohjRubj)}(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<)}(hjRh]hunsigned long *src_pfns}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMlhjRubj)}(hhh]j6)}(h@array large enough to hold migrating source device private pfns.h]h@array large enough to hold migrating source device private pfns.}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhMlhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMlhjRubj)}(h>``unsigned long start`` starting pfn in the range to migrate. h](j)}(h``unsigned long start``h]j<)}(hjSh]hunsigned long start}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj Subah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMmhj Subj)}(hhh]j6)}(h%starting pfn in the range to migrate.h]h%starting pfn in the range to migrate.}(hj*Shj(ShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$ShMmhj%Subah}(h]h ]h"]h$]h&]uh1jhj Subeh}(h]h ]h"]h$]h&]uh1jhj$ShMmhjRubj)}(h5``unsigned long npages`` number of pages to migrate. h](j)}(h``unsigned long npages``h]j<)}(hjHSh]hunsigned long npages}(hhhjJShhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFSubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMnhjBSubj)}(hhh]j6)}(hnumber of pages to migrate.h]hnumber of pages to migrate.}(hjcShjaShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]ShMnhj^Subah}(h]h ]h"]h$]h&]uh1jhjBSubeh}(h]h ]h"]h$]h&]uh1jhj]ShMnhjRubeh}(h]h ]h"]h$]h&]uh1jhjRubj6)}(h**Description**h]jv)}(hjSh]h Description}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMphjRubj6)}(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.}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMphjRubj6)}(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.}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMthjRubj6)}(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().}(hjShjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/migrate_device.chMxhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubjכ)}(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)}(hhhjSubah}(h]h ]h"]h$]h&]jj uh1j֛hj~ehhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwp_walk (C struct) c.wp_walkhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hwp_walkh]h)}(hstruct wp_walkh](j.)}(hj1h]hstruct}(hhhjShhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjShhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK ubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjThK ubh)}(hwp_walkh]h)}(hjSh]hwp_walk}(hhhjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjThK ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjThK ubah}(h]jSah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjShhubj)}(hhh]j6)}(h+Private struct for pagetable walk callbacksh]h+Private struct for pagetable walk callbacks}(hj9Thj7ThhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK hj4Thhubah}(h]h ]h"]h$]h&]uh1jhjShhhjThK ubeh}(h]h ](j,structeh"]h$]h&]j1j,j2jOTj3jOTj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj[ThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWTubh:}(hjhjWThhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjSTubjw.)}(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; };}(hhhjtTubah}(h]h ]h"]h$]h&]jj uh1jv.h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjSTubj6)}(h **Members**h]jv)}(hjTh]hMembers}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjSTubj)}(hhh](j)}(h"``range`` Range for mmu notifiers h](j)}(h ``range``h]j<)}(hjTh]hrange}(hhhjThhhNhNubah}(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.chK hjTubj)}(hhh]j6)}(hRange for mmu notifiersh]hRange for mmu notifiers}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThK hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThK hjTubj)}(h1``tlbflush_start`` Address of first modified pte h](j)}(h``tlbflush_start``h]j<)}(hjTh]htlbflush_start}(hhhjThhhNhNubah}(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.chKhjTubj)}(hhh]j6)}(hAddress of first modified pteh]hAddress of first modified pte}(hjThjThhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThKhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThKhjTubj)}(h2``tlbflush_end`` Address of last modified pte + 1 h](j)}(h``tlbflush_end``h]j<)}(hjUh]h tlbflush_end}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjUubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjUubj)}(hhh]j6)}(h Address of last modified pte + 1h]h Address of last modified pte + 1}(hj1Uhj/UhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+UhKhj,Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj+UhKhjTubj)}(h'``total`` Total number of modified ptesh](j)}(h ``total``h]j<)}(hjOUh]htotal}(hhhjQUhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMUubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjIUubj)}(hhh]j6)}(hTotal number of modified ptesh]hTotal number of modified ptes}(hjjUhjhUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjeUubah}(h]h ]h"]h$]h&]uh1jhjIUubeh}(h]h ]h"]h$]h&]uh1jhjdUhKhjTubeh}(h]h ]h"]h$]h&]uh1jhjSTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwp_pte (C function)c.wp_ptehNtauh1hhj~ehhhNhNubh)}(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}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKubj)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhKubh)}(hwp_pteh]h)}(hwp_pteh]hwp_pte}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjUhKubj )}(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}(hhhjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjUmodnameN classnameNjijl)}jo]jr)}jejUsbc.wp_pteasbuh1hhjUubj)}(h h]h }(hhhj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj= )}(hj@ h]h*}(hhhjVhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjUubh)}(hpteh]hpte}(hhhj$VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjUubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj=VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Vubj)}(h h]h }(hhhjKVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Vubj)}(hlongh]hlong}(hhhjYVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Vubj)}(h h]h }(hhhjgVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Vubh)}(haddrh]haddr}(hhhjuVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9Vubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjUubj )}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hlongh]hlong}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hendh]hend}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjUubj )}(hstruct mm_walk *walkh](j.)}(hj1h]hstruct}(hhhjVhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjVubj)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]h)}(hmm_walkh]hmm_walk}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjVmodnameN classnameNjijl)}jo]jVc.wp_pteasbuh1hhjVubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj= )}(hj@ h]h*}(hhhj)WhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjVubh)}(hwalkh]hwalk}(hhhj6WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjUubeh}(h]h ]h"]h$]h&]jj uh1j hjUhhhjUhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjUhKubah}(h]jUah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK"hjUhhubj)}(hhh]j6)}(hWrite-protect a pteh]hWrite-protect a pte}(hjcWhjaWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj^Whhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jyWj3jyWj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjWh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjWubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}Wubj)}(hhh](j)}(h"``pte_t *pte`` Pointer to the pte h](j)}(h``pte_t *pte``h]j<)}(hjWh]h pte_t *pte}(hhhjWhhhNhNubah}(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]j6)}(hPointer to the pteh]hPointer to the pte}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhKhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjWubj)}(h?``unsigned long addr`` The start of protecting virtual address h](j)}(h``unsigned long addr``h]j<)}(hjWh]hunsigned long addr}(hhhjWhhhNhNubah}(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]j6)}(h'The start of protecting virtual addressh]h'The start of protecting virtual address}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjWhKhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjWubj)}(h<``unsigned long end`` The end of protecting virtual address h](j)}(h``unsigned long end``h]j<)}(hjXh]hunsigned long end}(hhhjXhhhNhNubah}(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]j6)}(h%The end of protecting virtual addressh]h%The end of protecting virtual address}(hj/Xhj-XhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj)XhKhj*Xubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj)XhKhjWubj)}(h:``struct mm_walk *walk`` pagetable walk callback argument h](j)}(h``struct mm_walk *walk``h]j<)}(hjMXh]hstruct mm_walk *walk}(hhhjOXhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjKXubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjGXubj)}(hhh]j6)}(h pagetable walk callback argumenth]h pagetable walk callback argument}(hjhXhjfXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjbXhKhjcXubah}(h]h ]h"]h$]h&]uh1jhjGXubeh}(h]h ]h"]h$]h&]uh1jhjbXhKhjWubeh}(h]h ]h"]h$]h&]uh1jhj}Wubj6)}(h**Description**h]jv)}(hjXh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}Wubj6)}(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.}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj}Wubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclean_walk (C struct) c.clean_walkhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h clean_walkh]h)}(hstruct clean_walkh](j.)}(hj1h]hstruct}(hhhjXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjXhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK8ubj)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhK8ubh)}(h clean_walkh]h)}(hjXh]h clean_walk}(hhhjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjXhK8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjXhK8ubah}(h]jXah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK%hjXhhubj)}(hhh]j6)}(h1Private struct for the clean_record_pte function.h]h1Private struct for the clean_record_pte function.}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK7hj Yhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjXhK8ubeh}(h]h ](j,structeh"]h$]h&]j1j,j2j(Yj3j(Yj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Definition**::h](jv)}(h**Definition**h]h Definition}(hhhj4YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0Yubh:}(hjhj0YhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK;hj,Yubjw.)}(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; };}(hhhjMYubah}(h]h ]h"]h$]h&]jj uh1jv.h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK=hj,Yubj6)}(h **Members**h]jv)}(hj^Yh]hMembers}(hhhj`YhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\Yubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKEhj,Yubj)}(hhh](j)}(h'``base`` struct wp_walk we derive from h](j)}(h``base``h]j<)}(hj}Yh]hbase}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{Yubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK9hjwYubj)}(hhh]j6)}(hstruct wp_walk we derive fromh]hstruct wp_walk we derive from}(hjYhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYhK9hjYubah}(h]h ]h"]h$]h&]uh1jhjwYubeh}(h]h ]h"]h$]h&]uh1jhjYhK9hjtYubj)}(hJ``bitmap_pgoff`` Address_space Page offset of the first bit in **bitmap** h](j)}(h``bitmap_pgoff``h]j<)}(hjYh]h bitmap_pgoff}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chK:hjYubj)}(hhh]j6)}(h8Address_space Page offset of the first bit in **bitmap**h](h.Address_space Page offset of the first bit in }(h.Address_space Page offset of the first bit in hjYhhhNhNubjv)}(h **bitmap**h]hbitmap}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubeh}(h]h ]h"]h$]h&]uh1j5hjYhK:hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhK:hjtYubj)}(hX``bitmap`` Bitmap with one bit for each page offset in the address_space range covered. h](j)}(h ``bitmap``h]j<)}(hjYh]hbitmap}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj2Zubj)}(hhh]j6)}(hLAddress_space page offset of first modified pte relative to **bitmap_pgoff**h](hhjtYubj)}(hS``end`` Address_space page offset of last modified pte relative to **bitmap_pgoff**h](j)}(h``end``h]j<)}(hjZh]hend}(hhhjZhhhNhNubah}(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.chK?hj{Zubj)}(hhh]j6)}(hKAddress_space page offset of last modified pte relative to **bitmap_pgoff**h](h;Address_space page offset of last modified pte relative to }(h;Address_space page offset of last modified pte relative to hjZhhhNhNubjv)}(h**bitmap_pgoff**h]h bitmap_pgoff}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjZubeh}(h]h ]h"]h$]h&]uh1j5hjZhK?hjZubah}(h]h ]h"]h$]h&]uh1jhj{Zubeh}(h]h ]h"]h$]h&]uh1jhjZhK?hjtYubeh}(h]h ]h"]h$]h&]uh1jhj,Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclean_record_pte (C function)c.clean_record_ptehNtauh1hhj~ehhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKMubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhKMubh)}(hclean_record_pteh]h)}(hclean_record_pteh]hclean_record_pte}(hhhj [hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjZhKMubj )}(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}(hhhj)[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&[ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+[modnameN classnameNjijl)}jo]jr)}jej [sbc.clean_record_pteasbuh1hhj"[ubj)}(h h]h }(hhhjI[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"[ubj= )}(hj@ h]h*}(hhhjW[hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj"[ubh)}(hpteh]hpte}(hhhjd[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj}[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[ubj)}(hlongh]hlong}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[ubh)}(haddrh]haddr}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjy[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hunsigned long endh](j)}(hunsignedh]hunsigned}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hlongh]hlong}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hendh]hend}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubj )}(hstruct mm_walk *walkh](j.)}(hj1h]hstruct}(hhhj\hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj\ubj)}(h h]h }(hhhj,\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]h)}(hmm_walkh]hmm_walk}(hhhj=\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:\ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj?\modnameN classnameNjijl)}jo]jE[c.clean_record_pteasbuh1hhj\ubj)}(h h]h }(hhhj[\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj= )}(hj@ h]h*}(hhhji\hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj\ubh)}(hwalkh]hwalk}(hhhjv\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj[ubeh}(h]h ]h"]h$]h&]jj uh1j hjZhhhjZhKMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjZhKMubah}(h]jZah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKYhjZhhubj)}(hhh]j6)}(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}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKLhj\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhKMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j\j3j\j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKPhj\ubj)}(hhh](j)}(h"``pte_t *pte`` Pointer to the pte h](j)}(h``pte_t *pte``h]j<)}(hj\h]h pte_t *pte}(hhhj\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.chKNhj\ubj)}(hhh]j6)}(hPointer to the pteh]hPointer to the pte}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj\hKNhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hKNhj\ubj)}(h@``unsigned long addr`` The start of virtual address to be clean h](j)}(h``unsigned long addr``h]j<)}(hj]h]hunsigned long addr}(hhhj]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.chKOhj]ubj)}(hhh]j6)}(h(The start of virtual address to be cleanh]h(The start of virtual address to be clean}(hj6]hj4]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj0]hKOhj1]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj0]hKOhj\ubj)}(h=``unsigned long end`` The end of virtual address to be clean h](j)}(h``unsigned long end``h]j<)}(hjT]h]hunsigned long end}(hhhjV]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjR]ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKPhjN]ubj)}(hhh]j6)}(h&The end of virtual address to be cleanh]h&The end of virtual address to be clean}(hjo]hjm]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hji]hKPhjj]ubah}(h]h ]h"]h$]h&]uh1jhjN]ubeh}(h]h ]h"]h$]h&]uh1jhji]hKPhj\ubj)}(h:``struct mm_walk *walk`` pagetable walk callback argument h](j)}(h``struct mm_walk *walk``h]j<)}(hj]h]hstruct mm_walk *walk}(hhhj]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.chKQhj]ubj)}(hhh]j6)}(h pagetable walk callback argumenth]h pagetable walk callback argument}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hKQhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKQhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj6)}(h**Description**h]jv)}(hj]h]h Description}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKShj\ubj6)}(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]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKShj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$wp_shared_mapping_range (C function)c.wp_shared_mapping_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhhj^hKubj)}(hlongh]hlong}(hhhj*^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhhj^hKubj)}(h h]h }(hhhj8^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhhj^hKubh)}(hwp_shared_mapping_rangeh]h)}(hwp_shared_mapping_rangeh]hwp_shared_mapping_range}(hhhjJ^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj ^hhhj^hKubj )}(h@(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjf^hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjb^ubj)}(h h]h }(hhhjs^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb^ubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj^modnameN classnameNjijl)}jo]jr)}jejL^sbc.wp_shared_mapping_rangeasbuh1hhjb^ubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb^ubj= )}(hj@ h]h*}(hhhj^hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjb^ubh)}(hmappingh]hmapping}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^^ubj )}(hpgoff_t first_indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj^modnameN classnameNjijl)}jo]j^c.wp_shared_mapping_rangeasbuh1hhj^ubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(h first_indexh]h first_index}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^^ubj )}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj#_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj _ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj%_modnameN classnameNjijl)}jo]j^c.wp_shared_mapping_rangeasbuh1hhj_ubj)}(h h]h }(hhhjA_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hnrh]hnr}(hhhjO_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj^^ubeh}(h]h ]h"]h$]h&]jj uh1j hj ^hhhj^hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj^hKubah}(h]j^ah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj^hhubj)}(hhh]j6)}(h0Write-protect all ptes in an address space rangeh]h0Write-protect all ptes in an address space range}(hj|_hjz_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhjw_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j_j3j_j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj_h]h Parameters}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj_ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj_ubj)}(hhh](j)}(hM``struct address_space *mapping`` The address_space we want to write protect h](j)}(h!``struct address_space *mapping``h]j<)}(hj_h]hstruct address_space *mapping}(hhhj_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]j6)}(h*The address_space we want to write protecth]h*The address_space we want to write protect}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhj_ubj)}(h;``pgoff_t first_index`` The first page offset in the range h](j)}(h``pgoff_t first_index``h]j<)}(hj_h]hpgoff_t first_index}(hhhj_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]j6)}(h"The first page offset in the rangeh]h"The first page offset in the range}(hj`hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj `hKhj `ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj `hKhj_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}(hhhj/`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]j6)}(h+Number of incremental page offsets to coverh]h+Number of incremental page offsets to cover}(hjH`hjF`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjB`hKhjC`ubah}(h]h ]h"]h$]h&]uh1jhj'`ubeh}(h]h ]h"]h$]h&]uh1jhjB`hKhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj6)}(h**Note**h]jv)}(hjh`h]hNote}(hhhjj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjf`ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj_ubj6)}(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.}(hj`hj~`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chKhj_ubj6)}(h **Return**h]jv)}(hj`h]hReturn}(hhhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj`ubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj_ubj6)}(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.}(hj`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.clean_record_shared_mapping_range (C function)#c.clean_record_shared_mapping_rangehNtauh1hhj~ehhhNhNubh)}(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}(hhhj`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 }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubj)}(hlongh]hlong}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubj)}(h h]h }(hhhj`hhhNhNubah}(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}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj aubah}(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.)}(hj1h]hstruct}(hhhj-ahhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj)aubj)}(h h]h }(hhhj:ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)aubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjKahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjMamodnameN classnameNjijl)}jo]jr)}jejasb#c.clean_record_shared_mapping_rangeasbuh1hhj)aubj)}(h h]h }(hhhjkahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)aubj= )}(hj@ h]h*}(hhhjyahhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)aubh)}(hmappingh]hmapping}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)aubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(hpgoff_t first_indexh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjamodnameN classnameNjijl)}jo]jga#c.clean_record_shared_mapping_rangeasbuh1hhjaubj)}(h h]h }(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(h first_indexh]h first_index}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(h pgoff_t nrh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjamodnameN classnameNjijl)}jo]jga#c.clean_record_shared_mapping_rangeasbuh1hhjaubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hnrh]hnr}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(hpgoff_t bitmap_pgoffh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj2bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/bubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj4bmodnameN classnameNjijl)}jo]jga#c.clean_record_shared_mapping_rangeasbuh1hhj+bubj)}(h h]h }(hhhjPbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+bubh)}(h bitmap_pgoffh]h bitmap_pgoff}(hhhj^bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+bubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(hunsigned long *bitmaph](j)}(hunsignedh]hunsigned}(hhhjwbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsbubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsbubj)}(hlongh]hlong}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsbubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsbubj= )}(hj@ h]h*}(hhhjbhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjsbubh)}(hbitmaph]hbitmap}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsbubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(hpgoff_t *starth](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjbmodnameN classnameNjijl)}jo]jga#c.clean_record_shared_mapping_rangeasbuh1hhjbubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj= )}(hj@ h]h*}(hhhjchhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjbubh)}(hstarth]hstart}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubj )}(h pgoff_t *endh](h)}(hhh]h)}(hpgoff_th]hpgoff_t}(hhhj-chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*cubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj/cmodnameN classnameNjijl)}jo]jga#c.clean_record_shared_mapping_rangeasbuh1hhj&cubj)}(h h]h }(hhhjKchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&cubj= )}(hj@ h]h*}(hhhjYchhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj&cubh)}(hendh]hend}(hhhjfchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&cubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%aubeh}(h]h ]h"]h$]h&]jj uh1j hj`hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]juh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM9hj`hhubj)}(hhh]j6)}(h3Clean and record all ptes in an address space rangeh]h3Clean and record all ptes in an address space range}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jcj3jcj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjch]h Parameters}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjcubj)}(hhh](j)}(hE``struct address_space *mapping`` The address_space we want to clean h](j)}(h!``struct address_space *mapping``h]j<)}(hjch]hstruct address_space *mapping}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjcubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjcubj)}(hhh]j6)}(h"The address_space we want to cleanh]h"The address_space we want to clean}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubj)}(h;``pgoff_t first_index`` The first page offset in the range h](j)}(h``pgoff_t first_index``h]j<)}(hj dh]hpgoff_t first_index}(hhhj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj dubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjdubj)}(hhh]j6)}(h"The first page offset in the rangeh]h"The first page offset in the range}(hj&dhj$dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj dhMhj!dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj dhMhjcubj)}(h;``pgoff_t nr`` Number of incremental page offsets to cover h](j)}(h``pgoff_t nr``h]j<)}(hjDdh]h pgoff_t nr}(hhhjFdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjBdubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj>dubj)}(hhh]j6)}(h+Number of incremental page offsets to coverh]h+Number of incremental page offsets to cover}(hj_dhj]dhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjYdhMhjZdubah}(h]h ]h"]h$]h&]uh1jhj>dubeh}(h]h ]h"]h$]h&]uh1jhjYdhMhjcubj)}(hH``pgoff_t bitmap_pgoff`` The page offset of the first bit in **bitmap** h](j)}(h``pgoff_t bitmap_pgoff``h]j<)}(hj}dh]hpgoff_t bitmap_pgoff}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{dubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjwdubj)}(hhh]j6)}(h.The page offset of the first bit in **bitmap**h](h$The page offset of the first bit in }(h$The page offset of the first bit in hjdhhhNhNubjv)}(h **bitmap**h]hbitmap}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubeh}(h]h ]h"]h$]h&]uh1j5hjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjwdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubj)}(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<)}(hjdh]hunsigned long *bitmap}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjdubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjdubj)}(hhh]j6)}(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 }(h Pointer to a bitmap of at least hjdhhhNhNubjv)}(h**nr**h]hnr}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh1 bits. The bitmap needs to cover the whole range }(h1 bits. The bitmap needs to cover the whole range hjdhhhNhNubjv)}(h**first_index**h]h first_index}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh..**first_index** + }(h..**first_index** + hjdhhhNhNubjv)}(h**nr**h]hnr}(hhhj ehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjdubh.}(hjyhjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubj)}(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<)}(hj8eh]hpgoff_t *start}(hhhj:ehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6eubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhj2eubj)}(hhh]j6)}(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 }(h*Pointer to number of the first set bit in hjQehhhNhNubjv)}(h **bitmap**h]hbitmap}(hhhjZehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjQeubh2. is modified as new bits are set by the function.}(h2. is modified as new bits are set by the function.hjQehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chMhjNeubah}(h]h ]h"]h$]h&]uh1jhj2eubeh}(h]h ]h"]h$]h&]uh1jhjMehMhjcubj)}(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<)}(hjeh]h pgoff_t *end}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM!hjeubj)}(hhh]j6)}(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 }(h-Pointer to the number of the last set bit in hjehhhNhNubjv)}(h **bitmap**h]hbitmap}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubhF. none set. The value is modified as new bits are set by the function.}(hF. none set. The value is modified as new bits are set by the function.hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehM!hjcubeh}(h]h ]h"]h$]h&]uh1jhjcubj6)}(h**Description**h]jv)}(hjeh]h Description}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1juhjeubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM#hjcubj6)}(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:}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM#hjcubjx)}(hhh](jx)}(hUAll ptes dirty when the function starts executing will end up recorded in the bitmap.h]j6)}(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.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM'hjeubah}(h]h ]h"]h$]h&]uh1jxhjeubjx)}(hYAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both. h]j6)}(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.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM)hjfubah}(h]h ]h"]h$]h&]uh1jxhjeubeh}(h]h ]h"]h$]h&]jxj@ uh1jxhjfhM'hjcubj6)}(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.}(hj8fhj6fhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM,hjcubj6)}(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.}(hjGfhjEfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM2hjcubj6)}(h **Return**h]jv)}(hjVfh]hReturn}(hhhjXfhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjTfubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM7hjcubj6)}(h*The number of dirty ptes actually cleaned.h]h*The number of dirty ptes actually cleaned.}(hjnfhjlfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5h[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mapping_dirty_helpers.chM7hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubjכ)}(h2#kernel-doc:: mm/memory-failure.c (build warnings)h]h2#kernel-doc:: mm/memory-failure.c (build warnings)}(hhhjfubah}(h]h ]h"]h$]h&]jj uh1j֛hj~ehhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_addr_in_chunk (C function)c.pcpu_addr_in_chunkhNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjfhKubh)}(hpcpu_addr_in_chunkh]h)}(hpcpu_addr_in_chunkh]hpcpu_addr_in_chunk}(hhhjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjfhKubj )}(h&(struct pcpu_chunk *chunk, void *addr)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjfhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjfubj)}(h h]h }(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjgmodnameN classnameNjijl)}jo]jr)}jejfsbc.pcpu_addr_in_chunkasbuh1hhjfubj)}(h h]h }(hhhj#ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj= )}(hj@ h]h*}(hhhj1ghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjfubh)}(hchunkh]hchunk}(hhhj>ghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjfubj )}(h void *addrh](j)}(hvoidh]hvoid}(hhhjWghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSgubj)}(h h]h }(hhhjeghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSgubj= )}(hj@ h]h*}(hhhjsghhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjSgubh)}(haddrh]haddr}(hhhjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSgubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjfubeh}(h]h ]h"]h$]h&]jj uh1j hjfhhhjfhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhjfhKubah}(h]jfah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjfhhubj)}(hhh]j6)}(h.check if the address is served from this chunkh]h.check if the address is served from this chunk}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjghhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jgj3jgj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``void *addr`` percpu address **Return** True if the address is served from this chunk.h](j6)}(h**Parameters**h]jv)}(hjgh]h Parameters}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjgubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjgubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjgh]hstruct pcpu_chunk *chunk}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjgubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhhKhjhubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjgubj)}(h``void *addr`` percpu address h](j)}(h``void *addr``h]j<)}(hj%hh]h void *addr}(hhhj'hhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj#hubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjhubj)}(hhh]j6)}(hpercpu addressh]hpercpu address}(hj@hhj>hhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hhKhj;hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj:hhKhjgubeh}(h]h ]h"]h$]h&]uh1jhjgubj6)}(h **Return**h]jv)}(hj`hh]hReturn}(hhhjbhhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^hubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjgubj6)}(h.True if the address is served from this chunk.h]h.True if the address is served from this chunk.}(hjxhhjvhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chKhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_check_block_hint (C function)c.pcpu_check_block_hinthNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5ubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM5ubh)}(hpcpu_check_block_hinth]h)}(hpcpu_check_block_hinth]hpcpu_check_block_hint}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhjhhM5ubj )}(h5(struct pcpu_block_md *block, int bits, size_t align)h](j )}(hstruct pcpu_block_md *blockh](j.)}(hj1h]hstruct}(hhhjhhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]h)}(h pcpu_block_mdh]h pcpu_block_md}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjimodnameN classnameNjijl)}jo]jr)}jejhsbc.pcpu_check_block_hintasbuh1hhjhubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj= )}(hj@ h]h*}(hhhj-ihhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhubh)}(hblockh]hblock}(hhhj:ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubj )}(hint bitsh](j)}(hinth]hint}(hhhjSihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOiubj)}(h h]h }(hhhjaihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOiubh)}(hbitsh]hbits}(hhhjoihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjimodnameN classnameNjijl)}jo]jic.pcpu_check_block_hintasbuh1hhjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(halignh]halign}(hhhjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjhubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhhjhhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhjhhM5ubah}(h]jhah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM=hjhhhubj)}(hhh]j6)}(hcheck against the contig hinth]hcheck against the contig hint}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM4hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM5ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jij3jij4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM8hjiubj)}(hhh](j)}(h2``struct pcpu_block_md *block`` block of interest h](j)}(h``struct pcpu_block_md *block``h]j<)}(hj#jh]hstruct pcpu_block_md *block}(hhhj%jhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj!jubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5hjjubj)}(hhh]j6)}(hblock of interesth]hblock of interest}(hj>jhjcontig_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](j6)}(h**Parameters**h]jv)}(hj|lh]h Parameters}(hhhj~lhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjzlubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMghjvlubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjlh]hstruct pcpu_chunk *chunk}(hhhjlhhhNhNubah}(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.chMdhjlubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMdhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMdhjlubj)}(h``int *bit_off`` chunk offset h](j)}(h``int *bit_off``h]j<)}(hjlh]h int *bit_off}(hhhjlhhhNhNubah}(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.chMehjlubj)}(hhh]j6)}(h chunk offseth]h chunk offset}(hjlhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjlhMehjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMehjlubj)}(h ``int *bits`` size of free area h](j)}(h ``int *bits``h]j<)}(hj mh]h int *bits}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj mubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMfhjmubj)}(hhh]j6)}(hsize of free areah]hsize of free area}(hj(mhj&mhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"mhMfhj#mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj"mhMfhjlubeh}(h]h ]h"]h$]h&]uh1jhjvlubj6)}(h**Description**h]jv)}(hjHmh]h Description}(hhhjJmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFmubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhhjvlubj6)}(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.}(hj`mhj^mhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhhjvlubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_next_fit_region (C function)c.pcpu_next_fit_regionhNtauh1hhj~ehhhNhNubh)}(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}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhMubh)}(hpcpu_next_fit_regionh]h)}(hpcpu_next_fit_regionh]hpcpu_next_fit_region}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhjmhMubj )}(hN(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjmhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjmubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmmodnameN classnameNjijl)}jo]jr)}jejmsbc.pcpu_next_fit_regionasbuh1hhjmubj)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj= )}(hj@ h]h*}(hhhjnhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjmubh)}(hchunkh]hchunk}(hhhj#nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjmubj )}(hint alloc_bitsh](j)}(hinth]hint}(hhhjohjfirst_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](j6)}(h**Parameters**h]jv)}(hj^oh]h Parameters}(hhhj`ohhhNhNubah}(h]h ]h"]h$]h&]uh1juhj\oubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjXoubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hj}oh]hstruct pcpu_chunk *chunk}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj{oubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjwoubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjohjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjwoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjtoubj)}(h&``int alloc_bits`` size of allocation h](j)}(h``int alloc_bits``h]j<)}(hjoh]hint alloc_bits}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjoubj)}(hhh]j6)}(hsize of allocationh]hsize of allocation}(hjohjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjtoubj)}(h0``int align`` alignment of area (max PAGE_SIZE) h](j)}(h ``int align``h]j<)}(hjoh]h int align}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjoubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjoubj)}(hhh]j6)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hj phjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphMhjtoubj)}(h``int *bit_off`` chunk offset h](j)}(h``int *bit_off``h]j<)}(hj(ph]h int *bit_off}(hhhj*phhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj&pubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj"pubj)}(hhh]j6)}(h chunk offseth]h chunk offset}(hjCphjAphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=phMhj>pubah}(h]h ]h"]h$]h&]uh1jhj"pubeh}(h]h ]h"]h$]h&]uh1jhj=phMhjtoubj)}(h ``int *bits`` size of free area h](j)}(h ``int *bits``h]j<)}(hjaph]h int *bits}(hhhjcphhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj_pubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj[pubj)}(hhh]j6)}(hsize of free areah]hsize of free area}(hj|phjzphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvphMhjwpubah}(h]h ]h"]h$]h&]uh1jhj[pubeh}(h]h ]h"]h$]h&]uh1jhjvphMhjtoubeh}(h]h ]h"]h$]h&]uh1jhjXoubj6)}(h**Description**h]jv)}(hjph]h Description}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjpubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjXoubj6)}(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.}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjXoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_mem_zalloc (C function)c.pcpu_mem_zallochNtauh1hhj~ehhhNhNubh)}(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}(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphMubj= )}(hj@ h]h*}(hhhjphhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjphhhjphMubh)}(hpcpu_mem_zalloch]h)}(hpcpu_mem_zalloch]hpcpu_mem_zalloc}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj qubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjphMubj )}(h(size_t size, gfp_t gfp)h](j )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj.qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+qubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj0qmodnameN classnameNjijl)}jo]jr)}jejqsbc.pcpu_mem_zallocasbuh1hhj'qubj)}(h h]h }(hhhjNqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'qubh)}(hsizeh]hsize}(hhhj\qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'qubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj#qubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjxqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuqubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjzqmodnameN classnameNjijl)}jo]jJqc.pcpu_mem_zallocasbuh1hhjqqubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqqubh)}(hgfph]hgfp}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqqubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj#qubeh}(h]h ]h"]h$]h&]jj uh1j hjphhhjphMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjphhubj)}(hhh]j6)}(hallocate memoryh]hallocate memory}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jqj3jqj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjqh]h Parameters}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqubj)}(hhh](j)}(h"``size_t size`` bytes to allocate h](j)}(h``size_t size``h]j<)}(hjrh]h size_t size}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj rubj)}(hhh]j6)}(hbytes to allocateh]hbytes to allocate}(hj+rhj)rhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj%rhMhj&rubah}(h]h ]h"]h$]h&]uh1jhj rubeh}(h]h ]h"]h$]h&]uh1jhj%rhMhjrubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j<)}(hjIrh]h gfp_t gfp}(hhhjKrhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGrubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjCrubj)}(hhh]j6)}(hallocation flagsh]hallocation flags}(hjdrhjbrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj^rhMhj_rubah}(h]h ]h"]h$]h&]uh1jhjCrubeh}(h]h ]h"]h$]h&]uh1jhj^rhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hjrh]h Description}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqubj6)}(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 }(h Allocate hjrhhhNhNubjv)}(h**size**h]hsize}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh bytes. If }(h bytes. If hjrhhhNhNubjv)}(h**size**h]hsize}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubh 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 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.hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqubj6)}(h **Return**h]jv)}(hjrh]hReturn}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjrubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqubj6)}(h:Pointer to the allocated area on success, NULL on failure.h]h:Pointer to the allocated area on success, NULL on failure.}(hjrhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_mem_free (C function)c.pcpu_mem_freehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(hvoid pcpu_mem_free (void *ptr)h]h)}(hvoid pcpu_mem_free(void *ptr)h](j)}(hvoidh]hvoid}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhj&shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhj%shMubh)}(h pcpu_mem_freeh]h)}(h pcpu_mem_freeh]h pcpu_mem_free}(hhhj8shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4subah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhj%shMubj )}(h (void *ptr)h]j )}(h void *ptrh](j)}(hvoidh]hvoid}(hhhjTshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPsubj)}(h h]h }(hhhjbshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPsubj= )}(hj@ h]h*}(hhhjpshhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjPsubh)}(hptrh]hptr}(hhhj}shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPsubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjLsubah}(h]h ]h"]h$]h&]jj uh1j hjshhhj%shMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhj%shMubah}(h]j sah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj shhubj)}(hhh]j6)}(h free memoryh]h free memory}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhj shhhj%shMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jsj3jsj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``void *ptr`` memory to free **Description** Free **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().h](j6)}(h**Parameters**h]jv)}(hjsh]h Parameters}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjsubj)}(hhh]j)}(h``void *ptr`` memory to free h](j)}(h ``void *ptr``h]j<)}(hjsh]h void *ptr}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjsubj)}(hhh]j6)}(hmemory to freeh]hmemory to free}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubj6)}(h**Description**h]jv)}(hj$th]h Description}(hhhj&thhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"tubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjsubj6)}(hJFree **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().h](hFree }(hFree hj:thhhNhNubjv)}(h**ptr**h]hptr}(hhhjCthhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:tubh. }(h. hj:thhhNhNubjv)}(h**ptr**h]hptr}(hhhjVthhhNhNubah}(h]h ]h"]h$]h&]uh1juhj:tubh4 should have been allocated using pcpu_mem_zalloc().}(h4 should have been allocated using pcpu_mem_zalloc().hj:thhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_chunk_relocate (C function)c.pcpu_chunk_relocatehNtauh1hhj~ehhhNhNubh)}(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}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjthM ubh)}(hpcpu_chunk_relocateh]h)}(hpcpu_chunk_relocateh]hpcpu_chunk_relocate}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjthhhjthM ubj )}(h%(struct pcpu_chunk *chunk, int oslot)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjthhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjtubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjtmodnameN classnameNjijl)}jo]jr)}jejtsbc.pcpu_chunk_relocateasbuh1hhjtubj)}(h h]h }(hhhj uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj= )}(hj@ h]h*}(hhhjuhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjtubh)}(hchunkh]hchunk}(hhhj&uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubj )}(h int osloth](j)}(hinth]hint}(hhhj?uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;uubj)}(h h]h }(hhhjMuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;uubh)}(hosloth]hoslot}(hhhj[uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;uubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjtubeh}(h]h ]h"]h$]h&]jj uh1j hjthhhjthM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjthM ubah}(h]jtah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hjthhubj)}(hhh]j6)}(h'put chunk in the appropriate chunk sloth]h'put chunk in the appropriate chunk slot}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2juj3juj4uh1hhhhj~ehNhNubjl)}(hXv**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](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjuubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjuh]hstruct pcpu_chunk *chunk}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjuubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjuubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjuhM hjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM hjuubj)}(h*``int oslot`` the previous slot it was on h](j)}(h ``int oslot``h]j<)}(hjvh]h int oslot}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjuubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM!hjuubj)}(hhh]j6)}(hthe previous slot it was onh]hthe previous slot it was on}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhM!hjvubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjvhM!hjuubeh}(h]h ]h"]h$]h&]uh1jhjuubj6)}(h**Description**h]jv)}(hj;vh]h Description}(hhhj=vhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9vubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjuubj6)}(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{sbc.pcpu_block_refresh_hintasbuh1hhjT{ubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT{ubj= )}(hj@ h]h*}(hhhj{hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjT{ubh)}(hchunkh]hchunk}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjP{ubj )}(h int indexh](j)}(hinth]hint}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hindexh]hindex}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjP{ubeh}(h]h ]h"]h$]h&]jj uh1j hj{hhhj){hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj){hMubah}(h]j{ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj{hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj{hhhj){hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j|j3j|j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj$|h]h Parameters}(hhhj&|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj"|ubah}(h]h ]h"]h$]h&]uh1j5hL/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<)}(hjC|h]hstruct pcpu_chunk *chunk}(hhhjE|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjA|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj=|ubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hj^|hj\|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjX|hMhjY|ubah}(h]h ]h"]h$]h&]uh1jhj=|ubeh}(h]h ]h"]h$]h&]uh1jhjX|hMhj:|ubj)}(h*``int index`` index of the metadata block h](j)}(h ``int index``h]j<)}(hj||h]h int index}(hhhj~|hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjz|ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjv|ubj)}(hhh]j6)}(hindex of the metadata blockh]hindex of the metadata block}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhjv|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj:|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubj6)}(h**Description**h]jv)}(hj|h]h Description}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj|ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj|ubj6)}(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.}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)pcpu_block_update_hint_alloc (C function)c.pcpu_block_update_hint_allochNtauh1hhj~ehhhNhNubh)}(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}(hhhj|hhhNhNubah}(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 }(hhhj }hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj }hM ubh)}(hpcpu_block_update_hint_alloch]h)}(hpcpu_block_update_hint_alloch]hpcpu_block_update_hint_alloc}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|hhhj }hM ubj )}(h1(struct pcpu_chunk *chunk, int bit_off, int bits)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhj9}hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj5}ubj)}(h h]h }(hhhjF}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5}ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjW}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT}ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjY}modnameN classnameNjijl)}jo]jr)}jej}sbc.pcpu_block_update_hint_allocasbuh1hhj5}ubj)}(h h]h }(hhhjw}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5}ubj= )}(hj@ h]h*}(hhhj}hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj5}ubh)}(hchunkh]hchunk}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1}ubj )}(h int bit_offh](j)}(hinth]hint}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hbit_offh]hbit_off}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1}ubj )}(hint bitsh](j)}(hinth]hint}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hbitsh]hbits}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj1}ubeh}(h]h ]h"]h$]h&]jj uh1j hj|hhhj }hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhj }hM ubah}(h]j|ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM(hj|hhubj)}(hhh]j6)}(hupdate hint on allocation pathh]hupdate hint on allocation path}(hj)~hj'~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj$~hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj }hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j?~j3j?~j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjI~h]h Parameters}(hhhjK~hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjG~ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM#hjC~ubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjh~h]hstruct pcpu_chunk *chunk}(hhhjj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjf~ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjb~ubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj}~hM hj~~ubah}(h]h ]h"]h$]h&]uh1jhjb~ubeh}(h]h ]h"]h$]h&]uh1jhj}~hM hj_~ubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j<)}(hj~h]h int bit_off}(hhhj~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.chM!hj~ubj)}(hhh]j6)}(h chunk offseth]h chunk offset}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hM!hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM!hj_~ubj)}(h``int bits`` size of request h](j)}(h ``int bits``h]j<)}(hj~h]hint bits}(hhhj~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.chM"hj~ubj)}(hhh]j6)}(hsize of requesth]hsize of request}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hM"hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM"hj_~ubeh}(h]h ]h"]h$]h&]uh1jhjC~ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$hjC~ubj6)}(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.}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$hjC~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(pcpu_block_update_hint_free (C function)c.pcpu_block_update_hint_freehNtauh1hhj~ehhhNhNubh)}(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}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhMubh)}(hpcpu_block_update_hint_freeh]h)}(hpcpu_block_update_hint_freeh]hpcpu_block_update_hint_free}(hhhj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjhhMubj )}(h1(struct pcpu_chunk *chunk, int bit_off, int bits)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej}sbc.pcpu_block_update_hint_freeasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hchunkh]hchunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int bit_offh](j)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbit_offh]hbit_off}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint bitsh](j)}(hinth]hint}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hbitsh]hbits}(hhhjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjVhhhjhhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjhhMubah}(h]jMah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjOhhubj)}(hhh]j6)}(h(updates the block hints on the free pathh]h(updates the block hints on the free path}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjȀ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.chMhjubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjhj߀hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjۀhMhj܀ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۀhMhjubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j<)}(hjh]h int bit_off}(hhhjhhhNhNubah}(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]j6)}(h chunk offseth]h chunk offset}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int bits`` size of request h](j)}(h ``int bits``h]j<)}(hj8h]hint bits}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj6ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj2ubj)}(hhh]j6)}(hsize of requesth]hsize of request}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjsh]h Description}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjqubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_is_populated (C function)c.pcpu_is_populatedhNtauh1hhj~ehhhNhNubh)}(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)}(hj7h]hbool}(hhhjǁhhhNhNubah}(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 }(hhhjՁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÁhhhjԁhM&ubh)}(hpcpu_is_populatedh]h)}(hpcpu_is_populatedh]hpcpu_is_populated}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjÁhhhjԁhM&ubj )}(h@(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#modnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_is_populatedasbuh1hhjubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjOhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hchunkh]hchunk}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int bit_offh](j)}(hinth]hint}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hbit_offh]hbit_off}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint bitsh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbitsh]hbits}(hhhjƂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int *next_offh](j)}(hinth]hint}(hhhj߂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۂubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۂubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjۂubh)}(hnext_offh]hnext_off}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۂubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjÁhhhjԁhM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjԁhM&ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM1hjhhubj)}(hhh]j6)}(h%determines if the region is populatedh]h%determines if the region is populated}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM%hj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjԁhM&ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jKj3jKj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjUh]h Parameters}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM)hjOubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjth]hstruct pcpu_chunk *chunk}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjrubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM&hjnubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjkubj)}(h``int bit_off`` chunk offset h](j)}(h``int bit_off``h]j<)}(hjh]h int bit_off}(hhhjhhhNhNubah}(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]j6)}(h chunk offseth]h chunk offset}(hjȃhjƃhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjƒhM'hjÃubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƒhM'hjkubj)}(h``int bits`` size of area h](j)}(h ``int bits``h]j<)}(hjh]hint bits}(hhhjhhhNhNubah}(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]j6)}(h size of areah]h size of area}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjkubj)}(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}(hhhj!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]j6)}(h3return value for the next offset to start searchingh]h3return value for the next offset to start searching}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj4hM)hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM)hjkubeh}(h]h ]h"]h$]h&]uh1jhjOubj6)}(h**Description**h]jv)}(hjZh]h Description}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hjOubj6)}(hAFor atomic allocations, check if the backing pages are populated.h]hAFor atomic allocations, check if the backing pages are populated.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM+hjOubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM-hjOubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM/hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_find_block_fit (C function)c.pcpu_find_block_fithNtauh1hhj~ehhhNhNubh)}(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}(hhhjƄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj„hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMEubj)}(h h]h }(hhhjՄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj„hhhjԄhMEubh)}(hpcpu_find_block_fith]h)}(hpcpu_find_block_fith]hpcpu_find_block_fit}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj„hhhjԄhMEubj )}(hG(struct pcpu_chunk *chunk, int alloc_bits, size_t align, bool pop_only)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj#modnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_find_block_fitasbuh1hhjubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjOhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hchunkh]hchunk}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint alloc_bitsh](j)}(hinth]hint}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(h alloc_bitsh]h alloc_bits}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j=c.pcpu_find_block_fitasbuh1hhjubj)}(h h]h }(hhhj˅hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hhhjمhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h bool pop_onlyh](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpop_onlyh]hpop_only}(hhhj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj„hhhjԄhMEubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjԄhMEubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMVhjhhubj)}(hhh]j6)}(h(finds the block index to start searchingh]h(finds the block index to start searching}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMDhj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjԄhMEubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jPj3jPj4uh1hhhhj~ehNhNubjl)}(hX2**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](j6)}(h**Parameters**h]jv)}(hjZh]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjXubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMHhjTubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjyh]hstruct pcpu_chunk *chunk}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjwubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMEhjsubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjpubj)}(h7``int alloc_bits`` size of request in allocation units h](j)}(h``int alloc_bits``h]j<)}(hjh]hint alloc_bits}(hhhjhhhNhNubah}(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]j6)}(h#size of request in allocation unitsh]h#size of request in allocation units}(hj͆hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdžhMFhjȆubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjdžhMFhjpubj)}(h9``size_t align`` alignment of area (max PAGE_SIZE bytes) h](j)}(h``size_t align``h]j<)}(hjh]h size_t align}(hhhjhhhNhNubah}(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.chMGhjubj)}(hhh]j6)}(h'alignment of area (max PAGE_SIZE bytes)h]h'alignment of area (max PAGE_SIZE bytes)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjpubj)}(h-``bool pop_only`` use populated regions only h](j)}(h``bool pop_only``h]j<)}(hj$h]h bool pop_only}(hhhj&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.chMHhjubj)}(hhh]j6)}(huse populated regions onlyh]huse populated regions only}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9hMHhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMHhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj6)}(h**Description**h]jv)}(hj_h]h Description}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1juhj]ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMJhjTubj6)}(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.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMJhjTubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMRhjTubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMThjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_alloc_area (C function)c.pcpu_alloc_areahNtauh1hhj~ehhhNhNubh)}(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}(hhhjˇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLJhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjڇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLJhhhjهhMubh)}(hpcpu_alloc_areah]h)}(hpcpu_alloc_areah]hpcpu_alloc_area}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLJhhhjهhMubj )}(hC(struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_alloc_areaasbuh1hhjubj)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjThhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hchunkh]hchunk}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint alloc_bitsh](j)}(hinth]hint}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(h alloc_bitsh]h alloc_bits}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jBc.pcpu_alloc_areaasbuh1hhjubj)}(h h]h }(hhhjЈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hhhjވhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int starth](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjLJhhhjهhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjÇhhhjهhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubj)}(hhh]j6)}(h#allocates an area from a pcpu_chunkh]h#allocates an area from a pcpu_chunk}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj;hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjهhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jVj3jVj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj`h]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjh]hstruct pcpu_chunk *chunk}(hhhjhhhNhNubah}(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]j6)}(hchunk of interesth]hchunk of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h7``int alloc_bits`` size of request in allocation units h](j)}(h``int alloc_bits``h]j<)}(hjh]hint alloc_bits}(hhhjhhhNhNubah}(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]j6)}(h#size of request in allocation unitsh]h#size of request in allocation units}(hjӉhjщhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj͉hMhjΉubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj͉hMhjvubj)}(h3``size_t align`` alignment of area (max PAGE_SIZE) h](j)}(h``size_t align``h]j<)}(hjh]h size_t align}(hhhjhhhNhNubah}(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]j6)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h)``int start`` bit_off to start searching h](j)}(h ``int start``h]j<)}(hj*h]h int start}(hhhj,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]j6)}(hbit_off to start searchingh]hbit_off to start searching}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hjeh]h Description}(hhhjghhhNhNubah}(h]h ]h"]h$]h&]uh1juhjcubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(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 }(hThis function takes in a hj{hhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh3 offset to begin searching to fit an allocation of }(h3 offset to begin searching to fit an allocation of hj{hhhNhNubjv)}(h**alloc_bits**h]h alloc_bits}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh with alignment }(h with alignment hj{hhhNhNubjv)}(h **align**h]halign}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh\. It needs to scan the allocation map because if it fits within the block’s contig hint, }(hZ. It needs to scan the allocation map because if it fits within the block's contig hint, hj{hhhNhNubjv)}(h **start**h]hstart}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubh will be block->first_free. This is an attempt to fill the allocation prior to breaking the contig hint. The allocation and boundary maps are updated accordingly if it confirms a valid free area.}(h will be block->first_free. This is an attempt to fill the allocation prior to breaking the contig hint. The allocation and boundary maps are updated accordingly if it confirms a valid free area.hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(h **Return**h]jv)}(hjيh]hReturn}(hhhjۊhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj׊ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(hOAllocated addr offset in **chunk** on success. -1 if no matching area is found.h](hAllocated addr offset in }(hAllocated addr offset in hjhhhNhNubjv)}(h **chunk**h]hchunk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh- on success. -1 if no matching area is found.}(h- on success. -1 if no matching area is found.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_free_area (C function)c.pcpu_free_areahNtauh1hhj~ehhhNhNubh)}(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}(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMubh)}(hpcpu_free_areah]h)}(hpcpu_free_areah]hpcpu_free_area}(hhhjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj@hMubj )}(h#(struct pcpu_chunk *chunk, int off)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjohhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjkubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejUsbc.pcpu_free_areaasbuh1hhjkubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjkubh)}(hchunkh]hchunk}(hhhjȋhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgubj )}(hint offh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݋ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݋ubh)}(hoffh]hoff}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj݋ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjgubeh}(h]h ]h"]h$]h&]jj uh1j hj.hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj@hMubah}(h]j%ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj'hhubj)}(hhh]j6)}(hfrees the corresponding offseth]hfrees the corresponding offset}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j@j3j@j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjJh]h Parameters}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjHubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjDubj)}(hhh](j)}(h/``struct pcpu_chunk *chunk`` chunk of interest h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjih]hstruct pcpu_chunk *chunk}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjgubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjcubj)}(hhh]j6)}(hchunk of interesth]hchunk of interest}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubj)}(h#``int off`` addr offset into chunk h](j)}(h ``int off``h]j<)}(hjh]hint off}(hhhjhhhNhNubah}(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]j6)}(haddr offset into chunkh]haddr offset into chunk}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubj6)}(h**Description**h]jv)}(hj݌h]h Description}(hhhjߌhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjیubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjDubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjDubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjDubj6)}(hNumber of freed bytes.h]hNumber of freed bytes.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_alloc_first_chunk (C function)c.pcpu_alloc_first_chunkhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjIhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjEhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM6ubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhM6ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjjmodnameN classnameNjijl)}jo]jr)}jepcpu_alloc_first_chunksbc.pcpu_alloc_first_chunkasbuh1hhjEhhhjVhM6ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhM6ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjEhhhjVhM6ubh)}(hpcpu_alloc_first_chunkh]h)}(hjh]hpcpu_alloc_first_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhjVhM6ubj )}(h&(unsigned long tmp_addr, int map_size)h](j )}(hunsigned long tmp_addrh](j)}(hunsignedh]hunsigned}(hhhjÍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjэhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjߍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htmp_addrh]htmp_addr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int map_sizeh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmap_sizeh]hmap_size}(hhhj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjEhhhjVhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhjVhM6ubah}(h]j<ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMAhj>hhubj)}(hhh]j6)}(h)creates chunks that serve the first chunkh]h)creates chunks that serve the first chunk}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM5hjXhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjVhM6ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jsj3jsj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj}h]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj{ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjwubj)}(hhh](j)}(h:``unsigned long tmp_addr`` the start of the region served h](j)}(h``unsigned long tmp_addr``h]j<)}(hjh]hunsigned long tmp_addr}(hhhjhhhNhNubah}(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.chM6hjubj)}(hhh]j6)}(hthe start of the region servedh]hthe start of the region served}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h+``int map_size`` size of the region served h](j)}(h``int map_size``h]j<)}(hjՎh]h int map_size}(hhhj׎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.chM7hjώubj)}(hhh]j6)}(hsize of the region servedh]hsize of the region served}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjώubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjwubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjwubj6)}(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 }(hoThis is responsible for creating the chunks that serve the first chunk. The base_addr is page aligned down of hj&hhhNhNubjv)}(h **tmp_addr**h]htmp_addr}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubh while the region end is page aligned up. Offsets are kept track of to determine the region served. All this is done to appease the bitmap allocator in avoiding partial blocks.}(h while the region end is page aligned up. Offsets are kept track of to determine the region served. All this is done to appease the bitmap allocator in avoiding partial blocks.hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9hjwubj6)}(h **Return**h]jv)}(hjKh]hReturn}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjIubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM>hjwubj6)}(h9Chunk serving the region at **tmp_addr** of **map_size**.h](hChunk serving the region at }(hChunk serving the region at hjahhhNhNubjv)}(h **tmp_addr**h]htmp_addr}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubh of }(h of hjahhhNhNubjv)}(h **map_size**h]hmap_size}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjaubh.}(hjyhjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM@hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_chunk_populated (C function)c.pcpu_chunk_populatedhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjŏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjďhMubh)}(hpcpu_chunk_populatedh]h)}(hpcpu_chunk_populatedh]hpcpu_chunk_populated}(hhhj׏hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӏubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjďhMubj )}(h8(struct pcpu_chunk *chunk, int page_start, int page_end)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejُsbc.pcpu_chunk_populatedasbuh1hhjubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj?hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hchunkh]hchunk}(hhhjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hint page_starth](j)}(hinth]hint}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(h page_starth]h page_start}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int page_endh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpage_endh]hpage_end}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjďhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjďhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubj)}(hhh]j6)}(hpost-population bookkeepingh]hpost-population bookkeeping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjސhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjďhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1ju3hjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h<``struct pcpu_chunk *chunk`` pcpu_chunk which got populated h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hj"h]hstruct pcpu_chunk *chunk}(hhhj$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.chMhjubj)}(hhh]j6)}(hpcpu_chunk which got populatedh]hpcpu_chunk which got populated}(hj=hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h"``int page_start`` the start page h](j)}(h``int page_start``h]j<)}(hj[h]hint page_start}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjYubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjUubj)}(hhh]j6)}(hthe start pageh]hthe start page}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(h``int page_end`` the end page h](j)}(h``int page_end``h]j<)}(hjh]h int page_end}(hhhjhhhNhNubah}(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]j6)}(h the end pageh]h the end page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjϑh]h Description}(hhhjёhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj͑ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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 [}(h Pages in [hjhhhNhNubjv)}(h**page_start**h]h page_start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh&,**page_end**) have been populated to }(h&,**page_end**) have been populated to hjhhhNhNubjv)}(h **chunk**h]hchunk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhd. Update the bookkeeping information accordingly. Must be called after each successful population.}(hd. Update the bookkeeping information accordingly. Must be called after each successful population.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_chunk_depopulated (C function)c.pcpu_chunk_depopulatedhNtauh1hhj~ehhhNhNubh)}(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}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjIhMubh)}(hpcpu_chunk_depopulatedh]h)}(hpcpu_chunk_depopulatedh]hpcpu_chunk_depopulated}(hhhj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhMubj )}(h8(struct pcpu_chunk *chunk, int page_start, int page_end)h](j )}(hstruct pcpu_chunk *chunkh](j.)}(hj1h]hstruct}(hhhjxhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjtubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej^sbc.pcpu_chunk_depopulatedasbuh1hhjtubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj= )}(hj@ h]h*}(hhhjĒhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjtubh)}(hchunkh]hchunk}(hhhjђhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjpubj )}(hint page_starth](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h page_starth]h page_start}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjpubj )}(h int page_endh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpage_endh]hpage_end}(hhhj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjpubeh}(h]h ]h"]h$]h&]jj uh1j hj7hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhMubah}(h]j.ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj0hhubj)}(hhh]j6)}(hpost-depopulation bookkeepingh]hpost-depopulation bookkeeping}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j~j3j~j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h>``struct pcpu_chunk *chunk`` pcpu_chunk which got depopulated h](j)}(h``struct pcpu_chunk *chunk``h]j<)}(hjh]hstruct pcpu_chunk *chunk}(hhhjhhhNhNubah}(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]j6)}(h pcpu_chunk which got depopulatedh]h pcpu_chunk which got depopulated}(hj“hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(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<)}(hjh]hint page_start}(hhhjhhhNhNubah}(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]j6)}(hthe start pageh]hthe start page}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjړubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int page_end`` the end page h](j)}(h``int page_end``h]j<)}(hjh]h int page_end}(hhhjhhhNhNubah}(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]j6)}(h the end pageh]h the end page}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjTh]h Description}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjRubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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 [}(h Pages in [hjjhhhNhNubjv)}(h**page_start**h]h page_start}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubh*,**page_end**) have been depopulated from }(h*,**page_end**) have been depopulated from hjjhhhNhNubjv)}(h **chunk**h]hchunk}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjjubhe. Update the bookkeeping information accordingly. Must be called after each successful depopulation.}(he. Update the bookkeeping information accordingly. Must be called after each successful depopulation.hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_chunk_addr_search (C function)c.pcpu_chunk_addr_searchhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h7struct pcpu_chunk * pcpu_chunk_addr_search (void *addr)h]h)}(h5struct pcpu_chunk *pcpu_chunk_addr_search(void *addr)h](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM9ubj)}(h h]h }(hhhjΔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj͔hM9ubh)}(hhh]h)}(h pcpu_chunkh]h pcpu_chunk}(hhhjߔhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܔubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jepcpu_chunk_addr_searchsbc.pcpu_chunk_addr_searchasbuh1hhjhhhj͔hM9ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj͔hM9ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhj͔hM9ubh)}(hpcpu_chunk_addr_searchh]h)}(hjh]hpcpu_chunk_addr_search}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj͔hM9ubj )}(h (void *addr)h]j )}(h void *addrh](j)}(hvoidh]hvoid}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj= )}(hj@ h]h*}(hhhjVhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj6ubh)}(haddrh]haddr}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj2ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj͔hM9ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj͔hM9ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMAhjhhubj)}(hhh]j6)}(h,determine chunk containing specified addressh]h,determine chunk containing specified address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj͔hM9ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM<hjubj)}(hhh]j)}(hC``void *addr`` address for which the chunk needs to be determined. h](j)}(h``void *addr``h]j<)}(hjϕh]h void *addr}(hhhjѕ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.chM9hjɕubj)}(hhh]j6)}(h3address for which the chunk needs to be determined.h]h3address for which the chunk needs to be determined.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjɕubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjƕubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM;hjubj6)}(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.}(hj"hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM;hjubj6)}(h **Return**h]jv)}(hj1h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM>hjubj6)}(hThe address of the found chunk.h]hThe address of the found chunk.}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_alloc (C function) c.pcpu_allochNtauh1hhj~ehhhNhNubh)}(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}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhMubh__percpu}(hhhjrhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhMubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjrhhhjhMubh)}(h pcpu_alloch]h)}(h pcpu_alloch]h pcpu_alloc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhjhMubj )}(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}(hhhjՖhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjҖubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjזmodnameN classnameNjijl)}jo]jr)}jejsb c.pcpu_allocasbuh1hhjΖubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΖubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΖubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjʖubj )}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj!modnameN classnameNjijl)}jo]j c.pcpu_allocasbuh1hhjubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(halignh]halign}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjʖubj )}(h bool reservedh](j)}(hj7h]hbool}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hreservedh]hreserved}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjʖubj )}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j c.pcpu_allocasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hgfph]hgfp}(hhhjǗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjʖubeh}(h]h ]h"]h$]h&]jj uh1j hjrhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjkhhubj)}(hhh]j6)}(hthe percpu allocatorh]hthe percpu allocator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh](j)}(h2``size_t size`` size of area to allocate in bytes h](j)}(h``size_t size``h]j<)}(hj3h]h size_t size}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj1ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj-ubj)}(hhh]j6)}(h!size of area to allocate in bytesh]h!size of area to allocate in bytes}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h3``size_t align`` alignment of area (max PAGE_SIZE) h](j)}(h``size_t align``h]j<)}(hjlh]h size_t align}(hhhjnhhhNhNubah}(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.chMhjfubj)}(hhh]j6)}(h!alignment of area (max PAGE_SIZE)h]h!alignment of area (max PAGE_SIZE)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(h@``bool reserved`` allocate from the reserved chunk if available h](j)}(h``bool reserved``h]j<)}(hjh]h bool reserved}(hhhjhhhNhNubah}(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]j6)}(h-allocate from the reserved chunk if availableh]h-allocate from the reserved chunk if available}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j<)}(hjޘh]h gfp_t gfp}(hhhjhhhNhNubah}(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]j6)}(hallocation flagsh]hallocation flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjؘubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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 }(hAllocate percpu area of hj/hhhNhNubjv)}(h**size**h]hsize}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh bytes aligned at }(h bytes aligned at hj/hhhNhNubjv)}(h **align**h]halign}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh. If }(h. If hj/hhhNhNubjv)}(h**gfp**h]hgfp}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh doesn’t contain }(h doesn't contain hj/hhhNhNubj<)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj/ubh, the allocation is atomic. If }(h, the allocation is atomic. If hj/hhhNhNubjv)}(h**gfp**h]hgfp}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj/ubh] has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.}(h] has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(hAPercpu pointer to the allocated area on success, NULL on failure.h]hAPercpu pointer to the allocated area on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_balance_free (C function)c.pcpu_balance_freehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h(void pcpu_balance_free (bool empty_only)h]h)}(h'void pcpu_balance_free(bool empty_only)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_balance_freeh]h)}(hpcpu_balance_freeh]hpcpu_balance_free}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(bool empty_only)h]j )}(hbool empty_onlyh](j)}(hj7h]hbool}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h empty_onlyh]h empty_only}(hhhj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjݙhhhjhMubah}(h]jؙah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjڙhhubj)}(hhh]j6)}(h manage the amount of free chunksh]h manage the amount of free chunks}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjڙhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hXD**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj)}(hhh]j)}(hE``bool empty_only`` free chunks only if there are no populated pages h](j)}(h``bool empty_only``h]j<)}(hjh]hbool empty_only}(hhhjhhhNhNubah}(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]j6)}(h0free chunks only if there are no populated pagesh]h0free chunks only if there are no populated pages}(hjĚhjšhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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 }(hIf empty_only is hjhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(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.}(h, 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&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_balance_populated (C function)c.pcpu_balance_populatedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h"void pcpu_balance_populated (void)h]h)}(h!void pcpu_balance_populated(void)h](j)}(hvoidh]hvoid}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubh)}(hpcpu_balance_populatedh]h)}(hpcpu_balance_populatedh]hpcpu_balance_populated}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjrhMubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj`hhhjrhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjYhhubj)}(hhh]j6)}(h$manage the amount of populated pagesh]h$manage the amount of populated pages}(hjΛhj̛hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjɛhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjhhhNhNubah}(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.chMhjubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjHh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjFubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(hXFMaintain a certain amount of populated pages to satisfy atomic allocations. It is possible that this is called when physical memory is scarce causing OOM killer to be triggered. We should avoid doing so until an actual allocation causes the failure as it is possible that requests can be serviced from already backed regions.h]hXFMaintain a certain amount of populated pages to satisfy atomic allocations. It is possible that this is called when physical memory is scarce causing OOM killer to be triggered. We should avoid doing so until an actual allocation causes the failure as it is possible that requests can be serviced from already backed regions.}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(h **Context**h]jv)}(hjoh]hContext}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjmubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_reclaim_populated (C function)c.pcpu_reclaim_populatedhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h"void pcpu_reclaim_populated (void)h]h)}(h!void pcpu_reclaim_populated(void)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM'ubj)}(h h]h }(hhhjÜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjœhM'ubh)}(hpcpu_reclaim_populatedh]h)}(hpcpu_reclaim_populatedh]hpcpu_reclaim_populated}(hhhj՜hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjќubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjœhM'ubj )}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjœhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjœhM'ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM4hjhhubj)}(hhh]j6)}(h3scan over to_depopulate chunks and free empty pagesh]h3scan over to_depopulate chunks and free empty pages}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2j4j3j4j4uh1hhhhj~ehNhNubjl)}(hXM**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](j6)}(h**Parameters**h]jv)}(hj>h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj<ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM*hj8ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j<)}(hj]h]hvoid}(hhhj_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.chM-hjWubj)}(hhh]j6)}(h no argumentsh]h no arguments}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjrhM-hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM-hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM/hj8ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM(hj8ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM0hj8ubj6)}(h&pcpu_lock (can be dropped temporarily)h]h&pcpu_lock (can be dropped temporarily)}(hjםhj՝hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM2hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ pcpu_balance_workfn (C function)c.pcpu_balance_workfnhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h3void pcpu_balance_workfn (struct work_struct *work)h]h)}(h2void pcpu_balance_workfn(struct work_struct *work)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_balance_workfnh]h)}(hpcpu_balance_workfnh]hpcpu_balance_workfn}(hhhj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct work_struct *work)h]j )}(hstruct work_struct *workh](j.)}(hj1h]hstruct}(hhhjAhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj=ubj)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]h)}(h work_structh]h work_struct}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjamodnameN classnameNjijl)}jo]jr)}jej'sbc.pcpu_balance_workfnasbuh1hhj=ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj=ubh)}(hworkh]hwork}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj9ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubj)}(hhh]j6)}(h4manage the amount of free chunks and populated pagesh]h4manage the amount of free chunks and populated pages}(hjǞhjŞhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jݞj3jݞj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjhhhNhNubah}(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]j6)}(hunusedh]hunused}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjAh]h Description}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1juhj?ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubj6)}(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.}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌpcpu_alloc_size (C function)c.pcpu_alloc_sizehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h+size_t pcpu_alloc_size (void __percpu *ptr)h]h)}(h*size_t pcpu_alloc_size(void __percpu *ptr)h](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jepcpu_alloc_sizesbc.pcpu_alloc_sizeasbuh1hhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hpcpu_alloc_sizeh]h)}(hjh]hpcpu_alloc_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(void __percpu *ptr)h]j )}(hvoid __percpu *ptrh](j)}(hvoidh]hvoid}(hhhj؟hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԟubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԟubh__percpu}(hhhjԟhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԟubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjԟubh)}(hptrh]hptr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԟubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjПubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhMubah}(h]jyah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj{hhubj)}(hhh]j6)}(h#the size of the dynamic percpu areah]h#the size of the dynamic percpu area}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jVj3jVj4uh1hhhhj~ehNhNubjl)}(hXZ**Parameters** ``void __percpu *ptr`` pointer to the dynamic percpu area **Description** Returns the size of the **ptr** allocation. This is undefined for statically defined percpu variables as there is no corresponding chunk->bound_map. **Return** The size of the dynamic percpu area. **Context** Can be called from atomic context.h](j6)}(h**Parameters**h]jv)}(hj`h]h Parameters}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj)}(hhh]j)}(h:``void __percpu *ptr`` pointer to the dynamic percpu area h](j)}(h``void __percpu *ptr``h]j<)}(hjh]hvoid __percpu *ptr}(hhhjhhhNhNubah}(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]j6)}(h"pointer to the dynamic percpu areah]h"pointer to the dynamic percpu area}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(hReturns the size of the **ptr** allocation. This is undefined for statically defined percpu variables as there is no corresponding chunk->bound_map.h](hReturns the size of the }(hReturns the size of the hjРhhhNhNubjv)}(h**ptr**h]hptr}(hhhj٠hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjРubhv allocation. This is undefined for statically defined percpu variables as there is no corresponding chunk->bound_map.}(hv allocation. This is undefined for statically defined percpu variables as there is no corresponding chunk->bound_map.hjРhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(h$The size of the dynamic percpu area.h]h$The size of the dynamic percpu area.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubj6)}(h"Can be called from atomic context.h]h"Can be called from atomic context.}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfree_percpu (C function) c.free_percpuhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h%void free_percpu (void __percpu *ptr)h]h)}(h$void free_percpu(void __percpu *ptr)h](j)}(hvoidh]hvoid}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjohMubh)}(h free_percpuh]h)}(h free_percpuh]h free_percpu}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjohMubj )}(h(void __percpu *ptr)h]j )}(hvoid __percpu *ptrh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__percpu}(hhhjhhhNhNubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj̡hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hptrh]hptr}(hhhj١hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hj]hhhjohMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohMubah}(h]jTah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjVhhubj)}(hhh]j6)}(hfree percpu areah]hfree percpu area}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``void __percpu *ptr`` pointer to area to free **Description** Free percpu area **ptr**. **Context** Can be called from atomic context.h](j6)}(h**Parameters**h]jv)}(hj&h]h Parameters}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj$ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubj)}(hhh]j)}(h/``void __percpu *ptr`` pointer to area to free h](j)}(h``void __percpu *ptr``h]j<)}(hjEh]hvoid __percpu *ptr}(hhhjGhhhNhNubah}(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.chMhj?ubj)}(hhh]j6)}(hpointer to area to freeh]hpointer to area to free}(hj`hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj~ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubj6)}(hFree percpu area **ptr**.h](hFree percpu area }(hFree percpu area hjhhhNhNubjv)}(h**ptr**h]hptr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubj6)}(h **Context**h]jv)}(hjh]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubj6)}(h"Can be called from atomic context.h]h"Can be called from atomic context.}(hjҢhjТhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%is_kernel_percpu_address (C function)c.is_kernel_percpu_addresshNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h2bool is_kernel_percpu_address (unsigned long addr)h]h)}(h1bool is_kernel_percpu_address(unsigned long addr)h](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM! ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM! ubh)}(his_kernel_percpu_addressh]h)}(his_kernel_percpu_addressh]his_kernel_percpu_address}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM! ubj )}(h(unsigned long addr)h]j )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hlongh]hlong}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(haddrh]haddr}(hhhjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj3ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhj hM! ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hM! ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM* hjhhubj)}(hhh]j6)}(h/test whether address is from static percpu areah]h/test whether address is from static percpu area}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(hXD**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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhj£hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM$ hjubj)}(hhh]j)}(h'``unsigned long addr`` address to test h](j)}(h``unsigned long addr``h]j<)}(hjߣh]hunsigned long addr}(hhhjhhhNhNubah}(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]j6)}(haddress to testh]haddress to test}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM! hjubah}(h]h ]h"]h$]h&]uh1jhj٣ubeh}(h]h ]h"]h$]h&]uh1jhjhM! hj֣ubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM# hjubj6)}(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 }(h Test whether hj0hhhNhNubjv)}(h**addr**h]haddr}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj0ubh belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().}(h belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM# hjubj6)}(h **Return**h]jv)}(hjUh]hReturn}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM' hjubj6)}(hO``true`` if **addr** is from in-kernel static percpu area, ``false`` otherwise.h](j<)}(h``true``h]htrue}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubh if }(h if hjkhhhNhNubjv)}(h**addr**h]haddr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh' is from in-kernel static percpu area, }(h' is from in-kernel static percpu area, hjkhhhNhNubj<)}(h ``false``h]hfalse}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubh otherwise.}(h otherwise.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM) hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ per_cpu_ptr_to_phys (C function)c.per_cpu_ptr_to_physhNtauh1hhj~ehhhNhNubh)}(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}(hhhjҤhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϤubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjԤmodnameN classnameNjijl)}jo]jr)}jeper_cpu_ptr_to_physsbc.per_cpu_ptr_to_physasbuh1hhjˤhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM1 ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˤhhhjhM1 ubh)}(hper_cpu_ptr_to_physh]h)}(hjh]hper_cpu_ptr_to_phys}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjˤhhhjhM1 ubj )}(h (void *addr)h]j )}(h void *addrh](j)}(hvoidh]hvoid}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj=hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(haddrh]haddr}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjˤhhhjhM1 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjǤhhhjhM1 ubah}(h]j¤ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMF hjĤhhubj)}(hhh]j6)}(h5convert translated percpu address to physical addressh]h5convert translated percpu address to physical address}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM0 hjrhhubah}(h]h ]h"]h$]h&]uh1jhjĤhhhjhM1 ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM4 hjubj)}(hhh]j)}(h?``void *addr`` the address to be converted to physical address h](j)}(h``void *addr``h]j<)}(hjh]h void *addr}(hhhjhhhNhNubah}(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.chM1 hjubj)}(hhh]j6)}(h/the address to be converted to physical addressh]h/the address to be converted to physical address}(hjѥhjϥhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj˥hM1 hj̥ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˥hM1 hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM3 hjubj6)}(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 }(hGiven hjhhhNhNubjv)}(h**addr**h]haddr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 }(h 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 hjhhhNhNubjv)}(h**addr**h]haddr}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh* stays valid until this function finishes.}(h* stays valid until this function finishes.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM3 hjubj6)}(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?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM8 hjubj6)}(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.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM= hjubj6)}(h **Return**h]jv)}(hj]h]hReturn}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj[ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMC hjubj6)}(h"The physical address for **addr**.h](hThe physical address for }(hThe physical address for hjshhhNhNubjv)}(h**addr**h]haddr}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubh.}(hjyhjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chME hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_alloc_alloc_info (C function)c.pcpu_alloc_alloc_infohNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMt ubj)}(h h]h }(hhhjæhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj¦hMt ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hhhjԦhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѦubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj֦modnameN classnameNjijl)}jo]jr)}jepcpu_alloc_alloc_infosbc.pcpu_alloc_alloc_infoasbuh1hhjhhhj¦hMt ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj¦hMt ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhj¦hMt ubh)}(hpcpu_alloc_alloc_infoh]h)}(hjh]hpcpu_alloc_alloc_info}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj¦hMt ubj )}(h(int nr_groups, int nr_units)h](j )}(h int nr_groupsh](j)}(hinth]hint}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(h nr_groupsh]h nr_groups}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj'ubj )}(h int nr_unitsh](j)}(hinth]hint}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hnr_unitsh]hnr_units}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj'ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj¦hMt ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj¦hMt ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubj)}(hhh]j6)}(hallocate percpu allocation infoh]hallocate percpu allocation info}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMs hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj¦hMt ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jçj3jçj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjͧh]h Parameters}(hhhjϧhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj˧ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMw hjǧubj)}(hhh](j)}(h'``int nr_groups`` the number of groups h](j)}(h``int nr_groups``h]j<)}(hjh]h int nr_groups}(hhhjhhhNhNubah}(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.chMt hjubj)}(hhh]j6)}(hthe number of groupsh]hthe number of groups}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMt hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMt hjubj)}(h%``int nr_units`` the number of units h](j)}(h``int nr_units``h]j<)}(hj%h]h int nr_units}(hhhj'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.chMu hjubj)}(hhh]j6)}(hthe number of unitsh]hthe number of units}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj:hMu hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMu hjubeh}(h]h ]h"]h$]h&]uh1jhjǧubj6)}(h**Description**h]jv)}(hj`h]h Description}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj^ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMw hjǧubj6)}(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 }(h&Allocate ai which is large enough for hjvhhhNhNubjv)}(h **nr_groups**h]h nr_groups}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubh groups containing }(h groups containing hjvhhhNhNubjv)}(h **nr_units**h]hnr_units}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubhd units. The returned ai’s groups[0].cpu_map points to the cpu_map array which is long enough for }(hb units. The returned ai's groups[0].cpu_map points to the cpu_map array which is long enough for hjvhhhNhNubjv)}(h **nr_units**h]hnr_units}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjvubhn and filled with NR_CPUS. It’s the caller’s responsibility to initialize cpu_map pointer of other groups.}(hj and filled with NR_CPUS. It's the caller's responsibility to initialize cpu_map pointer of other groups.hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chMw hjǧubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjèhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM} hjǧubj6)}(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.}(hj٨hjרhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjǧubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_free_alloc_info (C function)c.pcpu_free_alloc_infohNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hpcpu_free_alloc_infoh]h)}(hpcpu_free_alloc_infoh]hpcpu_free_alloc_info}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(struct pcpu_alloc_info *ai)h]j )}(hstruct pcpu_alloc_info *aih](j.)}(hj1h]hstruct}(hhhjChhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj?ubj)}(h h]h }(hhhjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hhhjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjcmodnameN classnameNjijl)}jo]jr)}jej)sbc.pcpu_free_alloc_infoasbuh1hhj?ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj?ubh)}(haih]hai}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj;ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubj)}(hhh]j6)}(hfree percpu allocation infoh]hfree percpu allocation info}(hjɩhjǩhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jߩj3jߩj4uh1hhhhj~ehNhNubjl)}(h**Parameters** ``struct pcpu_alloc_info *ai`` pcpu_alloc_info to free **Description** Free **ai** which was allocated by pcpu_alloc_alloc_info().h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhj 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]j6)}(hpcpu_alloc_info to freeh]hpcpu_alloc_info to free}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjCh]h Description}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjAubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(h;Free **ai** which was allocated by pcpu_alloc_alloc_info().h](hFree }(hFree hjYhhhNhNubjv)}(h**ai**h]hai}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjYubh0 which was allocated by pcpu_alloc_alloc_info().}(h0 which was allocated by pcpu_alloc_alloc_info().hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!pcpu_dump_alloc_info (C function)c.pcpu_dump_alloc_infohNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hpcpu_dump_alloc_infoh]h)}(hpcpu_dump_alloc_infoh]hpcpu_dump_alloc_info}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h3(const char *lvl, const struct pcpu_alloc_info *ai)h](j )}(hconst char *lvlh](j.)}(hjh]hconst}(hhhj٪hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjժubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjժubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjժubh)}(hlvlh]hlvl}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjժubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjѪubj )}(h const struct pcpu_alloc_info *aih](j.)}(hjh]hconst}(hhhj6hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2ubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj.)}(hj1h]hstruct}(hhhjQhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj2ubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hhhjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjqmodnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_dump_alloc_infoasbuh1hhj2ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj2ubh)}(haih]hai}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjѪubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubj)}(hhh]j6)}(h+print out information about pcpu_alloc_infoh]h+print out information about pcpu_alloc_info}(hj׫hjիhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjhhhNhNubah}(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]j6)}(hloglevelh]hloglevel}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM hj ubj)}(h=``const struct pcpu_alloc_info *ai`` allocation info to dump h](j)}(h$``const struct pcpu_alloc_info *ai``h]j<)}(hjOh]h const struct pcpu_alloc_info *ai}(hhhjQhhhNhNubah}(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]j6)}(hallocation info to dumph]hallocation info to dump}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(h:Print out information about **ai** using loglevel **lvl**.h](hPrint out information about }(hPrint out information about hjhhhNhNubjv)}(h**ai**h]hai}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh using loglevel }(h using loglevel hjhhhNhNubjv)}(h**lvl**h]hlvl}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_setup_first_chunk (C function)c.pcpu_setup_first_chunkhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hpcpu_setup_first_chunkh]h)}(hpcpu_setup_first_chunkh]hpcpu_setup_first_chunk}(hhhjhhhNhNubah}(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.)}(hjh]hconst}(hhhj2hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj.)}(hj1h]hstruct}(hhhjMhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj.ubj)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hhhjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmmodnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_setup_first_chunkasbuh1hhj.ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj.ubh)}(haih]hai}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj*ubj )}(hvoid *base_addrh](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjͭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjۭhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(h base_addrh]h base_addr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj*ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubj)}(hhh]j6)}(h!initialize the first percpu chunkh]h!initialize the first percpu chunk}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/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&]j1j,j2j+j3j+j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj5h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj3ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj)}(hhh](j)}(h]``const struct pcpu_alloc_info *ai`` pcpu_alloc_info describing how to percpu area is shaped h](j)}(h$``const struct pcpu_alloc_info *ai``h]j<)}(hjTh]h const struct pcpu_alloc_info *ai}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjRubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjNubj)}(hhh]j6)}(h7pcpu_alloc_info describing how to percpu area is shapedh]h7pcpu_alloc_info describing how to percpu area is shaped}(hjohjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjihM hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM hjKubj)}(h#``void *base_addr`` mapped address h](j)}(h``void *base_addr``h]j<)}(hjh]hvoid *base_addr}(hhhjhhhNhNubah}(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]j6)}(hmapped addressh]hmapped address}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubj6)}(h**Description**h]jv)}(hjȮh]h Description}(hhhjʮhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjƮubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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.}(hjhjޮhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(ho**ai** contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.h](jv)}(h**ai**h]hai}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhi contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.}(hi contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(h6**ai->static_size** is the size of static percpu area.h](jv)}(h**ai->static_size**h]hai->static_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubh# is the size of static percpu area.}(h# is the size of static percpu area.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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](jv)}(h**ai->reserved_size**h]hai->reserved_size}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj)ubhX, if non-zero, specifies the amount of bytes to reserve after the static area in the first chunk. This reserves the first chunk such that it’s available only through reserved percpu allocation. This is primarily used to serve module percpu static areas on architectures where the addressing model has limited offset range for symbol relocations to guarantee module percpu symbols fall inside the relocatable range.}(hX, if non-zero, specifies the amount of bytes to reserve after the static area in the first chunk. This reserves the first chunk such that it's available only through reserved percpu allocation. This is primarily used to serve module percpu static areas on architectures where the addressing model has limited offset range for symbol relocations to guarantee module percpu symbols fall inside the relocatable range.hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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](jv)}(h**ai->dyn_size**h]h ai->dyn_size}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubhg determines the number of bytes available for dynamic allocation in the first chunk. The area between }(hg determines the number of bytes available for dynamic allocation in the first chunk. The area between hjGhhhNhNubjv)}(h**ai->static_size**h]hai->static_size}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh + }(h + hjGhhhNhNubjv)}(h**ai->reserved_size**h]hai->reserved_size}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh + }(h + hjGhhhNhNubjv)}(h**ai->dyn_size**h]h ai->dyn_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh and }(h and hjGhhhNhNubjv)}(h**ai->unit_size**h]h ai->unit_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjGubh is unused.}(h is unused.hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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](jv)}(h**ai->unit_size**h]h ai->unit_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhR specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than }(hR specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than hjhhhNhNubjv)}(h**ai->static_size**h]hai->static_size}(hhhjȯhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**ai->reserved_size**h]hai->reserved_size}(hhhjۯhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh + }(h + hjhhhNhNubjv)}(h**ai->dyn_size**h]h ai->dyn_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(hQ**ai->atom_size** is the allocation atom size and used as alignment for vm areas.h](jv)}(h**ai->atom_size**h]h ai->atom_size}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh@ is the allocation atom size and used as alignment for vm areas.}(h@ is the allocation atom size and used as alignment for vm areas.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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](jv)}(h**ai->alloc_size**h]hai->alloc_size}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh/ is the allocation size and always multiple of }(h/ is the allocation size and always multiple of hj%hhhNhNubjv)}(h**ai->atom_size**h]h ai->atom_size}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh. This is larger than }(h. This is larger than hj%hhhNhNubjv)}(h**ai->atom_size**h]h ai->atom_size}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh if }(h if hj%hhhNhNubjv)}(h**ai->unit_size**h]h ai->unit_size}(hhhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh is larger than }(h is larger than hj%hhhNhNubjv)}(h**ai->atom_size**h]h ai->atom_size}(hhhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj%ubh.}(hjyhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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](jv)}(h**ai->nr_groups**h]h ai->nr_groups}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh and }(h and hjhhhNhNubjv)}(h**ai->groups**h]h ai->groups}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh 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 }(h 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 hjhhhNhNubjv)}(h**ai->nr_groups**h]h ai->nr_groups}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh9 is zero, a single group containing all units is assumed.}(h9 is zero, a single group containing all units is assumed.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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 }(h1The caller should have mapped the first chunk at hjҰhhhNhNubjv)}(h **base_addr**h]h base_addr}(hhhj۰hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjҰubh% and copied static data to each unit.}(h% and copied static data to each unit.hjҰhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_build_alloc_info (C function)c.pcpu_build_alloc_infohNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhj$hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj hhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hM ubh)}(hhh]h)}(hpcpu_alloc_infoh]hpcpu_alloc_info}(hhhjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjEmodnameN classnameNjijl)}jo]jr)}jepcpu_build_alloc_infosbc.pcpu_build_alloc_infoasbuh1hhj hhhj1hM ubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hM ubj= )}(hj@ h]h*}(hhhjrhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj hhhj1hM ubh)}(hpcpu_build_alloc_infoh]h)}(hjah]hpcpu_build_alloc_info}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj1hM 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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j_c.pcpu_build_alloc_infoasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h reserved_sizeh]h reserved_size}(hhhjͱhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hsize_t dyn_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j_c.pcpu_build_alloc_infoasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdyn_sizeh]hdyn_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hsize_t atom_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj3modnameN classnameNjijl)}jo]j_c.pcpu_build_alloc_infoasbuh1hhj*ubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(h atom_sizeh]h atom_size}(hhhj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(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}(hhhjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj{modnameN classnameNjijl)}jo]j_c.pcpu_build_alloc_infoasbuh1hhjrubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hcpu_distance_fnh]hcpu_distance_fn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hj hhhj1hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hM ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjhhubj)}(hhh]j6)}(h3build alloc_info considering distances between CPUsh]h3build alloc_info considering distances between CPUs}(hjҲhjвhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjͲhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/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}(hhhjhhhNhNubah}(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]j6)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(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<)}(hjJh]hsize_t dyn_size}(hhhjLhhhNhNubah}(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]j6)}(h1minimum free size for dynamic allocation in bytesh]h1minimum free size for dynamic allocation in bytes}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj_hM hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(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<)}(hjh]hsize_t atom_size}(hhhjhhhNhNubah}(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]j6)}(hallocation atom sizeh]hallocation atom size}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(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}(hhhjhhhNhNubah}(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]j6)}(h5callback to determine distance between cpus, optionalh]h5callback to determine distance between cpus, optional}(hj׳hjճhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjѳhM hjҳubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѳhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(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.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(h **Return**h]jv)}(hj-h]hReturn}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj+ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubj6)}(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.}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#pcpu_embed_first_chunk (C function)c.pcpu_embed_first_chunkhNtauh1hhj~ehhhNhNubh)}(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}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjhM ubh)}(hpcpu_embed_first_chunkh]h)}(hpcpu_embed_first_chunkh]hpcpu_embed_first_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhM 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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_embed_first_chunkasbuh1hhjubj)}(h h]h }(hhhjҴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h reserved_sizeh]h reserved_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hsize_t dyn_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jδc.pcpu_embed_first_chunkasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdyn_sizeh]hdyn_size}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hsize_t atom_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjFmodnameN classnameNjijl)}jo]jδc.pcpu_embed_first_chunkasbuh1hhj=ubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(h atom_sizeh]h atom_size}(hhhjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jδc.pcpu_embed_first_chunkasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcpu_distance_fnh]hcpu_distance_fn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(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}(hhhjԵhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjѵubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjֵmodnameN classnameNjijl)}jo]jδc.pcpu_embed_first_chunkasbuh1hhj͵ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͵ubh)}(h cpu_to_nd_fnh]h cpu_to_nd_fn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͵ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjnhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhM ubah}(h]jeah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjghhubj)}(hhh]j6)}(h)embed the first percpu chunk into bootmemh]h)embed the first percpu chunk into bootmem}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj(hhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jCj3jCj4uh1hhhhj~ehNhNubjl)}(hXc**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](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj)}(hhh](j)}(hC``size_t reserved_size`` the size of reserved percpu area in bytes h](j)}(h``size_t reserved_size``h]j<)}(hjlh]hsize_t reserved_size}(hhhjnhhhNhNubah}(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.chM hjfubj)}(hhh]j6)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h1minimum free size for dynamic allocation in bytesh]h1minimum free size for dynamic allocation in bytes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(h*``size_t atom_size`` allocation atom size h](j)}(h``size_t atom_size``h]j<)}(hj޶h]hsize_t atom_size}(hhhjhhhNhNubah}(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]j6)}(hallocation atom sizeh]hallocation atom size}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjضubeh}(h]h ]h"]h$]h&]uh1jhjhM hjcubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h5callback to determine distance between cpus, optionalh]h5callback to determine distance between cpus, optional}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjcubj)}(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<)}(hjPh]h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn}(hhhjRhhhNhNubah}(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]j6)}(h.callback to convert cpu to it's node, optionalh]h0callback to convert cpu to it’s node, optional}(hjkhjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(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 }(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 hjhhhNhNubjv)}(h **atom_size**h]h atom_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh aligned to }(h aligned to hjhhhNhNubjv)}(h **atom_size**h]h atom_size}(hhhj̷hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh.}(hjyhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(h5**dyn_size** specifies the minimum dynamic area size.h](jv)}(h **dyn_size**h]hdyn_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh) specifies the minimum dynamic area size.}(h) specifies the minimum dynamic area size.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(h **Return**h]jv)}(hj#h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj!ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubj6)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj;hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"pcpu_page_first_chunk (C function)c.pcpu_page_first_chunkhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM ubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhM ubh)}(hpcpu_page_first_chunkh]h)}(hpcpu_page_first_chunkh]hpcpu_page_first_chunk}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjvhM 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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.pcpu_page_first_chunkasbuh1hhjubj)}(h h]h }(hhhjȸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h reserved_sizeh]h reserved_size}(hhhjָhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jĸc.pcpu_page_first_chunkasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h cpu_to_nd_fnh]h cpu_to_nd_fn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjdhhhjvhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjvhM ubah}(h]j[ah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hj]hhubj)}(hhh]j6)}(h)map the first chunk using PAGE_SIZE pagesh]h)map the first chunk using PAGE_SIZE pages}(hjKhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjFhhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhM ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jaj3jaj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjkh]h Parameters}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjiubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubj)}(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}(hhhjhhhNhNubah}(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]j6)}(h)the size of reserved percpu area in bytesh]h)the size of reserved percpu area in bytes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM 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<)}(hjùh]h%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn}(hhhjŹ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]j6)}(h.callback to convert cpu to it's node, optionalh]h0callback to convert cpu to it’s node, optional}(hj޹hjܹhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjعhM hjٹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjعhM hjubeh}(h]h ]h"]h$]h&]uh1jhjeubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubj6)}(h]This is the basic allocator. Static percpu area is allocated page-by-page into vmalloc area.h]h]This is the basic allocator. Static percpu area is allocated page-by-page into vmalloc area.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubj6)}(h **Return**h]jv)}(hj4h]hReturn}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj2ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubj6)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/percpu.chM hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#copy_from_user_nofault (C function)c.copy_from_user_nofaulthNtauh1hhj~ehhhNhNubh)}(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}(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKkubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhKkubh)}(hcopy_from_user_nofaulth]h)}(hcopy_from_user_nofaulth]hcopy_from_user_nofault}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjhKkubj )}(h0(void *dst, const void __user *src, size_t size)h](j )}(h void *dsth](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjĺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjҺhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdsth]hdst}(hhhjߺhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hconst void __user *srch](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh__user}(hhhjhhhNhNubj)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjAhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hsrch]hsrc}(hhhjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjlmodnameN classnameNjijl)}jo]jr)}jejsbc.copy_from_user_nofaultasbuh1hhjcubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjuhhhjhKkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjhKkubah}(h]jlah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKrhjnhhubj)}(hhh]j6)}(h1safely attempt to read from a user-space locationh]h1safely attempt to read from a user-space location}(hjŻhjûhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKjhjhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhKkubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jۻj3jۻj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKnhj߻ubj)}(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}(hhhjhhhNhNubah}(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.chKkhjubj)}(hhh]j6)}(h.pointer to the buffer that shall take the datah]h.pointer to the buffer that shall take the data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKkhjubj)}(hN``const void __user *src`` address to read from. This must be a user address. h](j)}(h``const void __user *src``h]j<)}(hj=h]hconst void __user *src}(hhhj?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:136: ./mm/maccess.chKlhj7ubj)}(hhh]j6)}(h2address to read from. This must be a user address.h]h2address to read from. This must be a user address.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjRhKlhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKlhjubj)}(h'``size_t size`` size of the data chunk h](j)}(h``size_t size``h]j<)}(hjvh]h size_t size}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjtubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKmhjpubj)}(hhh]j6)}(hsize of the data chunkh]hsize of the data chunk}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhKmhjubeh}(h]h ]h"]h$]h&]uh1jhj߻ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKohj߻ubj6)}(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 }(hSafely read from user address hjǼhhhNhNubjv)}(h**src**h]hsrc}(hhhjмhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjǼubh to the buffer at }(h to the buffer at hjǼhhhNhNubjv)}(h**dst**h]hdst}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjǼubh<. If a kernel fault happens, handle that and return -EFAULT.}(h<. If a kernel fault happens, handle that and return -EFAULT.hjǼhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKohj߻ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!copy_to_user_nofault (C function)c.copy_to_user_nofaulthNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hKubh)}(hcopy_to_user_nofaulth]h)}(hcopy_to_user_nofaulth]hcopy_to_user_nofault}(hhhj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hKubj )}(h0(void __user *dst, const void *src, size_t size)h](j )}(hvoid __user *dsth](j)}(hvoidh]hvoid}(hhhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh__user}(hhhjVhhhNhNubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjVubh)}(hdsth]hdst}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjRubj )}(hconst void *srch](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hhhjɽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj׽hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hsrch]hsrc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjRubj )}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej@sbc.copy_to_user_nofaultasbuh1hhjubj)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjRubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj+hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hKubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjhhubj)}(hhh]j6)}(h0safely attempt to write to a user-space locationh]h0safely attempt to write to a user-space location}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj)}(hhh](j)}(h)``void __user *dst`` address to write to h](j)}(h``void __user *dst``h]j<)}(hjh]hvoid __user *dst}(hhhjhhhNhNubah}(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]j6)}(haddress to write toh]haddress to write to}(hjþhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``const void *src`` pointer to the data that shall be written h](j)}(h``const void *src``h]j<)}(hjh]hconst void *src}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj߾ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj۾ubj)}(hhh]j6)}(h)pointer to the data that shall be writtenh]h)pointer to the data that shall be written}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhj۾ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h'``size_t size`` size of the data chunk h](j)}(h``size_t size``h]j<)}(hjh]h size_t size}(hhhjhhhNhNubah}(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]j6)}(hsize of the data chunkh]hsize of the data chunk}(hj5hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjUh]h Description}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjSubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj6)}(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 }(hSafely write to address hjkhhhNhNubjv)}(h**dst**h]hdst}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh from the buffer at }(h from the buffer at hjkhhhNhNubjv)}(h**src**h]hsrc}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjkubh=. If a kernel fault happens, handle that and return -EFAULT.}(h=. If a kernel fault happens, handle that and return -EFAULT.hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&strncpy_from_user_nofault (C function)c.strncpy_from_user_nofaulthNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKubj)}(h h]h }(hhhjпhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjϿhKubh)}(hstrncpy_from_user_nofaulth]h)}(hstrncpy_from_user_nofaulth]hstrncpy_from_user_nofault}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj޿ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjϿhKubj )}(h7(char *dst, const void __user *unsafe_addr, long count)h](j )}(h char *dsth](j)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hdsth]hdst}(hhhj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hconst void __user *unsafe_addrh](j.)}(hjh]hconst}(hhhj@hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj<ubj)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hvoidh]hvoid}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh__user}(hhhj<hhhNhNubj)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj<ubh)}(h unsafe_addrh]h unsafe_addr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h long counth](j)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcounth]hcount}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjϿhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjϿhKubah}(h]jah ](jjeh"]h$]h&]juh1hhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjhhubj)}(hhh]jx)}(hhh]jx)}(h6Copy a NUL terminated string from unsafe user address.h]j6)}(hjh]h6Copy a NUL terminated string from unsafe user address.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubah}(h]h ]h"]h$]h&]uh1jxhjhhhj hNubah}(h]h ]h"]h$]h&]jxjxuh1jxhj hKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjϿhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j j3j j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj*h]h Parameters}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj$ubj)}(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<)}(hjIh]h char *dst}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjGubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjCubj)}(hhh]j6)}(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 }(hDDestination address, in kernel space. This buffer must be at least hjbhhhNhNubjv)}(h **count**h]hcount}(hhhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjbubh bytes long.}(h bytes long.hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj@ubj)}(h8``const void __user *unsafe_addr`` Unsafe user address. h](j)}(h"``const void __user *unsafe_addr``h]j<)}(hjh]hconst void __user *unsafe_addr}(hhhjhhhNhNubah}(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]j6)}(hUnsafe user address.h]hUnsafe user address.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj@ubj)}(hL``long count`` Maximum number of bytes to copy, including the trailing NUL. h](j)}(h``long count``h]j<)}(hjh]h long count}(hhhjhhhNhNubah}(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]j6)}(h count". On exception (or invalid count), returns 0. Unlike strnlen_user, this can be used from IRQ handler etc. because it disables pagefaults.h](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj ubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhj ubj)}(hhh]j6)}(hThe string to measure.h]hThe string to measure.}(hj*hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjubj)}(h-``long count`` Maximum count (including NUL) h](j)}(h``long count``h]j<)}(hjHh]h long count}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjFubah}(h]h ]h"]h$]h&]uh1jhM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjBubj)}(hhh]j6)}(hMaximum count (including NUL)h]hMaximum count (including NUL)}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj]hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj6)}(h=Returns the size of the string INCLUDING the terminating NUL.h]h=Returns the size of the string INCLUDING the terminating NUL.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj6)}(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 }(h8If the string is too long, returns a number larger than hjhhhNhNubjv)}(h **count**h]hcount}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhg. User has to check the return value against “> count”. On exception (or invalid count), returns 0.}(hc. User has to check the return value against "> count". On exception (or invalid count), returns 0.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/maccess.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&writeback_throttling_sane (C function)c.writeback_throttling_sanehNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h8bool writeback_throttling_sane (struct scan_control *sc)h]h)}(h7bool writeback_throttling_sane(struct scan_control *sc)h](j)}(hj7h]hbool}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hwriteback_throttling_saneh]h)}(hwriteback_throttling_saneh]hwriteback_throttling_sane}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct scan_control *sc)h]j )}(hstruct scan_control *sch](j.)}(hj1h]hstruct}(hhhjEhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjAubj)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]h)}(h scan_controlh]h scan_control}(hhhjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjemodnameN classnameNjijl)}jo]jr)}jej+sbc.writeback_throttling_saneasbuh1hhjAubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjAubh)}(hsch]hsc}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj=ubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjhhubj)}(hhh]j6)}(h2is the usual dirty throttling mechanism available?h]h2is the usual dirty throttling mechanism available?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjubj)}(hhh]j)}(h5``struct scan_control *sc`` scan_control in question h](j)}(h``struct scan_control *sc``h]j<)}(hj h]hstruct scan_control *sc}(hhhj 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.chKhjubj)}(hhh]j6)}(hscan_control in questionh]hscan_control in question}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjEh]h Description}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjCubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjubj6)}(hX1The normal page dirty throttling mechanism in balance_dirty_pages() is completely broken with the legacy memcg and direct stalling in shrink_folio_list() is used for throttling instead, which lacks all the niceties such as fairness, adaptive pausing, bandwidth proportional allocation and configurability.h]hX1The normal page dirty throttling mechanism in balance_dirty_pages() is completely broken with the legacy memcg and direct stalling in shrink_folio_list() is used for throttling instead, which lacks all the niceties such as fairness, adaptive pausing, bandwidth proportional allocation and configurability.}(hj]hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjubj6)}(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.}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌlruvec_lru_size (C function)c.lruvec_lru_sizehNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMjubh)}(hlruvec_lru_sizeh]h)}(hlruvec_lru_sizeh]hlruvec_lru_size}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMjubj )}(h8(struct lruvec *lruvec, enum lru_list lru, int zone_idx)h](j )}(hstruct lruvec *lruvech](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hlruvech]hlruvec}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.lruvec_lru_sizeasbuh1hhjubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj>hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hlruvech]hlruvec}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(henum lru_list lruh](j.)}(hjh]henum}(hhhjdhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj`ubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]h)}(hlru_listh]hlru_list}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j,c.lruvec_lru_sizeasbuh1hhj`ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hlruh]hlru}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h int zone_idxh](j)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hzone_idxh]hzone_idx}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMjubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMjubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMnhjhhubj)}(hhh]j6)}(h2Returns the number of pages on the given LRU list.h]h2Returns the number of pages on the given LRU list.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMihj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMjubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j&j3j&j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hj0h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj.ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMmhj*ubj)}(hhh](j)}(h%``struct lruvec *lruvec`` lru vector h](j)}(h``struct lruvec *lruvec``h]j<)}(hjOh]hstruct lruvec *lruvec}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMjhjIubj)}(hhh]j6)}(h lru vectorh]h lru vector}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMjhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMjhjFubj)}(h!``enum lru_list lru`` lru to use h](j)}(h``enum lru_list lru``h]j<)}(hjh]henum lru_list lru}(hhhjhhhNhNubah}(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]j6)}(h lru to useh]h lru to use}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjFubj)}(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<)}(hjh]h int zone_idx}(hhhjhhhNhNubah}(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.chMmhjubj)}(hhh]j6)}(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)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌremove_mapping (C function)c.remove_mappinghNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hMubh)}(hremove_mappingh]h)}(hremove_mappingh]hremove_mapping}(hhhj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj)hMubj )}(h4(struct address_space *mapping, struct folio *folio)h](j )}(hstruct address_space *mappingh](j.)}(hj1h]hstruct}(hhhjXhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjTubj)}(h h]h }(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]h)}(h address_spaceh]h address_space}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjxmodnameN classnameNjijl)}jo]jr)}jej>sbc.remove_mappingasbuh1hhjTubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjTubh)}(hmappingh]hmapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubj )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.remove_mappingasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjPubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj)hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhhubj)}(hhh]j6)}(h+Attempt to remove a folio from its mapping.h]h+Attempt to remove a folio from its mapping.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jdj3jdj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjnh]h Parameters}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1juhjlubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj)}(hhh](j)}(h5``struct address_space *mapping`` The address space. h](j)}(h!``struct address_space *mapping``h]j<)}(hjh]hstruct address_space *mapping}(hhhjhhhNhNubah}(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]j6)}(hThe address space.h]hThe address space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``struct folio *folio`` The folio to remove. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(hThe folio to remove.h]hThe folio to remove.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj6)}(h **Return**h]jv)}(hj(h]hReturn}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj&ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj6)}(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.}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj6)}(h **Context**h]jv)}(hjOh]hContext}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjMubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubj6)}(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.}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_putback_lru (C function)c.folio_putback_lruhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h,void folio_putback_lru (struct folio *folio)h]h)}(h+void folio_putback_lru(struct folio *folio)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM)ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM)ubh)}(hfolio_putback_lruh]h)}(hfolio_putback_lruh]hfolio_putback_lru}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM)ubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.folio_putback_lruasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM)ubah}(h]jah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM0hjhhubj)}(hhh]j6)}(h8Put previously isolated folio onto appropriate LRU list.h]h8Put previously isolated folio onto appropriate LRU list.}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM(hjRhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM)ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jmj3jmj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjwh]h Parameters}(hhhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjuubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM,hjqubj)}(hhh]j)}(h=``struct folio *folio`` Folio to be returned to an LRU list. h](j)}(h``struct folio *folio``h]j<)}(hjh]hstruct folio *folio}(hhhjhhhNhNubah}(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]j6)}(h$Folio to be returned to an LRU list.h]h$Folio to be returned to an LRU list.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjqubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM+hjqubj6)}(hpAdd previously isolated **folio** to appropriate LRU list. The folio may still be unevictable for other reasons.h](hAdd previously isolated }(hAdd previously isolated hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhO to appropriate LRU list. The folio may still be unevictable for other reasons.}(hO to appropriate LRU list. The folio may still be unevictable for other reasons.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM+hjqubj6)}(h **Context**h]jv)}(hj h]hContext}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM.hjqubj6)}(h6lru_lock must not be held, interrupts must be enabled.h]h6lru_lock must not be held, interrupts must be enabled.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM.hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfolio_isolate_lru (C function)c.folio_isolate_lruhNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h,bool folio_isolate_lru (struct folio *folio)h]h)}(h+bool folio_isolate_lru(struct folio *folio)h](j)}(hj7h]hbool}(hhhjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMubj)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj^hMubh)}(hfolio_isolate_lruh]h)}(hfolio_isolate_lruh]hfolio_isolate_lru}(hhhjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhj^hMubj )}(h(struct folio *folio)h]j )}(hstruct folio *folioh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejssbc.folio_isolate_lruasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfolioh]hfolio}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjMhhhj^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj^hMubah}(h]jDah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjFhhubj)}(hhh]j6)}(h)Try to isolate a folio from its LRU list.h]h)Try to isolate a folio from its LRU list.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj^hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j)j3j)j4uh1hhhhj~ehNhNubjl)}(hXP**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](j6)}(h**Parameters**h]jv)}(hj3h]h Parameters}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj1ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj)}(hhh]j)}(h<``struct folio *folio`` Folio to isolate from its LRU list. h](j)}(h``struct folio *folio``h]j<)}(hjRh]hstruct folio *folio}(hhhjThhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjPubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjLubj)}(hhh]j6)}(h#Folio to isolate from its LRU list.h]h#Folio to isolate from its LRU list.}(hjmhjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj6)}(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 }(h Isolate a hjhhhNhNubjv)}(h **folio**h]hfolio}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubhf from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.}(hf from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj`)}(hhh](jx)}(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]j6)}(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).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hThe lru_lock must not be held.h]j6)}(hjh]hThe lru_lock must not be held.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhjubah}(h]h ]h"]h$]h&]uh1jxhjubjx)}(hInterrupts must be enabled. h]j6)}(hInterrupts must be enabled.h]hInterrupts must be enabled.}(hjhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj ubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]j jj j-j j!.uh1j_hj-ubj6)}(h **Context**h]jv)}(hj*h]hContext}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj(ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj6)}(h **Return**h]jv)}(hjBh]hReturn}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj@ubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubj6)}(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.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*check_move_unevictable_folios (C function)c.check_move_unevictable_folioshNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMTubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMTubh)}(hcheck_move_unevictable_foliosh]h)}(hcheck_move_unevictable_foliosh]hcheck_move_unevictable_folios}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMTubj )}(h(struct folio_batch *fbatch)h]j )}(hstruct folio_batch *fbatchh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h folio_batchh]h folio_batch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.check_move_unevictable_foliosasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hfbatchh]hfbatch}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMTubah}(h]jzah ](jjeh"]h$]h&]juh1hhL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chM[hj|hhubj)}(hhh]j6)}(h2Move evictable folios to appropriate zone lru listh]h2Move evictable folios to appropriate zone lru list}(hjJhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMShjEhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhMTubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2j`j3j`j4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjjh]h Parameters}(hhhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjhubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMWhjdubj)}(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}(hhhjhhhNhNubah}(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.chMUhjubj)}(hhh]j6)}(hBatch of lru folios to check.h]hBatch of lru folios to check.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjdubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMWhjdubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/vmscan.chMWhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__remove_pages (C function)c.__remove_pageshNtauh1hhj~ehhhNhNubh)}(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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM4ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubh)}(h__remove_pagesh]h)}(h__remove_pagesh]h__remove_pages}(hhhj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM4ubj )}(hG(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap)h](j )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hlongh]hlong}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hhhjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hpfnh]hpfn}(hhhj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>ubj )}(hunsigned long nr_pagesh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnr_pagesh]hnr_pages}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>ubj )}(hstruct vmem_altmap *altmaph](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h vmem_altmaph]h vmem_altmap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jej,sbc.__remove_pagesasbuh1hhjubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj4hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(haltmaph]haltmap}(hhhjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj>ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]juh1hhT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM=hjhhubj)}(hhh]j6)}(hremove sections of pagesh]hremove sections of pages}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM3hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM4ubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:138: ./mm/memory_hotplug.chM7hjubj)}(hhh](j)}(hQ``unsigned long pfn`` starting pageframe (must be aligned to start of a section) h](j)}(h``unsigned long pfn``h]j<)}(hjh]hunsigned long pfn}(hhhjhhhNhNubah}(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.chM4hjubj)}(hhh]j6)}(h:starting pageframe (must be aligned to start of a section)h]h:starting pageframe (must be aligned to start of a section)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(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<)}(hjh]hunsigned long nr_pages}(hhhjhhhNhNubah}(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.chM5hjubj)}(hhh]j6)}(hmm 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](j6)}(h**Parameters**h]jv)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/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<)}(hj(h]h!struct mmu_notifier *subscription}(hhhj*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]j6)}(hThe notifier to attachh]hThe notifier to attach}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h:``struct mm_struct *mm`` The mm to attach the notifier to h](j)}(h``struct mm_struct *mm``h]j<)}(hjah]hstruct mm_struct *mm}(hhhjchhhNhNubah}(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]j6)}(h The mm to attach the notifier toh]h The mm to attach the notifier to}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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().}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$mmu_notifier_get_locked (C function)c.mmu_notifier_get_lockedhNtauh1hhj~ehhhNhNubh)}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(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 }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubh)}(hhh]h)}(h mmu_notifierh]h mmu_notifier}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj modnameN classnameNjijl)}jo]jr)}jemmu_notifier_get_lockedsbc.mmu_notifier_get_lockedasbuh1hhjhhhj hMubj)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj= )}(hj@ h]h*}(hhhjMhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhhhj hMubh)}(hmmu_notifier_get_lockedh]h)}(hj<h]hmmu_notifier_get_locked}(hhhj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h:(const struct mmu_notifier_ops *ops, struct mm_struct *mm)h](j )}(h"const struct mmu_notifier_ops *opsh](j.)}(hjh]hconst}(hhhjyhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjuubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjuubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]h)}(hmmu_notifier_opsh]hmmu_notifier_ops}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]j:c.mmu_notifier_get_lockedasbuh1hhjuubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjuubh)}(hopsh]hops}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjqubj )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj$modnameN classnameNjijl)}jo]j:c.mmu_notifier_get_lockedasbuh1hhjubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjNhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmmh]hmm}(hhhj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjqubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhubj)}(hhh]j6)}(h6Return the single struct mmu_notifier for the mm & opsh]h6Return the single struct mmu_notifier for the mm & ops}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(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<)}(hjh]h"const struct mmu_notifier_ops *ops}(hhhjhhhNhNubah}(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]j6)}(h*The operations struct being subscribe withh]h*The operations struct being subscribe with}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hThe mm to attach notifiers tooh]hThe mm to attach notifiers too}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hj;h]h Description}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj9ubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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.}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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.}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj6)}(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().}(hjqhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmmu_notifier_put (C function)c.mmu_notifier_puthNtauh1hhj~ehhhNhNubh)}(hhh](h)}(h9void mmu_notifier_put (struct mmu_notifier *subscription)h]h)}(h8void mmu_notifier_put(struct mmu_notifier *subscription)h](j)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMRubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMRubh)}(hmmu_notifier_puth]h)}(hmmu_notifier_puth]hmmu_notifier_put}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMRubj )}(h#(struct mmu_notifier *subscription)h]j )}(h!struct mmu_notifier *subscriptionh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mmu_notifierh]h mmu_notifier}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mmu_notifier_putasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj'hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(h subscriptionh]h subscription}(hhhj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubah}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMfhjhhubj)}(hhh]j6)}(h%Release the reference on the notifierh]h%Release the reference on the notifier}(hjahj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMQhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMRubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jwj3jwj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMUhj{ubj)}(hhh]j)}(h=``struct mmu_notifier *subscription`` The notifier to act on h](j)}(h%``struct mmu_notifier *subscription``h]j<)}(hjh]h!struct mmu_notifier *subscription}(hhhjhhhNhNubah}(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.chMRhjubj)}(hhh]j6)}(hThe notifier to act onh]hThe notifier to act on}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhj{ubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMThj{ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMThj{ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMXhj{ubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM\hj{ubj6)}(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().}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chM`hj{ubj6)}(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.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMchj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)mmu_interval_notifier_insert (C function)c.mmu_interval_notifier_inserthNtauh1hhj~ehhhNhNubh)}(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}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjjhMubh)}(hmmu_interval_notifier_inserth]h)}(hmmu_interval_notifier_inserth]hmmu_interval_notifier_insert}(hhhj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjjhMubj )}(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.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_interval_notifierh]hmmu_interval_notifier}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejsbc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(h interval_subh]h interval_sub}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct mm_struct *mmh](j.)}(hj1h]hstruct}(hhhj hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hhhj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj+modnameN classnameNjijl)}jo]jc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjUhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hmmh]hmm}(hhhjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long starth](j)}(hunsignedh]hunsigned}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hstarth]hstart}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hunsigned long lengthh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlengthh]hlength}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h+const struct mmu_interval_notifier_ops *opsh](j.)}(hjh]hconst}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj.)}(hj1h]hstruct}(hhhj8hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hhhjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjXmodnameN classnameNjijl)}jo]jc.mmu_interval_notifier_insertasbuh1hhjubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hopsh]hops}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjXhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjjhMubah}(h]jOah ](jjeh"]h$]h&]juh1hhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjQhhubj)}(hhh]j6)}(hInsert an interval notifierh]hInsert an interval notifier}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjubj)}(hhh](j)}(hQ``struct mmu_interval_notifier *interval_sub`` Interval subscription to register h](j)}(h.``struct mmu_interval_notifier *interval_sub``h]j<)}(hjh]h*struct mmu_interval_notifier *interval_sub}(hhhjhhhNhNubah}(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]j6)}(h!Interval subscription to registerh]h!Interval subscription to register}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``struct mm_struct *mm`` mm_struct to attach to h](j)}(h``struct mm_struct *mm``h]j<)}(hj4h]hstruct mm_struct *mm}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j;hj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhj.ubj)}(hhh]j6)}(hmm_struct to attach toh]hmm_struct to attach to}(hjOhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubj)}(h<``unsigned long start`` Starting virtual address to monitor h](j)}(h``unsigned long start``h]j<)}(hjmh]hunsigned long start}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjkubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mmu_notifier.chMhjgubj)}(hhh]j6)}(h#Starting virtual address to monitorh]h#Starting virtual address to monitor}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``unsigned long length`` Length of the range to monitor h](j)}(h``unsigned long length``h]j<)}(hjh]hunsigned long length}(hhhjhhhNhNubah}(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]j6)}(hLength of the range to monitorh]hLength of the range to monitor}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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<)}(hjh]h+const struct mmu_interval_notifier_ops *ops}(hhhjhhhNhNubah}(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]j6)}(h(struct balloon_dev_info *b_dev_info, struct list_head *pages)h](j )}(h#struct balloon_dev_info *b_dev_infoh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hballoon_dev_infoh]hballoon_dev_info}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jec.balloon_page_list_enqueueasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(h b_dev_infoh]h b_dev_info}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(hstruct list_head *pagesh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(h list_headh]h list_head}(hhhj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetj(modnameN classnameNjijl)}jo]jec.balloon_page_list_enqueueasbuh1hhjubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhjRhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hpagesh]hpages}(hhhj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjBhhhjjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhjjhKubah}(h]j9ah ](jjeh"]h$]h&]juh1hhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK(hj;hhubj)}(hhh]j6)}(h3inserts a list of pages into the balloon page list.h]h3inserts a list of pages into the balloon page list.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjjhKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK"hjubj)}(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<)}(hjh]h#struct balloon_dev_info *b_dev_info}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK hjubj)}(hhh]j6)}(hhjubj)}(hhh]j6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK>hjoubj)}(h2``size_t n_req_pages`` number of requested pages. h](j)}(h``size_t n_req_pages``h]j<)}(hjh]hsize_t n_req_pages}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chK?hjubj)}(hhh]j6)}(hnumber of requested pages.h]hnumber of requested pages.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK?hjoubeh}(h]h ]h"]h$]h&]uh1jhjSubj6)}(h**Description**h]jv)}(hj%h]h Description}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1juhj#ubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKAhjSubj6)}(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 }(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;hhhNhNubjv)}(h**n_req_pages**h]h n_req_pages}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh? from the ballooned pages and return them to the caller in the }(h? from the ballooned pages and return them to the caller in the hj;hhhNhNubjv)}(h **pages**h]hpages}(hhhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj;ubh list.}(h list.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKAhjSubj6)}(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.}(hjshjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKFhjSubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKJhjSubj6)}(h6number of pages that were added to the **pages** list.h](h'number of pages that were added to the }(h'number of pages that were added to the hjhhhNhNubjv)}(h **pages**h]hpages}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubh list.}(h list.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j5hX/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:140: ./mm/balloon_compaction.chKJhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn_pmd (C function)c.vmf_insert_pfn_pmdhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jevmf_insert_pfn_pmdsbc.vmf_insert_pfn_pmdasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hvmf_insert_pfn_pmdh]h)}(hjh]hvmf_insert_pfn_pmd}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h-(struct vm_fault *vmf, pfn_t pfn, bool write)h](j )}(hstruct vm_fault *vmfh](j.)}(hj1h]hstruct}(hhhj-hhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hj)ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hhhjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjMmodnameN classnameNjijl)}jo]jc.vmf_insert_pfn_pmdasbuh1hhj)ubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj= )}(hj@ h]h*}(hhhjwhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hj)ubh)}(hvmfh]hvmf}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%ubj )}(h pfn_t pfnh](h)}(hhh]h)}(hpfn_th]hpfn_t}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.vmf_insert_pfn_pmdasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%ubj )}(h bool writeh](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwriteh]hwrite}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hj%ubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjhhubj)}(hhh]j6)}(hinsert a pmd size pfnh]hinsert a pmd size pfn}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jCj3jCj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjMh]h Parameters}(hhhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjKubah}(h]h ]h"]h$]h&]uh1j5hQ/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<)}(hjlh]hstruct vm_fault *vmf}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjfubj)}(hhh]j6)}(hStructure describing the faulth]hStructure describing the fault}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h``pfn_t pfn`` pfn to insert h](j)}(h ``pfn_t pfn``h]j<)}(hjh]h pfn_t pfn}(hhhjhhhNhNubah}(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]j6)}(h pfn to inserth]h pfn to insert}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h*``bool write`` whether it's a write fault h](j)}(h``bool write``h]j<)}(hjh]h bool write}(hhhjhhhNhNubah}(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]j6)}(hwhether it's a write faulth]hwhether it’s a write fault}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjGubj6)}(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.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjGubj6)}(h **Return**h]jv)}(hj@h]hReturn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1juhj>ubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjGubj6)}(hvm_fault_t value.h]hvm_fault_t value.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvmf_insert_pfn_pud (C function)c.vmf_insert_pfn_pudhNtauh1hhj~ehhhNhNubh)}(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}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jevmf_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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hvmf_insert_pfn_pudh]h)}(hjh]hvmf_insert_pfn_pud}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h-(struct vm_fault *vmf, pfn_t pfn, bool write)h](j )}(hstruct vm_fault *vmfh](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_faulth]hvm_fault}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.vmf_insert_pfn_pudasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj!hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hvmfh]hvmf}(hhhj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h pfn_t pfnh](h)}(hhh]h)}(hpfn_th]hpfn_t}(hhhjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjLmodnameN classnameNjijl)}jo]jc.vmf_insert_pfn_pudasbuh1hhjCubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hpfnh]hpfn}(hhhjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubj )}(h bool writeh](j)}(hj7h]hbool}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwriteh]hwrite}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjubeh}(h]h ]h"]h$]h&]jj uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhMubah}(h]jxah ](jjeh"]h$]h&]juh1hhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjzhhubj)}(hhh]j6)}(hinsert a pud size pfnh]hinsert a pud size pfn}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhMubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jj3jj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hStructure describing the faulth]hStructure describing the fault}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj ubj)}(h``pfn_t pfn`` pfn to insert h](j)}(h ``pfn_t pfn``h]j<)}(hjOh]h pfn_t pfn}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjMubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjIubj)}(hhh]j6)}(h pfn to inserth]h pfn to insert}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj ubj)}(h*``bool write`` whether it's a write fault h](j)}(h``bool write``h]j<)}(hjh]h bool write}(hhhjhhhNhNubah}(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]j6)}(hwhether it's a write faulth]hwhether it’s a write fault}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj6)}(h**Description**h]jv)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj6)}(h **Return**h]jv)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubj6)}(hvm_fault_t value.h]hvm_fault_t value.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/huge_memory.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ io_mapping_map_user (C function)c.io_mapping_map_userhNtauh1hhj~ehhhNhNubh)}(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}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj=hKubh)}(hio_mapping_map_userh]h)}(hio_mapping_map_userh]hio_mapping_map_user}(hhhjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj=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.)}(hj1h]hstruct}(hhhjlhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjhubj)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]h)}(h io_mappingh]h io_mapping}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jr)}jejRsbc.io_mapping_map_userasbuh1hhjhubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj= )}(hj@ h]h*}(hhhjhhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjhubh)}(hiomaph]hiomap}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjdubj )}(hstruct vm_area_struct *vmah](j.)}(hj1h]hstruct}(hhhjhhhNhNubah}(h]h ]j:ah"]h$]h&]uh1j-hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]h)}(hvm_area_structh]hvm_area_struct}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj,reftypeje reftargetjmodnameN classnameNjijl)}jo]jc.io_mapping_map_userasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj= )}(hj@ h]h*}(hhhj(hhhNhNubah}(h]h ]jI ah"]h$]h&]uh1j< hjubh)}(hvmah]hvma}(hhhj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjdubj )}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hlongh]hlong}(hhhjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hhhjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(haddrh]haddr}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjdubj )}(hunsigned long pfnh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hpfnh]hpfn}(hhhjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjdubj )}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hsizeh]hsize}(hhhj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j hjdubeh}(h]h ]h"]h$]h&]jj uh1j hj+hhhj=hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj=hKubah}(h]j"ah ](jjeh"]h$]h&]juh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhj$hhubj)}(hhh]j6)}(h!remap an I/O mapping to userspaceh]h!remap an I/O mapping to userspace}(hjUhjShhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjPhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hKubeh}(h]h ](j,functioneh"]h$]h&]j1j,j2jkj3jkj4uh1hhhhj~ehNhNubjl)}(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](j6)}(h**Parameters**h]jv)}(hjuh]h Parameters}(hhhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjsubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjoubj)}(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}(hhhjhhhNhNubah}(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]j6)}(hthe source io_mappingh]hthe source io_mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhKhjubah}(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(}(hhhjhhhNhNubah}(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]j6)}(huser vma to map toh]huser vma to map to}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK 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<)}(hjh]hunsigned long addr}(hhhjhhhNhNubah}(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]j6)}(htarget user address to start ath]htarget user address to start at}(hj!hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(h8``unsigned long pfn`` physical address of kernel memory h](j)}(h``unsigned long pfn``h]j<)}(hj?h]hunsigned long pfn}(hhhjAhhhNhNubah}(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 hj9ubj)}(hhh]j6)}(h!physical address of kernel memoryh]h!physical address of kernel memory}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjThK hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThK hjubj)}(h(``unsigned long size`` size of map area h](j)}(h``unsigned long size``h]j<)}(hjxh]hunsigned long size}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j;hjvubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chK hjrubj)}(hhh]j6)}(hsize of map areah]hsize of map area}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjhK hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubeh}(h]h ]h"]h$]h&]uh1jhjoubj6)}(h**Note**h]jv)}(hjh]hNote}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1juhjubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjoubj6)}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/io-mapping.chKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jkhj~ehhhNhNubeh}(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_handlerjerror_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.confapep_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_spacefile_insertion_enabled raw_enabledKline_length_limitM'syntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_link embed_imagesenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j:]j/asnameids}(jjj@j=jvj:jujrjKjHjjjFjCjmjjj@j@j|SjySjKjKjjjjj j jKjKjTjTj{ejxejju nametypes}(jNj@NjvjuNjKNjNjFNjmNj@Nj|SNjKNjNjNj NjKNjTNj{eNjNuh}(jhj=hhhjjjjjjjjj j j j j:jCjrjCjHjTjjNjCjjjjIj@j}jjjj"jhjmjEjJj j jD#jI#j$j$j\&ja&j'j'j)j)jj+jo+jB1jG1j6j6j7j7j{9j9jH;jM;j<j<jh?jm?jySj@jAjAjMBjRBjDj#DjFjFjHjHj^JjcJjNjNjPjPjKjSjjSjSjSjVjVjWjWjZjZjL]jQ]j_j_jbjbjQdjVdjgj$gjij ijkjkj*nj/nj`pjepj rjrjtj$tjujuj2wj7wj yjyjzjzj|j|j~j~jjjׅj܅jjjjj_jdjEjJjjjj jj$jjjjjjjjƩjQjVjͮjҮjjj%j*jjj jjjjj jjjCjHjj#jjjjjJjOjjjjjkjpjKjj-j2jjjjjjjhjmj>jCjjjjjjjjj]jbjjjjjjjjjj!jj jjjjj\jaj(j-j%j*jVj[j jjjjjj j j j jOjTjjjjjjj:j?jjjjjjj!j!j"j"j$j"$j%j%j'j'jM)jR)j+j"+j-j-j/j/j}3j3j8j8j:j:j <j<js=jx=j>j>jQ@jV@jAjAj8Cj=CjDjDjFjFjIjIjTjKjKjKjdMjiMjNjNjQjQjRjRjxejTjTjTjYjYjZjZjq]jv]j_j_jdjdjj~ejejej@hjEhjkjkjnjnj&rj+rj6uj;uj8yj=yjo|jt|jFjKjjj jj jjjjjjfjkj`jejLjQjƛj˛jj!j]jbjjjäjȤjcjhjϧjԧjjjj!jAjFjjjѳjֳjjjjjjjjjPjUjjj|jjjjjjjjjj7j<jj jcjhjjjjjjjjjjjNjSjjjjjqjvj jjjjbjgjSjXjjjgjljj jjj0j5jGjLjjjjjjjIjNjjj j j j j4j9j j%jjjjjjjwj|jjjjjjj j j"j"jQ$jV$j%j%j&j&j'j'j*j*j-j-j/j/j1j1j>3jC3j 5j5j6j6j:j:j=j=j?j?jBjBj4Fj9FjJjJj~NjNjVQj[QjTjTjWjWjZjZj]j]j`j`j!bj&bjejejijijmjmjpjpjtjtj5vj:vjwjwjzjzj(}j-}jjjjjHjMjjjxj}j{jj jjjj jjjj jjjjԘj٘jjjjj)j.j̡jѡjjjjjjjxj}jjjtjyjj!jpjuj[j`jjjMjRj϶jԶjjjjjvj{jVj[j jjrjwjjjjjjjTjYjjjjjjj2j7jjj@jEjjj=jBjjjjjUjZj9j>jj"jjjjjDjIjjjjjtjyjjjzjjjj=jBj#j(j(j-jjjcjhjT jY ji jn jj jjj"j'j3j8jjjjjT jY j"j"j*%j/%j(j(j)j*j%,j*,j].jb.j0j 0j1j1j3j3j5j5j,8j18j<j<j?j?jBjBjLEjQEjFjFjvIj{IjKjKj&Nj+NjOjOj9Qj>QjSjSjUjUjXjXjZjZj^j^j`j`jfjfjhjhjkj kjmjmjpjpj sjsjtjtjvjvjyj$yj{j{j|j|jMjRjjjjjjÇj%j*j<jAjjj.j3jjjijnjؙjݙjWj\jjjjjyj~jTjYjjj¤jǤjjjjjjjjjjjejjj[j`jljqjjjjjjjjjjjjjjjDjIjzjjjjjjjjjjjjjjjjOjTjajfjjj9j>jjjjjxj}j"j'u 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]j6)}(hhh]h6Hyperlink target "mm-api-gfp-flags" is not referenced.}(hhhj}ubah}(h]h ]h"]h$]h&]uh1j5hjzubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jxuba transformerN include_log] decorationNhhub.