2sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/mm/memfd_preservationmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/pt_BR/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/mm/memfd_preservationmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation.rsthKubhsection)}(hhh](htitle)}(hMemfd Preservation via LUOh]hMemfd Preservation via LUO}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOverviewh]hOverview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhNhNubh paragraph)}(hMemory file descriptors (memfd) can be preserved over a kexec using the Live Update Orchestrator (LUO) file preservation. This allows userspace to transfer its memory contents to the next kernel after a kexec.h]hMemory file descriptors (memfd) can be preserved over a kexec using the Live Update Orchestrator (LUO) file preservation. This allows userspace to transfer its memory contents to the next kernel after a kexec.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chKhhubh)}(hThe preservation is not intended to be transparent. Only select properties of the file are preserved. All others are reset to default. The preserved properties are described below.h]hThe preservation is not intended to be transparent. Only select properties of the file are preserved. All others are reset to default. The preserved properties are described below.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chKhhubhnote)}(hThe LUO API is not stabilized yet, so the preserved properties of a memfd are also not stable and are subject to backwards incompatible changes.h]h)}(hThe LUO API is not stabilized yet, so the preserved properties of a memfd are also not stable and are subject to backwards incompatible changes.h]hThe LUO API is not stabilized yet, so the preserved properties of a memfd are also not stable and are subject to backwards incompatible changes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chKhjubah}(h]h ]h"]h$]h&]uh1jhhubj)}(hkCurrently a memfd backed by Hugetlb is not supported. Memfds created with ``MFD_HUGETLB`` will be rejected.h]h)}(hkCurrently a memfd backed by Hugetlb is not supported. Memfds created with ``MFD_HUGETLB`` will be rejected.h](hJCurrently a memfd backed by Hugetlb is not supported. Memfds created with }(hj-hhhNhNubhliteral)}(h``MFD_HUGETLB``h]h MFD_HUGETLB}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ubh will be rejected.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chKhj)ubah}(h]h ]h"]h$]h&]uh1jhhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hPreserved Propertiesh]hPreserved Properties}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hNhNubh)}(hAThe following properties of the memfd are preserved across kexec:h]hAThe following properties of the memfd are preserved across kexec:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK"hj^ubhdefinition_list)}(hhh](hdefinition_list_item)}(h8File Contents All data stored in the file is preserved. h](hterm)}(h File Contentsh]h File Contents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK%hjubh definition)}(hhh]h)}(h)All data stored in the file is preserved.h]h)All data stored in the file is preserved.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjubj)}(h|File Size The size of the file is preserved. Holes in the file are filled by allocating pages for them during preservation. h](j)}(h File Sizeh]h File Size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK)hjubj)}(hhh]h)}(hqThe size of the file is preserved. Holes in the file are filled by allocating pages for them during preservation.h]hqThe size of the file is preserved. Holes in the file are filled by allocating pages for them during preservation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(hFile Position The current file position is preserved, allowing applications to continue reading/writing from their last position. h](j)}(h File Positionh]h File Position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK-hjubj)}(hhh]h)}(hsThe current file position is preserved, allowing applications to continue reading/writing from their last position.h]hsThe current file position is preserved, allowing applications to continue reading/writing from their last position.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK-hjubj)}(hmFile Status Flags memfds are always opened with ``O_RDWR`` and ``O_LARGEFILE``. This property is maintained. h](j)}(hFile Status Flagsh]hFile Status Flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK1hjubj)}(hhh]h)}(hZmemfds are always opened with ``O_RDWR`` and ``O_LARGEFILE``. This property is maintained.h](hmemfds are always opened with }(hj1hhhNhNubj6)}(h ``O_RDWR``h]hO_RDWR}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1ubh and }(hj1hhhNhNubj6)}(h``O_LARGEFILE``h]h O_LARGEFILE}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj1ubh. This property is maintained.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK0hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hK1hjubeh}(h]h ]h"]h$]h&]uh1j~hj^ubeh}(h]preserved-propertiesah ]h"]preserved propertiesah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hNon-Preserved Propertiesh]hNon-Preserved Properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hNhNubh)}(hAll properties which are not preserved must be assumed to be reset to default. This section describes some of those properties which may be more of note.h]hAll properties which are not preserved must be assumed to be reset to default. This section describes some of those properties which may be more of note.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK6hj~ubj)}(hhh](j)}(h``FD_CLOEXEC`` flag A memfd can be created with the ``MFD_CLOEXEC`` flag that sets the ``FD_CLOEXEC`` on the file. This flag is not preserved and must be set again after restore via ``fcntl()``. h](j)}(h``FD_CLOEXEC`` flagh](j6)}(h``FD_CLOEXEC``h]h FD_CLOEXEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh flag}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK=hjubj)}(hhh]h)}(hA memfd can be created with the ``MFD_CLOEXEC`` flag that sets the ``FD_CLOEXEC`` on the file. This flag is not preserved and must be set again after restore via ``fcntl()``.h](h A memfd can be created with the }(hjhhhNhNubj6)}(h``MFD_CLOEXEC``h]h MFD_CLOEXEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh flag that sets the }(hjhhhNhNubj6)}(h``FD_CLOEXEC``h]h FD_CLOEXEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubhQ on the file. This flag is not preserved and must be set again after restore via }(hjhhhNhNubj6)}(h ``fcntl()``h]hfcntl()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK=hjubj)}(hzSeals File seals are not preserved. The file is unsealed on restore and if needed, must be sealed again via ``fcntl()``. h](j)}(hSealsh]hSeals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chKBhjubj)}(hhh]h)}(hrFile seals are not preserved. The file is unsealed on restore and if needed, must be sealed again via ``fcntl()``.h](hfFile seals are not preserved. The file is unsealed on restore and if needed, must be sealed again via }(hj,hhhNhNubj6)}(h ``fcntl()``h]hfcntl()}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK@hj)ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj(hKBhjubeh}(h]h ]h"]h$]h&]uh1j~hj~ubeh}(h]non-preserved-propertiesah ]h"]non-preserved propertiesah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hMemfd Preservation ABIh]hMemfd Preservation ABI}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleMEMFD_LUO_FOLIO_DIRTY (C macro)c.MEMFD_LUO_FOLIO_DIRTYhNtauh1jxhjghhhNhNubhdesc)}(hhh](hdesc_signature)}(hMEMFD_LUO_FOLIO_DIRTYh]hdesc_signature_line)}(hMEMFD_LUO_FOLIO_DIRTYh]h desc_name)}(hMEMFD_LUO_FOLIO_DIRTYh]h desc_sig_name)}(hjh]hMEMFD_LUO_FOLIO_DIRTY}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK ubah}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhK ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhK hjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK ubeh}(h]h ](cmacroeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjghNhNubh)}(h``MEMFD_LUO_FOLIO_DIRTY``h]j6)}(hjh]hMEMFD_LUO_FOLIO_DIRTY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK"hjghhubh block_quote)}(h The folio is dirty. **Description** This flag indicates the folio contains data from user. A non-dirty folio is one that was allocated (say using fallocate(2)) but not written to. h](j)}(hThe folio is dirty. h]h)}(hThe folio is dirty.h]hThe folio is dirty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjhK hjubh)}(h**Description**h]hstrong)}(hjh]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK"hjubh)}(hThis flag indicates the folio contains data from user. A non-dirty folio is one that was allocated (say using fallocate(2)) but not written to.h]hThis flag indicates the folio contains data from user. A non-dirty folio is one that was allocated (say using fallocate(2)) but not written to.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK!hjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjghhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"MEMFD_LUO_FOLIO_UPTODATE (C macro)c.MEMFD_LUO_FOLIO_UPTODATEhNtauh1jxhjghhhNhNubj)}(hhh](j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hj_h]hMEMFD_LUO_FOLIO_UPTODATE}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]hhuh1jhjahhhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK(ubah}(h]h ]h"]h$]h&]hhjuh1jjjhj]hhhj|hK(ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhj|hK(hjZhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjZhhhj|hK(ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjghNhNubh)}(h``MEMFD_LUO_FOLIO_UPTODATE``h]j6)}(hjh]hMEMFD_LUO_FOLIO_UPTODATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK*hjghhubj)}(h The folio is up-to-date. **Description** An up-to-date folio has been zeroed out. shmem zeroes out folios on first use. This flag tracks which folios need zeroing. h](j)}(hThe folio is up-to-date. h]h)}(hThe folio is up-to-date.h]hThe folio is up-to-date.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK(hjubah}(h]h ]h"]h$]h&]uh1jhjhK(hjubh)}(h**Description**h]j")}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK*hjubh)}(hzAn up-to-date folio has been zeroed out. shmem zeroes out folios on first use. This flag tracks which folios need zeroing.h]hzAn up-to-date folio has been zeroed out. shmem zeroes out folios on first use. This flag tracks which folios need zeroing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK)hjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjghhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmemfd_luo_folio_ser (C struct)c.memfd_luo_folio_serhNtauh1jxhjghhhNhNubj)}(hhh](j)}(hmemfd_luo_folio_serh]j)}(hstruct memfd_luo_folio_serh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK/ubhdesc_sig_space)}(h h]h }(hj(hhhNhNubah}(h]h ]wah"]h$]h&]uh1j&hjhhhj%hK/ubj)}(hmemfd_luo_folio_serh]j)}(hjh]hmemfd_luo_folio_ser}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj%hK/ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj%hK/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj%hK/hj hhubj)}(hhh]h)}(h#Serialized state of a single folio.h]h#Serialized state of a single folio.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK0hjZhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hK/ubeh}(h]h ](jstructeh"]h$]h&]jjjjujjujjjuh1jhhhjghNhNubh container)}(hX-**Definition**:: struct memfd_luo_folio_ser { u64 pfn:52; u64 flags:12; u64 index; }; **Members** ``pfn`` The page frame number of the folio. ``flags`` Flags to describe the state of the folio. ``index`` The page offset (pgoff_t) of the folio within the original file.h](h)}(h**Definition**::h](j")}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK4hj{ubh literal_block)}(hPstruct memfd_luo_folio_ser { u64 pfn:52; u64 flags:12; u64 index; };h]hPstruct memfd_luo_folio_ser { u64 pfn:52; u64 flags:12; u64 index; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK6hj{ubh)}(h **Members**h]j")}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK3hj:ubj)}(hhh]h)}(h@The page offset (pgoff_t) of the folio within the original file.h]h@The page offset (pgoff_t) of the folio within the original file.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK4hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhK3hjubeh}(h]h ]h"]h$]h&]uh1j~hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jyhjghhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmemfd_luo_ser (C struct)c.memfd_luo_serhNtauh1jxhjghhhNhNubj)}(hhh](j)}(h memfd_luo_serh]j)}(hstruct memfd_luo_serh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK:ubj')}(h h]h }(hjhhhNhNubah}(h]h ]j3ah"]h$]h&]uh1j&hjhhhjhK:ubj)}(h memfd_luo_serh]j)}(hjh]h memfd_luo_ser}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK:ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK:hjhhubj)}(hhh]h)}(h)Main serialization structure for a memfd.h]h)Main serialization structure for a memfd.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKGhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK:ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjghNhNubjz)}(hXe**Definition**:: struct memfd_luo_ser { u64 pos; u64 size; u32 seals; u32 flags; u64 nr_folios; struct kho_vmalloc folios; }; **Members** ``pos`` The file's current position (f_pos). ``size`` The total size of the file in bytes (i_size). ``seals`` The seals present on the memfd. The seals are uABI so it is safe to directly use them in the ABI. ``flags`` Flags for the file. Unused flag bits must be set to 0. ``nr_folios`` Number of folios in the folios array. ``folios`` KHO vmalloc descriptor pointing to the array of struct memfd_luo_folio_ser.h](h)}(h**Definition**::h](j")}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKKhjubj)}(hstruct memfd_luo_ser { u64 pos; u64 size; u32 seals; u32 flags; u64 nr_folios; struct kho_vmalloc folios; };h]hstruct memfd_luo_ser { u64 pos; u64 size; u32 seals; u32 flags; u64 nr_folios; struct kho_vmalloc folios; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKMhjubh)}(h **Members**h]j")}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j!hj(ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKVhjubj)}(hhh](j)}(h-``pos`` The file's current position (f_pos). h](j)}(h``pos``h]j6)}(hjIh]hpos}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjGubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKIhjCubj)}(hhh]h)}(h$The file's current position (f_pos).h]h&The file’s current position (f_pos).}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKIhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKIhj@ubj)}(h7``size`` The total size of the file in bytes (i_size). h](j)}(h``size``h]j6)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKJhj|ubj)}(hhh]h)}(h-The total size of the file in bytes (i_size).h]h-The total size of the file in bytes (i_size).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKJhj@ubj)}(hl``seals`` The seals present on the memfd. The seals are uABI so it is safe to directly use them in the ABI. h](j)}(h ``seals``h]j6)}(hjh]hseals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKLhjubj)}(hhh]h)}(haThe seals present on the memfd. The seals are uABI so it is safe to directly use them in the ABI.h]haThe seals present on the memfd. The seals are uABI so it is safe to directly use them in the ABI.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKLhj@ubj)}(hA``flags`` Flags for the file. Unused flag bits must be set to 0. h](j)}(h ``flags``h]j6)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKMhjubj)}(hhh]h)}(h6Flags for the file. Unused flag bits must be set to 0.h]h6Flags for the file. Unused flag bits must be set to 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKMhj@ubj)}(h4``nr_folios`` Number of folios in the folios array. h](j)}(h ``nr_folios``h]j6)}(hj.h]h nr_folios}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj,ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKNhj(ubj)}(hhh]h)}(h%Number of folios in the folios array.h]h%Number of folios in the folios array.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKNhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKNhj@ubj)}(hV``folios`` KHO vmalloc descriptor pointing to the array of struct memfd_luo_folio_ser.h](j)}(h ``folios``h]j6)}(hjgh]hfolios}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjeubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhKOhjaubj)}(hhh]h)}(hKKHO vmalloc descriptor pointing to the array of struct memfd_luo_folio_ser.h]hKKHO vmalloc descriptor pointing to the array of struct memfd_luo_folio_ser.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKOhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKOhj@ubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jyhjghhhNhNubeh}(h]memfd-preservation-abiah ]h"]memfd preservation abiah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSee Alsoh]hSee Also}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh bullet_list)}(hhh](h list_item)}(h:doc:`/core-api/liveupdate`h]h)}(hjh]h)}(hjh]hinline)}(hjh]h/core-api/liveupdate}(hjhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocmm/memfd_preservation refdomainjreftypedoc refexplicitrefwarn reftarget/core-api/liveupdateuh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h:doc:`/core-api/kho/index`h]h)}(hj h]h)}(hj h]j)}(hj h]h/core-api/kho/index}(hj hhhNhNubah}(h]h ](jstdstd-doceh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainj reftypedoc refexplicitrefwarnj/core-api/kho/indexuh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjhhubeh}(h]see-alsoah ]h"]see alsoah$]h&]uh1hhhhhhhhKubeh}(h]memfd-preservation-via-luoah ]h"]memfd preservation via luoah$]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_handlerjk error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jE jB j[jXj{jxjdjajjj= j: u nametypes}(jE j[j{jdjj= uh}(jB hjXhjxj^jaj~jjgjjjXj]jj jjj: ju 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] transformerN include_log] decorationNhhub.