sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/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-hK1hjubj)}(hSeals File seals set on the memfd are preserved and re-applied on restore. Only seals known to this LUO version (see ``MEMFD_LUO_ALL_SEALS``) may be present; preservation fails with ``-EOPNOTSUPP`` otherwise. h](j)}(hSealsh]hSeals}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK6hjpubj)}(hhh]h)}(hFile seals set on the memfd are preserved and re-applied on restore. Only seals known to this LUO version (see ``MEMFD_LUO_ALL_SEALS``) may be present; preservation fails with ``-EOPNOTSUPP`` otherwise.h](hoFile seals set on the memfd are preserved and re-applied on restore. Only seals known to this LUO version (see }(hjhhhNhNubj6)}(h``MEMFD_LUO_ALL_SEALS``h]hMEMFD_LUO_ALL_SEALS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh*) may be present; preservation fails with }(hjhhhNhNubj6)}(h``-EOPNOTSUPP``h]h -EOPNOTSUPP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:7: ./mm/memfd_luo.chK4hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjubeh}(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&]uh1hhjhNhNubh)}(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.chK;hjubj)}(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.chKChjubj)}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh flag that sets the }(hjhhhNhNubj6)}(h``FD_CLOEXEC``h]h FD_CLOEXEC}(hj4hhhNhNubah}(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()}(hjFhhhNhNubah}(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&]uh1jhjhKChjubah}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]non-preserved-propertiesah ]h"]non-preserved propertiesah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hMemfd Preservation ABIh]hMemfd Preservation ABI}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhK ubh)}(h^memfd uses the ABI defined below for preserving its state across a kexec reboot using the LUO.h]h^memfd uses the ABI defined below for preserving its state across a kexec reboot using the LUO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:13: ./include/linux/kho/abi/memfd.hhKhjyhhubh)}(hThe state is serialized into a packed structure `struct memfd_luo_ser` which is handed over to the next kernel via the KHO mechanism.h](h0The state is serialized into a packed structure }(hjhhhNhNubhtitle_reference)}(h`struct memfd_luo_ser`h]hstruct memfd_luo_ser}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? which is handed over to the next kernel via the KHO mechanism.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:13: ./include/linux/kho/abi/memfd.hhKhjyhhubh)}(hThis interface is a contract. Any modification to the structure layout constitutes a breaking change. Such changes require incrementing the version number in the MEMFD_LUO_FH_COMPATIBLE string.h]hThis interface is a contract. Any modification to the structure layout constitutes a breaking change. Such changes require incrementing the version number in the MEMFD_LUO_FH_COMPATIBLE string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:13: ./include/linux/kho/abi/memfd.hhKhjyhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleMEMFD_LUO_FOLIO_DIRTY (C macro)c.MEMFD_LUO_FOLIO_DIRTYhNtauh1jhjyhhhNhNubhdesc)}(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 declaratorhjhhhj hK ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj hK hjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhj hK ubeh}(h]h ](cmacroeh"]h$]h&]domainj.objtypej/desctypej/noindex noindexentrynocontentsentryuh1jhhhjyhNhNubh)}(h``MEMFD_LUO_FOLIO_DIRTY``h]j6)}(hj;h]hMEMFD_LUO_FOLIO_DIRTY}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj9ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK"hjyhhubh 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](jR)}(hThe folio is dirty. h]h)}(hThe folio is dirty.h]hThe folio is dirty.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK hjWubah}(h]h ]h"]h$]h&]uh1jQhjihK hjSubh)}(h**Description**h]hstrong)}(hjrh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjpubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK"hjSubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK!hjSubeh}(h]h ]h"]h$]h&]uh1jQhjihK hjyhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"MEMFD_LUO_FOLIO_UPTODATE (C macro)c.MEMFD_LUO_FOLIO_UPTODATEhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hMEMFD_LUO_FOLIO_UPTODATEh]j)}(hjh]hMEMFD_LUO_FOLIO_UPTODATE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]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&]hhjuh1jjjhjhhhjhK(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK(hjhhubj!)}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhK(ubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjyhNhNubh)}(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*hjyhhubjR)}(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](jR)}(hThe folio is up-to-date. h]h)}(hThe folio is up-to-date.h]hThe folio is up-to-date.}(hj hhhNhNubah}(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&]uh1jQhjhK(hjubh)}(h**Description**h]ju)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj!ubah}(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.}(hj9hhhNhNubah}(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&]uh1jQhjhK(hjyhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmemfd_luo_folio_ser (C struct)c.memfd_luo_folio_serhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hmemfd_luo_folio_serh]j)}(hstruct memfd_luo_folio_serh](hdesc_sig_keyword)}(hstructh]hstruct}(hjihhhNhNubah}(h]h ]kah"]h$]h&]uh1jghjchhhc/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&]uh1jyhjchhhjxhK/ubj)}(hmemfd_luo_folio_serh]j)}(hjah]hmemfd_luo_folio_ser}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjchhhjxhK/ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj_hhhjxhK/ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjxhK/hj\hhubj!)}(hhh]h)}(h#Serialized state of a single folio.h]h#Serialized state of a single folio.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK0hjhhubah}(h]h ]h"]h$]h&]uh1j hj\hhhjxhK/ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjyhNhNubh 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](ju)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK4hjubh 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.hhK6hjubh)}(h **Members**h]ju)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/mm/memfd_preservation:16: ./include/linux/kho/abi/memfd.hhK