€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ&/translations/zh_CN/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/zh_TW/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/pt_BR/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/sp_SP/core-api/kho/index”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ)SPDX-License-Identifier: GPL-2.0-or-later”h]”hŒ)SPDX-License-Identifier: GPL-2.0-or-later”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ@/var/lib/git/docbuild/linux/Documentation/core-api/kho/index.rst”h´KubhŒtarget”“”)�”}”(hŒ.. _kho-concepts:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ kho-concepts”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒKexec Handover Subsystem”h]”hŒKexec Handover Subsystem”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´Kubh×)�”}”(hhh]”(hÜ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhëh²hh³hÇh´K ubhŒ paragraph”“”)�”}”(hŒ�Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory regions, which could contain serialized system states, across kexec.”h]”hŒ�Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory regions, which could contain serialized system states, across kexec.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K hhëh²hubhý)�”}”(hŒêKHO uses :ref:`flattened device tree (FDT) ` to pass information about the preserved state from pre-exec kernel to post-kexec kernel and :ref:`scratch memory regions ` to ensure integrity of the preserved memory.”h]”(hŒ KHO uses ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ,:ref:`flattened device tree (FDT) `”h]”hŒinline”“”)�”}”(hjh]”hŒflattened device tree (FDT)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/kho/index”Œ refdomain”j%Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œkho_fdt”uh1hh³hÇh´Khj ubhŒ] to pass information about the preserved state from pre-exec kernel to post-kexec kernel and ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ+:ref:`scratch memory regions `”h]”j)�”}”(hj?h]”hŒscratch memory regions”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”(j$Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j1Œ refdomain”jKŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj7Œ kho_scratch”uh1hh³hÇh´Khj ubhŒ- to ensure integrity of the preserved memory.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khhëh²hubhÉ)�”}”(hŒ .. _kho_fdt:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒkho-fdt”uh1hÈh´Khhëh²hh³hÇubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K ubh×)�”}”(hhh]”(hÜ)�”}”(hŒKHO FDT”h]”hŒKHO FDT”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjzh²hh³hÇh´Kubhý)�”}”(hŒÙEvery KHO kexec carries a KHO specific flattened device tree (FDT) blob that describes the preserved state. The FDT includes properties describing preserved memory regions and nodes that hold subsystem specific state.”h]”hŒÙEvery KHO kexec carries a KHO specific flattened device tree (FDT) blob that describes the preserved state. The FDT includes properties describing preserved memory regions and nodes that hold subsystem specific state.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khjzh²hubhý)�”}”(hŒÓThe preserved memory regions contain either serialized subsystem states, or in-memory data that shall not be touched across kexec. After KHO, subsystems can retrieve and restore the preserved state from KHO FDT.”h]”hŒÓThe preserved memory regions contain either serialized subsystem states, or in-memory data that shall not be touched across kexec. After KHO, subsystems can retrieve and restore the preserved state from KHO FDT.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khjzh²hubhý)�”}”(hŒeSubsystems participating in KHO can define their own format for state serialization and preservation.”h]”hŒeSubsystems participating in KHO can define their own format for state serialization and preservation.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khjzh²hubhý)�”}”(hŒ²KHO FDT and structures defined by the subsystems form an ABI between pre-kexec and post-kexec kernels. This ABI is defined by header files in ``include/linux/kho/abi`` directory.”h]”(hŒŽKHO FDT and structures defined by the subsystems form an ABI between pre-kexec and post-kexec kernels. This ABI is defined by header files in ”…”�”}”(hjµh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``include/linux/kho/abi``”h]”hŒinclude/linux/kho/abi”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjµubhŒ directory.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K"hjzh²hubhŒcompound”“”)�”}”(hhh]”hŒtoctree”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”hj1Œentries”]”NŒcore-api/kho/abi”†”aŒ includefiles”]”jéaŒmaxdepth”KŒcaption”NŒglob”‰Œhidden”‰Œ includehidden”‰Œnumbered”KŒ titlesonly”‰Œ rawentries”]”uh1jÜh³hÇh´K&hjÙubah}”(h]”h ]”Œtoctree-wrapper”ah"]”h$]”h&]”uh1j×hjzh²hh³hÇh´NubhÉ)�”}”(hŒ.. _kho_scratch:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒ kho-scratch”uh1hÈh´K+hjzh²hh³hÇubeh}”(h]”(jqŒid1”eh ]”h"]”(Œkho fdt”Œkho_fdt”eh$]”h&]”uh1hÖhhØh²hh³hÇh´KŒexpect_referenced_by_name”}”jjgsŒexpect_referenced_by_id”}”jqjgsubh×)�”}”(hhh]”(hÜ)�”}”(hŒScratch Regions”h]”hŒScratch Regions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjh²hh³hÇh´K.ubhý)�”}”(hX4To boot into kexec, we need to have a physically contiguous memory range that contains no handed over memory. Kexec then places the target kernel and initrd into that region. The new kernel exclusively uses this region for memory allocations before during boot up to the initialization of the page allocator.”h]”hX4To boot into kexec, we need to have a physically contiguous memory range that contains no handed over memory. Kexec then places the target kernel and initrd into that region. The new kernel exclusively uses this region for memory allocations before during boot up to the initialization of the page allocator.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K0hjh²hubhý)�”}”(hX“We guarantee that we always have such regions through the scratch regions: On first boot KHO allocates several physically contiguous memory regions. Since after kexec these regions will be used by early memory allocations, there is a scratch region per NUMA node plus a scratch region to satisfy allocations requests that do not require particular NUMA node assignment. By default, size of the scratch region is calculated based on amount of memory allocated during boot. The ``kho_scratch`` kernel command line option may be used to explicitly define size of the scratch regions. The scratch regions are declared as CMA when page allocator is initialized so that their memory can be used during system lifetime. CMA gives us the guarantee that no handover pages land in that region, because handover pages must be at a static physical memory location and CMA enforces that only movable pages can be located inside.”h]”(hXÜWe guarantee that we always have such regions through the scratch regions: On first boot KHO allocates several physically contiguous memory regions. Since after kexec these regions will be used by early memory allocations, there is a scratch region per NUMA node plus a scratch region to satisfy allocations requests that do not require particular NUMA node assignment. By default, size of the scratch region is calculated based on amount of memory allocated during boot. The ”…”�”}”(hj4h²hh³Nh´Nubj¾)�”}”(hŒ``kho_scratch``”h]”hŒ kho_scratch”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj4ubhX¨ kernel command line option may be used to explicitly define size of the scratch regions. The scratch regions are declared as CMA when page allocator is initialized so that their memory can be used during system lifetime. CMA gives us the guarantee that no handover pages land in that region, because handover pages must be at a static physical memory location and CMA enforces that only movable pages can be located inside.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K5hjh²hubhý)�”}”(hXÊAfter KHO kexec, we ignore the ``kho_scratch`` kernel command line option and instead reuse the exact same region that was originally allocated. This allows us to recursively execute any amount of KHO kexecs. Because we used this region for boot memory allocations and as target memory for kexec blobs, some parts of that memory region may be reserved. These reservations are irrelevant for the next KHO, because kexec can overwrite even the original kernel.”h]”(hŒAfter KHO kexec, we ignore the ”…”�”}”(hjTh²hh³Nh´Nubj¾)�”}”(hŒ``kho_scratch``”h]”hŒ kho_scratch”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjTubhXœ kernel command line option and instead reuse the exact same region that was originally allocated. This allows us to recursively execute any amount of KHO kexecs. Because we used this region for boot memory allocations and as target memory for kexec blobs, some parts of that memory region may be reserved. These reservations are irrelevant for the next KHO, because kexec can overwrite even the original kernel.”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KChjh²hubeh}”(h]”(Œscratch-regions”jeh ]”h"]”(Œscratch regions”Œ kho_scratch”eh$]”h&]”uh1hÖhhØh²hh³hÇh´K.j}”jzjýsj}”jjýsubh×)�”}”(hhh]”(hÜ)�”}”(hŒKexec Handover Radix Tree”h]”hŒKexec Handover Radix Tree”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjh²hh³hÇh´KKubhý)�”}”(hXFThis is a radix tree implementation for tracking numeric keys across kexec transitions. It was developed for the KHO preserved memory map but is designed for broader use by any subsystem that needs to track keys. Conceptually speaking, the data structure is similar to a set. It tracks the presence or absence of numeric keys.”h]”hXFThis is a radix tree implementation for tracking numeric keys across kexec transitions. It was developed for the KHO preserved memory map but is designed for broader use by any subsystem that needs to track keys. Conceptually speaking, the data structure is similar to a set. It tracks the presence or absence of numeric keys.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œa/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:77: ./include/linux/kho_radix_tree.h”h´K hjh²hubhý)�”}”(hŒ_The radix tree is a multi-level tree where leaf nodes are bitmaps representing individual keys.”h]”hŒ_The radix tree is a multi-level tree where leaf nodes are bitmaps representing individual keys.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œa/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:77: ./include/linux/kho_radix_tree.h”h´Khjh²hubhý)�”}”(hŒñFor the KHO preserved memory map, to allow pages of different sizes (orders) to be stored efficiently in a single tree, it uses a unique key encoding scheme. Each key is an unsigned long that combines a page's physical address and its order.”h]”hŒóFor the KHO preserved memory map, to allow pages of different sizes (orders) to be stored efficiently in a single tree, it uses a unique key encoding scheme. Each key is an unsigned long that combines a page’s physical address and its order.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œa/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:77: ./include/linux/kho_radix_tree.h”h´Khjh²hubhý)�”}”(hŒäClient code is responsible for allocating the root node of the tree, initializing the mutex lock, and managing its lifecycle. It must use the tree data structures defined in the KHO ABI, `include/linux/kho/abi/kexec_handover.h`.”h]”(hŒ»Client code is responsible for allocating the root node of the tree, initializing the mutex lock, and managing its lifecycle. It must use the tree data structures defined in the KHO ABI, ”…”�”}”(hj½h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ(`include/linux/kho/abi/kexec_handover.h`”h]”hŒ&include/linux/kho/abi/kexec_handover.h”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj½ubhŒ.”…”�”}”(hj½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œa/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:77: ./include/linux/kho_radix_tree.h”h´Khjh²hubeh}”(h]”Œkexec-handover-radix-tree”ah ]”h"]”Œkexec handover radix tree”ah$]”h&]”uh1hÖhhØh²hh³hÇh´KKubh×)�”}”(hhh]”(hÜ)�”}”(hŒ Public API”h]”hŒ Public API”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjèh²hh³hÇh´KQubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œkho_radix_add_key (C function)”Œc.kho_radix_add_key”hNt”auh1jùhjèh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒFint kho_radix_add_key (struct kho_radix_tree *tree, unsigned long key)”h]”hŒdesc_signature_line”“”)�”}”(hŒEint kho_radix_add_key(struct kho_radix_tree *tree, unsigned long key)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jhjh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÆubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j-hjh²hh³j,h´KÆubhŒ desc_name”“”)�”}”(hŒkho_radix_add_key”h]”hŒ desc_sig_name”“”)�”}”(hŒkho_radix_add_key”h]”hŒkho_radix_add_key”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jDhj@ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j>hjh²hh³j,h´KÆubhŒdesc_parameterlist”“”)�”}”(hŒ0(struct kho_radix_tree *tree, unsigned long key)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct kho_radix_tree *tree”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jihjeubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjeubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_tree”h]”hŒkho_radix_tree”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”j�Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j§Œ ASTIdentifier”“”)�”}”j¢jHsbŒc.kho_radix_add_key”†”asbuh1hhjeubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjeubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jÂhjeubjE)�”}”(hŒtree”h]”hŒtree”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj_ubjd)�”}”(hŒunsigned long key”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjèubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjèubj)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjèubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjèubjE)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj_ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjh²hh³j,h´KÆubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hjh²hh³j,h´KÆubah}”(h]”jah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jh³j,h´KÆhj h²hubhŒ desc_content”“”)�”}”(hhh]”hý)�”}”(hŒAdd a key to the radix tree.”h]”hŒAdd a key to the radix tree.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÆhjUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj h²hh³j,h´KÆubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”Œdomain”j Œobjtype”jpŒdesctype”jpŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j h²hhjèh³Nh´NubhŒ container”“”)�”}”(hXÄ**Parameters** ``struct kho_radix_tree *tree`` The KHO radix tree. ``unsigned long key`` The key to add. **Description** This function traverses the radix tree based on the **key** provided. It sets the corresponding bit in the leaf bitmap to mark the **key** as present. If intermediate nodes do not exist along the path, they are allocated and added to the tree. **NOTE** Currently only keys of width up to ``KHO_RADIX_KEY_WIDTH`` are supported. This limit only exists because current users of the radix tree don't use more than that. Changing the maximum width requires changing the tree depth, which needs bumping the ABI version. **Return** 0 on success, or a negative error code on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj‚h]”hŒ Parameters”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÊhj|ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ4``struct kho_radix_tree *tree`` The KHO radix tree. ”h]”(hŒterm”“”)�”}”(hŒ``struct kho_radix_tree *tree``”h]”j¾)�”}”(hj©h]”hŒstruct kho_radix_tree *tree”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÇhj¡ubhŒ definition”“”)�”}”(hhh]”hý)�”}”(hŒThe KHO radix tree.”h]”hŒThe KHO radix tree.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¾h´KÇhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j¾h´KÇhjœubj )�”}”(hŒ&``unsigned long key`` The key to add. ”h]”(j¦)�”}”(hŒ``unsigned long key``”h]”j¾)�”}”(hjäh]”hŒunsigned long key”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÈhjÞubjÀ)�”}”(hhh]”hý)�”}”(hŒThe key to add.”h]”hŒThe key to add.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jùh´KÈhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jùh´KÈhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj|ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjh]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÊhj|ubhý)�”}”(hŒóThis function traverses the radix tree based on the **key** provided. It sets the corresponding bit in the leaf bitmap to mark the **key** as present. If intermediate nodes do not exist along the path, they are allocated and added to the tree.”h]”(hŒ4This function traverses the radix tree based on the ”…”�”}”(hj5h²hh³Nh´Nubj…)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj5ubhŒH provided. It sets the corresponding bit in the leaf bitmap to mark the ”…”�”}”(hj5h²hh³Nh´Nubj…)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj5ubhŒi as present. If intermediate nodes do not exist along the path, they are allocated and added to the tree.”…”�”}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÉhj|ubhý)�”}”(hŒ**NOTE**”h]”j…)�”}”(hjjh]”hŒNOTE”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÎhj|ubhý)�”}”(hXCurrently only keys of width up to ``KHO_RADIX_KEY_WIDTH`` are supported. This limit only exists because current users of the radix tree don't use more than that. Changing the maximum width requires changing the tree depth, which needs bumping the ABI version.”h]”(hŒ#Currently only keys of width up to ”…”�”}”(hj€h²hh³Nh´Nubj¾)�”}”(hŒ``KHO_RADIX_KEY_WIDTH``”h]”hŒKHO_RADIX_KEY_WIDTH”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj€ubhŒÌ are supported. This limit only exists because current users of the radix tree don’t use more than that. Changing the maximum width requires changing the tree depth, which needs bumping the ABI version.”…”�”}”(hj€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÏhj|ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj£h]”hŒReturn”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÔhj|ubhý)�”}”(hŒ20 on success, or a negative error code on failure.”h]”hŒ20 on success, or a negative error code on failure.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KÔhj|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_radix_del_key (C function)”Œc.kho_radix_del_key”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒGvoid kho_radix_del_key (struct kho_radix_tree *tree, unsigned long key)”h]”j)�”}”(hŒFvoid kho_radix_del_key(struct kho_radix_tree *tree, unsigned long key)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjäh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjäh²hh³jöh´Mubj?)�”}”(hŒkho_radix_del_key”h]”jE)�”}”(hŒkho_radix_del_key”h]”hŒkho_radix_del_key”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjäh²hh³jöh´Mubj^)�”}”(hŒ0(struct kho_radix_tree *tree, unsigned long key)”h]”(jd)�”}”(hŒstruct kho_radix_tree *tree”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj!ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_tree”h]”hŒkho_radix_tree”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jEŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j sbŒc.kho_radix_del_key”†”asbuh1hhj!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj!ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj!ubjE)�”}”(hŒtree”h]”hŒtree”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjubjd)�”}”(hŒunsigned long key”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj“ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj“ubj)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj“ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj“ubjE)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjäh²hh³jöh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjàh²hh³jöh´Mubah}”(h]”jÛah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jöh´MhjÝh²hubjT)�”}”(hhh]”hý)�”}”(hŒ$Removes the key from the radix tree.”h]”hŒ$Removes the key from the radix tree.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhjöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjÝh²hh³jöh´Mubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujjvjjw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hXM**Parameters** ``struct kho_radix_tree *tree`` The KHO radix tree. ``unsigned long key`` The key to remove. **Description** This function traverses the radix tree and clears the bit corresponding to the **key**, effectively removing it from the tree. It does not free the tree's intermediate nodes, even if they become empty.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M"hjubj›)�”}”(hhh]”(j )�”}”(hŒ4``struct kho_radix_tree *tree`` The KHO radix tree. ”h]”(j¦)�”}”(hŒ``struct kho_radix_tree *tree``”h]”j¾)�”}”(hj:h]”hŒstruct kho_radix_tree *tree”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj4ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe KHO radix tree.”h]”hŒThe KHO radix tree.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jOh´MhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jOh´Mhj1ubj )�”}”(hŒ)``unsigned long key`` The key to remove. ”h]”(j¦)�”}”(hŒ``unsigned long key``”h]”j¾)�”}”(hjsh]”hŒunsigned long key”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M hjmubjÀ)�”}”(hhh]”hý)�”}”(hŒThe key to remove.”h]”hŒThe key to remove.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jˆh´M hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jˆh´M hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj®h]”hŒ Description”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M"hjubhý)�”}”(hŒÉThis function traverses the radix tree and clears the bit corresponding to the **key**, effectively removing it from the tree. It does not free the tree's intermediate nodes, even if they become empty.”h]”(hŒOThis function traverses the radix tree and clears the bit corresponding to the ”…”�”}”(hjÄh²hh³Nh´Nubj…)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÄubhŒu, effectively removing it from the tree. It does not free the tree’s intermediate nodes, even if they become empty.”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M!hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ kho_radix_init_tree (C function)”Œc.kho_radix_init_tree”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒRint kho_radix_init_tree (struct kho_radix_tree *tree, struct kho_radix_node *root)”h]”j)�”}”(hŒQint kho_radix_init_tree(struct kho_radix_tree *tree, struct kho_radix_node *root)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M`ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjh²hh³jh´M`ubj?)�”}”(hŒkho_radix_init_tree”h]”jE)�”}”(hŒkho_radix_init_tree”h]”hŒkho_radix_init_tree”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj"ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjh²hh³jh´M`ubj^)�”}”(hŒ:(struct kho_radix_tree *tree, struct kho_radix_node *root)”h]”(jd)�”}”(hŒstruct kho_radix_tree *tree”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj>ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj>ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_tree”h]”hŒkho_radix_tree”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jbŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j(sbŒc.kho_radix_init_tree”†”asbuh1hhj>ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj>ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj>ubjE)�”}”(hŒtree”h]”hŒtree”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj:ubjd)�”}”(hŒstruct kho_radix_node *root”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj°ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj°ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_node”h]”hŒkho_radix_node”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jÔŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j|Œc.kho_radix_init_tree”†”asbuh1hhj°ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj°ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj°ubjE)�”}”(hŒroot”h]”hŒroot”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjh²hh³jh´M`ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjýh²hh³jh´M`ubah}”(h]”jøah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jh´M`hjúh²hubjT)�”}”(hhh]”hý)�”}”(hŒinitialize the radix tree.”h]”hŒinitialize the radix tree.”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M`hj2 h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjúh²hh³jh´M`ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujM jvjM jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hXª**Parameters** ``struct kho_radix_tree *tree`` the tree to initialize. ``struct kho_radix_node *root`` root table of the radix tree. **Description** Initialize the radix tree with the given root node. If root is ``NULL``, an empty root table is allocated. If root is not ``NULL``, it is the caller's responsibility to make sure the root is valid and in the correct format. **Return** 0 on success, -errno on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjW h]”hŒ Parameters”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MdhjQ ubj›)�”}”(hhh]”(j )�”}”(hŒ8``struct kho_radix_tree *tree`` the tree to initialize. ”h]”(j¦)�”}”(hŒ``struct kho_radix_tree *tree``”h]”j¾)�”}”(hjv h]”hŒstruct kho_radix_tree *tree”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjt ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mahjp ubjÀ)�”}”(hhh]”hý)�”}”(hŒthe tree to initialize.”h]”hŒthe tree to initialize.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j‹ h´MahjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjp ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j‹ h´Mahjm ubj )�”}”(hŒ>``struct kho_radix_node *root`` root table of the radix tree. ”h]”(j¦)�”}”(hŒ``struct kho_radix_node *root``”h]”j¾)�”}”(hj¯ h]”hŒstruct kho_radix_node *root”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mbhj© ubjÀ)�”}”(hhh]”hý)�”}”(hŒroot table of the radix tree.”h]”hŒroot table of the radix tree.”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÄ h´MbhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj© ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÄ h´Mbhjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjQ ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjê h]”hŒ Description”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MdhjQ ubhý)�”}”(hŒßInitialize the radix tree with the given root node. If root is ``NULL``, an empty root table is allocated. If root is not ``NULL``, it is the caller's responsibility to make sure the root is valid and in the correct format.”h]”(hŒ?Initialize the radix tree with the given root node. If root is ”…”�”}”(hj h²hh³Nh´Nubj¾)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj ubhŒ3, an empty root table is allocated. If root is not ”…”�”}”(hj h²hh³Nh´Nubj¾)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj ubhŒ_, it is the caller’s responsibility to make sure the root is valid and in the correct format.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MchjQ ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj5 h]”hŒReturn”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MghjQ ubhý)�”}”(hŒ 0 on success, -errno on failure.”h]”hŒ 0 on success, -errno on failure.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MhhjQ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#kho_radix_destroy_tree (C function)”Œc.kho_radix_destroy_tree”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ9void kho_radix_destroy_tree (struct kho_radix_tree *tree)”h]”j)�”}”(hŒ8void kho_radix_destroy_tree(struct kho_radix_tree *tree)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjv h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mxubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjv h²hh³jˆ h´Mxubj?)�”}”(hŒkho_radix_destroy_tree”h]”jE)�”}”(hŒkho_radix_destroy_tree”h]”hŒkho_radix_destroy_tree”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj— ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjv h²hh³jˆ h´Mxubj^)�”}”(hŒ(struct kho_radix_tree *tree)”h]”jd)�”}”(hŒstruct kho_radix_tree *tree”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj³ ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj³ ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_tree”h]”hŒkho_radix_tree”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÒ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j× Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j� sbŒc.kho_radix_destroy_tree”†”asbuh1hhj³ ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj³ ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj³ ubjE)�”}”(hŒtree”h]”hŒtree”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj³ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj¯ ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjv h²hh³jˆ h´Mxubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjr h²hh³jˆ h´Mxubah}”(h]”jm ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jˆ h´Mxhjo h²hubjT)�”}”(hhh]”hý)�”}”(hŒDestroy the radix tree”h]”hŒDestroy the radix tree”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mxhj7 h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjo h²hh³jˆ h´Mxubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujR jvjR jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hŒƒ**Parameters** ``struct kho_radix_tree *tree`` The radix tree to destroy **Description** Walk **tree** and free all its nodes.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj\ h]”hŒ Parameters”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M|hjV ubj›)�”}”(hhh]”j )�”}”(hŒ:``struct kho_radix_tree *tree`` The radix tree to destroy ”h]”(j¦)�”}”(hŒ``struct kho_radix_tree *tree``”h]”j¾)�”}”(hj{ h]”hŒstruct kho_radix_tree *tree”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Myhju ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe radix tree to destroy”h]”hŒThe radix tree to destroy”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j� h´Myhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hju ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j� h´Myhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjV ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj¶ h]”hŒ Description”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M{hjV ubhý)�”}”(hŒ%Walk **tree** and free all its nodes.”h]”(hŒWalk ”…”�”}”(hjÌ h²hh³Nh´Nubj…)�”}”(hŒ**tree**”h]”hŒtree”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÌ ubhŒ and free all its nodes.”…”�”}”(hjÌ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MzhjV ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ kho_radix_walk_tree (C function)”Œc.kho_radix_walk_tree”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒeint kho_radix_walk_tree (struct kho_radix_tree *tree, const struct kho_radix_walk_cb *cb, void *data)”h]”j)�”}”(hŒdint kho_radix_walk_tree(struct kho_radix_tree *tree, const struct kho_radix_walk_cb *cb, void *data)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÎubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj h²hh³j h´MÎubj?)�”}”(hŒkho_radix_walk_tree”h]”jE)�”}”(hŒkho_radix_walk_tree”h]”hŒkho_radix_walk_tree”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj* ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj h²hh³j h´MÎubj^)�”}”(hŒM(struct kho_radix_tree *tree, const struct kho_radix_walk_cb *cb, void *data)”h]”(jd)�”}”(hŒstruct kho_radix_tree *tree”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjF ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjF ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_tree”h]”hŒkho_radix_tree”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhje ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jj Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j0 sbŒc.kho_radix_walk_tree”†”asbuh1hhjF ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjF ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjF ubjE)�”}”(hŒtree”h]”hŒtree”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjF ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjB ubjd)�”}”(hŒ"const struct kho_radix_walk_cb *cb”h]”(jj)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj¸ ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj¸ ubjj)�”}”(hjmh]”hŒstruct”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj¸ ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj¸ ubh)�”}”(hhh]”jE)�”}”(hŒkho_radix_walk_cb”h]”hŒkho_radix_walk_cb”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjó ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jø Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j„ Œc.kho_radix_walk_tree”†”asbuh1hhj¸ ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj¸ ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj¸ ubjE)�”}”(hŒcb”h]”hŒcb”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¸ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjB ubjd)�”}”(hŒ void *data”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjD ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjD ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjD ubjE)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjD ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjB ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj h²hh³j h´MÎubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj h²hh³j h´MÎubah}”(h]”j ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j h´MÎhj h²hubjT)�”}”(hhh]”hý)�”}”(hŒ;Traverses the radix tree and calls a callback for each key.”h]”hŒ;Traverses the radix tree and calls a callback for each key.”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÎhj˜ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj h²hh³j h´MÎubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj³ jvj³ jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX**Parameters** ``struct kho_radix_tree *tree`` A pointer to the KHO radix tree to walk. ``const struct kho_radix_walk_cb *cb`` Set of callbacks to be invoked during the tree walk. ``void *data`` Opaque data pointer passed to each callback in **cb**. **Description** This function walks the radix tree, searching from the top level down to the lowest level (level 0), invoking the appropriate callbacks. **Return** 0 if the walk completed the specified tree, or the non-zero return value from the callback that stopped the walk.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj½ h]”hŒ Parameters”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj» ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÒhj· ubj›)�”}”(hhh]”(j )�”}”(hŒI``struct kho_radix_tree *tree`` A pointer to the KHO radix tree to walk. ”h]”(j¦)�”}”(hŒ``struct kho_radix_tree *tree``”h]”j¾)�”}”(hjÜ h]”hŒstruct kho_radix_tree *tree”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÏhjÖ ubjÀ)�”}”(hhh]”hý)�”}”(hŒ(A pointer to the KHO radix tree to walk.”h]”hŒ(A pointer to the KHO radix tree to walk.”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jñ h´MÏhjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÖ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jñ h´MÏhjÓ ubj )�”}”(hŒ\``const struct kho_radix_walk_cb *cb`` Set of callbacks to be invoked during the tree walk. ”h]”(j¦)�”}”(hŒ&``const struct kho_radix_walk_cb *cb``”h]”j¾)�”}”(hjh]”hŒ"const struct kho_radix_walk_cb *cb”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÐhjubjÀ)�”}”(hhh]”hý)�”}”(hŒ4Set of callbacks to be invoked during the tree walk.”h]”hŒ4Set of callbacks to be invoked during the tree walk.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j*h´MÐhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j*h´MÐhjÓ ubj )�”}”(hŒF``void *data`` Opaque data pointer passed to each callback in **cb**. ”h]”(j¦)�”}”(hŒ``void *data``”h]”j¾)�”}”(hjNh]”hŒ void *data”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÑhjHubjÀ)�”}”(hhh]”hý)�”}”(hŒ6Opaque data pointer passed to each callback in **cb**.”h]”(hŒ/Opaque data pointer passed to each callback in ”…”�”}”(hjgh²hh³Nh´Nubj…)�”}”(hŒ**cb**”h]”hŒcb”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjgubhŒ.”…”�”}”(hjgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jch´MÑhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jch´MÑhjÓ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj· ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj›h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÓhj· ubhý)�”}”(hŒˆThis function walks the radix tree, searching from the top level down to the lowest level (level 0), invoking the appropriate callbacks.”h]”hŒˆThis function walks the radix tree, searching from the top level down to the lowest level (level 0), invoking the appropriate callbacks.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÒhj· ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjÂh]”hŒReturn”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÕhj· ubhý)�”}”(hŒq0 if the walk completed the specified tree, or the non-zero return value from the callback that stopped the walk.”h]”hŒq0 if the walk completed the specified tree, or the non-zero return value from the callback that stopped the walk.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÖhj· ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_restore_folio (C function)”Œc.kho_restore_folio”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ3struct folio * kho_restore_folio (phys_addr_t phys)”h]”j)�”}”(hŒ1struct folio *kho_restore_folio(phys_addr_t phys)”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjh²hh³jh´M!ubh)�”}”(hhh]”jE)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j(Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢Œkho_restore_folio”sbŒc.kho_restore_folio”†”asbuh1hhjh²hh³jh´M!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjh²hh³jh´M!ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjh²hh³jh´M!ubj?)�”}”(hŒkho_restore_folio”h]”jE)�”}”(hjDh]”hŒkho_restore_folio”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjbubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjh²hh³jh´M!ubj^)�”}”(hŒ(phys_addr_t phys)”h]”jd)�”}”(hŒphys_addr_t phys”h]”(h)�”}”(hhh]”jE)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j†Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”jBŒc.kho_restore_folio”†”asbuh1hhj}ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj}ubjE)�”}”(hŒphys”h]”hŒphys”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjyubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjh²hh³jh´M!ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjÿh²hh³jh´M!ubah}”(h]”júah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jh´M!hjüh²hubjT)�”}”(hhh]”hý)�”}”(hŒ.recreates the folio from the preserved memory.”h]”hŒ.recreates the folio from the preserved memory.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M!hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjüh²hh³jh´M!ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujòjvjòjw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hŒ‹**Parameters** ``phys_addr_t phys`` physical address of the folio. **Return** pointer to the struct folio on success, NULL on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M%hjöubj›)�”}”(hhh]”j )�”}”(hŒ4``phys_addr_t phys`` physical address of the folio. ”h]”(j¦)�”}”(hŒ``phys_addr_t phys``”h]”j¾)�”}”(hjh]”hŒphys_addr_t phys”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M"hjubjÀ)�”}”(hhh]”hý)�”}”(hŒphysical address of the folio.”h]”hŒphysical address of the folio.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j0h´M"hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j0h´M"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjöubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjVh]”hŒReturn”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M$hjöubhý)�”}”(hŒ8pointer to the struct folio on success, NULL on failure.”h]”hŒ8pointer to the struct folio on success, NULL on failure.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M$hjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_restore_pages (C function)”Œc.kho_restore_pages”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒJstruct page * kho_restore_pages (phys_addr_t phys, unsigned long nr_pages)”h]”j)�”}”(hŒHstruct page *kho_restore_pages(phys_addr_t phys, unsigned long nr_pages)”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj—h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M/ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj—h²hh³j¨h´M/ubh)�”}”(hhh]”jE)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j¼Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢Œkho_restore_pages”sbŒc.kho_restore_pages”†”asbuh1hhj—h²hh³j¨h´M/ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj—h²hh³j¨h´M/ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj—h²hh³j¨h´M/ubj?)�”}”(hŒkho_restore_pages”h]”jE)�”}”(hjØh]”hŒkho_restore_pages”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjöubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj—h²hh³j¨h´M/ubj^)�”}”(hŒ*(phys_addr_t phys, unsigned long nr_pages)”h]”(jd)�”}”(hŒphys_addr_t phys”h]”(h)�”}”(hhh]”jE)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”jÖŒc.kho_restore_pages”†”asbuh1hhjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubjE)�”}”(hŒphys”h]”hŒphys”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj ubjd)�”}”(hŒunsigned long nr_pages”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjYubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjYubj)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjYubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjYubjE)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj—h²hh³j¨h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj“h²hh³j¨h´M/ubah}”(h]”jŽah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j¨h´M/hj�h²hubjT)�”}”(hhh]”hý)�”}”(hŒ)restore list of contiguous order 0 pages.”h]”hŒ)restore list of contiguous order 0 pages.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M/hj¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj�h²hh³j¨h´M/ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj×jvj×jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX**Parameters** ``phys_addr_t phys`` physical address of the first page. ``unsigned long nr_pages`` number of pages. **Description** Restore a contiguous list of order 0 pages that was preserved with kho_preserve_pages(). **Return** the first page on success, NULL on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjáh]”hŒ Parameters”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M3hjÛubj›)�”}”(hhh]”(j )�”}”(hŒ9``phys_addr_t phys`` physical address of the first page. ”h]”(j¦)�”}”(hŒ``phys_addr_t phys``”h]”j¾)�”}”(hjh]”hŒphys_addr_t phys”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M0hjúubjÀ)�”}”(hhh]”hý)�”}”(hŒ#physical address of the first page.”h]”hŒ#physical address of the first page.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jh´M0hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jh´M0hj÷ubj )�”}”(hŒ,``unsigned long nr_pages`` number of pages. ”h]”(j¦)�”}”(hŒ``unsigned long nr_pages``”h]”j¾)�”}”(hj9h]”hŒunsigned long nr_pages”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M1hj3ubjÀ)�”}”(hhh]”hý)�”}”(hŒnumber of pages.”h]”hŒnumber of pages.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jNh´M1hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jNh´M1hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjÛubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjth]”hŒ Description”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M3hjÛubhý)�”}”(hŒXRestore a contiguous list of order 0 pages that was preserved with kho_preserve_pages().”h]”hŒXRestore a contiguous list of order 0 pages that was preserved with kho_preserve_pages().”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M2hjÛubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj›h]”hŒReturn”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M5hjÛubhý)�”}”(hŒ+the first page on success, NULL on failure.”h]”hŒ+the first page on success, NULL on failure.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M6hjÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_add_subtree (C function)”Œc.kho_add_subtree”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ?int kho_add_subtree (const char *name, void *blob, size_t size)”h]”j)�”}”(hŒ>int kho_add_subtree(const char *name, void *blob, size_t size)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÜh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÜh²hh³jîh´Mubj?)�”}”(hŒkho_add_subtree”h]”jE)�”}”(hŒkho_add_subtree”h]”hŒkho_add_subtree”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjýubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÜh²hh³jîh´Mubj^)�”}”(hŒ+(const char *name, void *blob, size_t size)”h]”(jd)�”}”(hŒconst char *name”h]”(jj)�”}”(hj¾ h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubj)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjubjE)�”}”(hŒname”h]”hŒname”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjubjd)�”}”(hŒ void *blob”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjvubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjvubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjvubjE)�”}”(hŒblob”h]”hŒblob”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjubjd)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jE)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jÁŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jsbŒc.kho_add_subtree”†”asbuh1hhj¸ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj¸ubjE)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¸ubeh}”(h]”h ]”h"]”•h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÜh²hh³jîh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjØh²hh³jîh´Mubah}”(h]”jÓah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jîh´MhjÕh²hubjT)�”}”(hhh]”hý)�”}”(hŒ;record the physical address of a sub blob in KHO root tree.”h]”hŒ;record the physical address of a sub blob in KHO root tree.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjÕh²hh³jîh´Mubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj/jvj/jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX1**Parameters** ``const char *name`` name of the sub tree. ``void *blob`` the sub tree blob. ``size_t size`` size of the blob in bytes. **Description** Creates a new child node named **name** in KHO root FDT and records the physical address of **blob**. The pages of **blob** must also be preserved by KHO for the new kernel to retrieve it after kexec. A debugfs blob entry is also created at ``/sys/kernel/debug/kho/out/sub_fdts/**name**`` when kernel is configured with CONFIG_KEXEC_HANDOVER_DEBUGFS **Return** 0 on success, error code on failure”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj9h]”hŒ Parameters”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj3ubj›)�”}”(hhh]”(j )�”}”(hŒ+``const char *name`` name of the sub tree. ”h]”(j¦)�”}”(hŒ``const char *name``”h]”j¾)�”}”(hjXh]”hŒconst char *name”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MhjRubjÀ)�”}”(hhh]”hý)�”}”(hŒname of the sub tree.”h]”hŒname of the sub tree.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jmh´Mhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jmh´MhjOubj )�”}”(hŒ"``void *blob`` the sub tree blob. ”h]”(j¦)�”}”(hŒ``void *blob``”h]”j¾)�”}”(hj‘h]”hŒ void *blob”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj‹ubjÀ)�”}”(hhh]”hý)�”}”(hŒthe sub tree blob.”h]”hŒthe sub tree blob.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¦h´Mhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j¦h´MhjOubj )�”}”(hŒ+``size_t size`` size of the blob in bytes. ”h]”(j¦)�”}”(hŒ``size_t size``”h]”j¾)�”}”(hjÊh]”hŒ size_t size”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MhjÄubjÀ)�”}”(hhh]”hý)�”}”(hŒsize of the blob in bytes.”h]”hŒsize of the blob in bytes.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jßh´Mhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jßh´MhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj3ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj3ubhý)�”}”(hŒÈCreates a new child node named **name** in KHO root FDT and records the physical address of **blob**. The pages of **blob** must also be preserved by KHO for the new kernel to retrieve it after kexec.”h]”(hŒCreates a new child node named ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ5 in KHO root FDT and records the physical address of ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ**blob**”h]”hŒblob”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ. The pages of ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ**blob**”h]”hŒblob”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒM must also be preserved by KHO for the new kernel to retrieve it after kexec.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj3ubhý)�”}”(hŒ”A debugfs blob entry is also created at ``/sys/kernel/debug/kho/out/sub_fdts/**name**`` when kernel is configured with CONFIG_KEXEC_HANDOVER_DEBUGFS”h]”(hŒ(A debugfs blob entry is also created at ”…”�”}”(hj`h²hh³Nh´Nubj¾)�”}”(hŒ/``/sys/kernel/debug/kho/out/sub_fdts/**name**``”h]”hŒ+/sys/kernel/debug/kho/out/sub_fdts/**name**”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj`ubhŒ= when kernel is configured with CONFIG_KEXEC_HANDOVER_DEBUGFS”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj3ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjƒh]”hŒReturn”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M hj3ubhý)�”}”(hŒ#0 on success, error code on failure”h]”hŒ#0 on success, error code on failure”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M!hj3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_preserve_folio (C function)”Œc.kho_preserve_folio”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ,int kho_preserve_folio (struct folio *folio)”h]”j)�”}”(hŒ+int kho_preserve_folio(struct folio *folio)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÄh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Msubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÄh²hh³jÖh´Msubj?)�”}”(hŒkho_preserve_folio”h]”jE)�”}”(hŒkho_preserve_folio”h]”hŒkho_preserve_folio”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjåubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÄh²hh³jÖh´Msubj^)�”}”(hŒ(struct folio *folio)”h]”jd)�”}”(hŒstruct folio *folio”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubh)�”}”(hhh]”jE)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j%Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jësbŒc.kho_preserve_folio”†”asbuh1hhjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjubjE)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjýubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÄh²hh³jÖh´Msubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjÀh²hh³jÖh´Msubah}”(h]”j»ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jÖh´Mshj½h²hubjT)�”}”(hhh]”hý)�”}”(hŒpreserve a folio across kexec.”h]”hŒpreserve a folio across kexec.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mshj…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj½h²hh³jÖh´Msubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj jvj jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hŒÜ**Parameters** ``struct folio *folio`` folio to preserve. **Description** Instructs KHO to preserve the whole folio across kexec. The order will be preserved as well. **Return** 0 on success, error code on failure”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjªh]”hŒ Parameters”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mwhj¤ubj›)�”}”(hhh]”j )�”}”(hŒ+``struct folio *folio`` folio to preserve. ”h]”(j¦)�”}”(hŒ``struct folio *folio``”h]”j¾)�”}”(hjÉh]”hŒstruct folio *folio”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MthjÃubjÀ)�”}”(hhh]”hý)�”}”(hŒfolio to preserve.”h]”hŒfolio to preserve.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÞh´Mthjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÞh´MthjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj¤ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mvhj¤ubhý)�”}”(hŒ\Instructs KHO to preserve the whole folio across kexec. The order will be preserved as well.”h]”hŒ\Instructs KHO to preserve the whole folio across kexec. The order will be preserved as well.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Muhj¤ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj+h]”hŒReturn”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mxhj¤ubhý)�”}”(hŒ#0 on success, error code on failure”h]”hŒ#0 on success, error code on failure”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Myhj¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!kho_unpreserve_folio (C function)”Œc.kho_unpreserve_folio”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ/void kho_unpreserve_folio (struct folio *folio)”h]”j)�”}”(hŒ.void kho_unpreserve_folio(struct folio *folio)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjlh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M‹ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjlh²hh³j~h´M‹ubj?)�”}”(hŒkho_unpreserve_folio”h]”jE)�”}”(hŒkho_unpreserve_folio”h]”hŒkho_unpreserve_folio”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj�ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjlh²hh³j~h´M‹ubj^)�”}”(hŒ(struct folio *folio)”h]”jd)�”}”(hŒstruct folio *folio”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj©ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj©ubh)�”}”(hhh]”jE)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jÍŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j“sbŒc.kho_unpreserve_folio”†”asbuh1hhj©ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj©ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj©ubjE)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj¥ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjlh²hh³j~h´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjhh²hh³j~h´M‹ubah}”(h]”jcah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j~h´M‹hjeh²hubjT)�”}”(hhh]”hý)�”}”(hŒunpreserve a folio.”h]”hŒunpreserve a folio.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M‹hj-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjeh²hh³j~h´M‹ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujHjvjHjw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hŒÿ**Parameters** ``struct folio *folio`` folio to unpreserve. **Description** Instructs KHO to unpreserve a folio that was preserved by kho_preserve_folio() before. The provided **folio** (pfn and order) must exactly match a previously preserved folio.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjRh]”hŒ Parameters”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M�hjLubj›)�”}”(hhh]”j )�”}”(hŒ-``struct folio *folio`` folio to unpreserve. ”h]”(j¦)�”}”(hŒ``struct folio *folio``”h]”j¾)�”}”(hjqh]”hŒstruct folio *folio”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MŒhjkubjÀ)�”}”(hhh]”hý)�”}”(hŒfolio to unpreserve.”h]”hŒfolio to unpreserve.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j†h´MŒhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j†h´MŒhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjLubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj¬h]”hŒ Description”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MŽhjLubhý)�”}”(hŒ®Instructs KHO to unpreserve a folio that was preserved by kho_preserve_folio() before. The provided **folio** (pfn and order) must exactly match a previously preserved folio.”h]”(hŒdInstructs KHO to unpreserve a folio that was preserved by kho_preserve_folio() before. The provided ”…”�”}”(hjÂh²hh³Nh´Nubj…)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂubhŒA (pfn and order) must exactly match a previously preserved folio.”…”�”}”(hjÂh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M�hjLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_preserve_pages (C function)”Œc.kho_preserve_pages”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒBint kho_preserve_pages (struct page *page, unsigned long nr_pages)”h]”j)�”}”(hŒAint kho_preserve_pages(struct page *page, unsigned long nr_pages)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÿh²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M½ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÿh²hh³jh´M½ubj?)�”}”(hŒkho_preserve_pages”h]”jE)�”}”(hŒkho_preserve_pages”h]”hŒkho_preserve_pages”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÿh²hh³jh´M½ubj^)�”}”(hŒ+(struct page *page, unsigned long nr_pages)”h]”(jd)�”}”(hŒstruct page *page”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj<ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj<ubh)�”}”(hhh]”jE)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j`Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j&sbŒc.kho_preserve_pages”†”asbuh1hhj<ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj<ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj<ubjE)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj8ubjd)�”}”(hŒunsigned long nr_pages”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj®ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj®ubj)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj®ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj®ubjE)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj8ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÿh²hh³jh´M½ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjûh²hh³jh´M½ubah}”(h]”jöah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jh´M½hjøh²hubjT)�”}”(hhh]”hý)�”}”(hŒ&preserve contiguous pages across kexec”h]”hŒ&preserve contiguous pages across kexec”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M½hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjøh²hh³jh´M½ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj,jvj,jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX?**Parameters** ``struct page *page`` first page in the list. ``unsigned long nr_pages`` number of pages. **Description** Preserve a contiguous list of order 0 pages. Must be restored using kho_restore_pages() to ensure the pages are restored properly as order 0. **Return** 0 on success, error code on failure”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÁhj0ubj›)�”}”(hhh]”(j )�”}”(hŒ.``struct page *page`` first page in the list. ”h]”(j¦)�”}”(hŒ``struct page *page``”h]”j¾)�”}”(hjUh]”hŒstruct page *page”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M¾hjOubjÀ)�”}”(hhh]”hý)�”}”(hŒfirst page in the list.”h]”hŒfirst page in the list.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jjh´M¾hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jjh´M¾hjLubj )�”}”(hŒ,``unsigned long nr_pages`` number of pages. ”h]”(j¦)�”}”(hŒ``unsigned long nr_pages``”h]”j¾)�”}”(hjŽh]”hŒunsigned long nr_pages”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M¿hjˆubjÀ)�”}”(hhh]”hý)�”}”(hŒnumber of pages.”h]”hŒnumber of pages.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j£h´M¿hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j£h´M¿hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj0ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjÉh]”hŒ Description”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÁhj0ubhý)�”}”(hŒ�Preserve a contiguous list of order 0 pages. Must be restored using kho_restore_pages() to ensure the pages are restored properly as order 0.”h]”hŒ�Preserve a contiguous list of order 0 pages. Must be restored using kho_restore_pages() to ensure the pages are restored properly as order 0.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÀhj0ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjðh]”hŒReturn”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÃhj0ubhý)�”}”(hŒ#0 on success, error code on failure”h]”hŒ#0 on success, error code on failure”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MÄhj0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!kho_unpreserve_pages (C function)”Œc.kho_unpreserve_pages”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒEvoid kho_unpreserve_pages (struct page *page, unsigned long nr_pages)”h]”j)�”}”(hŒDvoid kho_unpreserve_pages(struct page *page, unsigned long nr_pages)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj1h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mêubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj1h²hh³jCh´Mêubj?)�”}”(hŒkho_unpreserve_pages”h]”jE)�”}”(hŒkho_unpreserve_pages”h]”hŒkho_unpreserve_pages”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjRubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj1h²hh³jCh´Mêubj^)�”}”(hŒ+(struct page *page, unsigned long nr_pages)”h]”(jd)�”}”(hŒstruct page *page”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjnubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjnubh)�”}”(hhh]”jE)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j’Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jXsbŒc.kho_unpreserve_pages”†”asbuh1hhjnubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjnubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjnubjE)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjjubjd)�”}”(hŒunsigned long nr_pages”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjàubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjàubj)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjàubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjàubjE)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj1h²hh³jCh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj-h²hh³jCh´Mêubah}”(h]”j(ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jCh´Mêhj*h²hubjT)�”}”(hhh]”hý)�”}”(hŒunpreserve contiguous pages.”h]”hŒunpreserve contiguous pages.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MêhjCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj*h²hh³jCh´Mêubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj^jvj^jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX�**Parameters** ``struct page *page`` first page in the list. ``unsigned long nr_pages`` number of pages. **Description** Instructs KHO to unpreserve **nr_pages** contiguous pages starting from **page**. This must be called with the same **page** and **nr_pages** as the corresponding kho_preserve_pages() call. Unpreserving arbitrary sub-ranges of larger preserved blocks is not supported.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjhh]”hŒ Parameters”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mîhjbubj›)�”}”(hhh]”(j )�”}”(hŒ.``struct page *page`` first page in the list. ”h]”(j¦)�”}”(hŒ``struct page *page``”h]”j¾)�”}”(hj‡h]”hŒstruct page *page”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mëhj�ubjÀ)�”}”(hhh]”hý)�”}”(hŒfirst page in the list.”h]”hŒfirst page in the list.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jœh´Mëhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jœh´Mëhj~ubj )�”}”(hŒ,``unsigned long nr_pages`` number of pages. ”h]”(j¦)�”}”(hŒ``unsigned long nr_pages``”h]”j¾)�”}”(hjÀh]”hŒunsigned long nr_pages”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MìhjºubjÀ)�”}”(hhh]”hý)�”}”(hŒnumber of pages.”h]”hŒnumber of pages.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÕh´MìhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÕh´Mìhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjbubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjûh]”hŒ Description”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mîhjbubhý)�”}”(hX Instructs KHO to unpreserve **nr_pages** contiguous pages starting from **page**. This must be called with the same **page** and **nr_pages** as the corresponding kho_preserve_pages() call. Unpreserving arbitrary sub-ranges of larger preserved blocks is not supported.”h]”(hŒInstructs KHO to unpreserve ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ **nr_pages**”h]”hŒnr_pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ contiguous pages starting from ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ$. This must be called with the same ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubj…)�”}”(hŒ **nr_pages**”h]”hŒnr_pages”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubhŒ as the corresponding kho_preserve_pages() call. Unpreserving arbitrary sub-ranges of larger preserved blocks is not supported.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Míhjbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!kho_preserve_vmalloc (C function)”Œc.kho_preserve_vmalloc”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒFint kho_preserve_vmalloc (void *ptr, struct kho_vmalloc *preservation)”h]”j)�”}”(hŒEint kho_preserve_vmalloc(void *ptr, struct kho_vmalloc *preservation)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj„h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M@ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj„h²hh³j–h´M@ubj?)�”}”(hŒkho_preserve_vmalloc”h]”jE)�”}”(hŒkho_preserve_vmalloc”h]”hŒkho_preserve_vmalloc”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¥ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj„h²hh³j–h´M@ubj^)�”}”(hŒ-(void *ptr, struct kho_vmalloc *preservation)”h]”(jd)�”}”(hŒ void *ptr”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÁubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÁubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjÁubjE)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj½ubjd)�”}”(hŒ struct kho_vmalloc *preservation”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubh)�”}”(hhh]”jE)�”}”(hŒ kho_vmalloc”h]”hŒ kho_vmalloc”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j'Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j«sbŒc.kho_preserve_vmalloc”†”asbuh1hhjubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjubjE)�”}”(hŒ preservation”h]”hŒ preservation”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj½ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj„h²hh³j–h´M@ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj€h²hh³j–h´M@ubah}”(h]”j{ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j–h´M@hj}h²hubjT)�”}”(hhh]”hý)�”}”(hŒ5preserve memory allocated with vmalloc() across kexec”h]”hŒ5preserve memory allocated with vmalloc() across kexec”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M@hj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj}h²hh³j–h´M@ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj¢jvj¢jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX?**Parameters** ``void *ptr`` pointer to the area in vmalloc address space ``struct kho_vmalloc *preservation`` placeholder for preservation metadata **Description** Instructs KHO to preserve the area in vmalloc address space at **ptr**. The physical pages mapped at **ptr** will be preserved and on successful return **preservation** will hold the physical address of a structure that describes the preservation. **NOTE** The memory allocated with vmalloc_node() variants cannot be reliably restored on the same node **Return** 0 on success, error code on failure”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj¬h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MDhj¦ubj›)�”}”(hhh]”(j )�”}”(hŒ;``void *ptr`` pointer to the area in vmalloc address space ”h]”(j¦)�”}”(hŒ ``void *ptr``”h]”j¾)�”}”(hjËh]”hŒ void *ptr”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MAhjÅubjÀ)�”}”(hhh]”hý)�”}”(hŒ,pointer to the area in vmalloc address space”h]”hŒ,pointer to the area in vmalloc address space”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jàh´MAhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jàh´MAhjÂubj )�”}”(hŒK``struct kho_vmalloc *preservation`` placeholder for preservation metadata ”h]”(j¦)�”}”(hŒ$``struct kho_vmalloc *preservation``”h]”j¾)�”}”(hjh]”hŒ struct kho_vmalloc *preservation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MBhjþubjÀ)�”}”(hhh]”hý)�”}”(hŒ%placeholder for preservation metadata”h]”hŒ%placeholder for preservation metadata”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jh´MBhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jh´MBhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj¦ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj?h]”hŒ Description”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MDhj¦ubhý)�”}”(hŒ÷Instructs KHO to preserve the area in vmalloc address space at **ptr**. The physical pages mapped at **ptr** will be preserved and on successful return **preservation** will hold the physical address of a structure that describes the preservation.”h]”(hŒ?Instructs KHO to preserve the area in vmalloc address space at ”…”�”}”(hjUh²hh³Nh´Nubj…)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjUubhŒ. The physical pages mapped at ”…”�”}”(hjUh²hh³Nh´Nubj…)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjUubhŒ, will be preserved and on successful return ”…”�”}”(hjUh²hh³Nh´Nubj…)�”}”(hŒ**preservation**”h]”hŒ preservation”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjUubhŒO will hold the physical address of a structure that describes the preservation.”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MChj¦ubhý)�”}”(hŒ**NOTE**”h]”j…)�”}”(hjœh]”hŒNOTE”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MHhj¦ubhý)�”}”(hŒ^The memory allocated with vmalloc_node() variants cannot be reliably restored on the same node”h]”hŒ^The memory allocated with vmalloc_node() variants cannot be reliably restored on the same node”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MIhj¦ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjÃh]”hŒReturn”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MLhj¦ubhý)�”}”(hŒ#0 on success, error code on failure”h]”hŒ#0 on success, error code on failure”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MLhj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#kho_unpreserve_vmalloc (C function)”Œc.kho_unpreserve_vmalloc”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ>void kho_unpreserve_vmalloc (struct kho_vmalloc *preservation)”h]”j)�”}”(hŒ=void kho_unpreserve_vmalloc(struct kho_vmalloc *preservation)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M„ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj h²hh³j h´M„ubj?)�”}”(hŒkho_unpreserve_vmalloc”h]”jE)�”}”(hŒkho_unpreserve_vmalloc”h]”hŒkho_unpreserve_vmalloc”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj% ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj h²hh³j h´M„ubj^)�”}”(hŒ"(struct kho_vmalloc *preservation)”h]”jd)�”}”(hŒ struct kho_vmalloc *preservation”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjA ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjA ubh)�”}”(hhh]”jE)�”}”(hŒ kho_vmalloc”h]”hŒ kho_vmalloc”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj` ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”je Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j+ sbŒc.kho_unpreserve_vmalloc”†”asbuh1hhjA ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjA ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjA ubjE)�”}”(hŒ preservation”h]”hŒ preservation”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjA ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj= ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj h²hh³j h´M„ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj h²hh³j h´M„ubah}”(h]”jûah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j h´M„hjýh²hubjT)�”}”(hhh]”hý)�”}”(hŒ*unpreserve memory allocated with vmalloc()”h]”hŒ*unpreserve memory allocated with vmalloc()”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M„hjÅ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjýh²hh³j h´M„ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujà jvjà jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hŒú**Parameters** ``struct kho_vmalloc *preservation`` preservation metadata returned by kho_preserve_vmalloc() **Description** Instructs KHO to unpreserve the area in vmalloc address space that was previously preserved with kho_preserve_vmalloc().”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjê h]”hŒ Parameters”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mˆhjä ubj›)�”}”(hhh]”j )�”}”(hŒ^``struct kho_vmalloc *preservation`` preservation metadata returned by kho_preserve_vmalloc() ”h]”(j¦)�”}”(hŒ$``struct kho_vmalloc *preservation``”h]”j¾)�”}”(hj !h]”hŒ struct kho_vmalloc *preservation”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M…hj!ubjÀ)�”}”(hhh]”hý)�”}”(hŒ8preservation metadata returned by kho_preserve_vmalloc()”h]”hŒ8preservation metadata returned by kho_preserve_vmalloc()”…”�”}”(hj"!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j!h´M…hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j!h´M…hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjä ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjD!h]”hŒ Description”…”�”}”(hjF!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjB!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M‡hjä ubhý)�”}”(hŒxInstructs KHO to unpreserve the area in vmalloc address space that was previously preserved with kho_preserve_vmalloc().”h]”hŒxInstructs KHO to unpreserve the area in vmalloc address space that was previously preserved with kho_preserve_vmalloc().”…”�”}”(hjZ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M†hjä ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ kho_restore_vmalloc (C function)”Œc.kho_restore_vmalloc”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒCvoid * kho_restore_vmalloc (const struct kho_vmalloc *preservation)”h]”j)�”}”(hŒAvoid *kho_restore_vmalloc(const struct kho_vmalloc *preservation)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰!h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj…!h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mšubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜!h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj…!h²hh³j—!h´MšubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj¦!h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj…!h²hh³j—!h´Mšubj?)�”}”(hŒkho_restore_vmalloc”h]”jE)�”}”(hŒkho_restore_vmalloc”h]”hŒkho_restore_vmalloc”…”�”}”(hj·!h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj³!ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj…!h²hh³j—!h´Mšubj^)�”}”(hŒ((const struct kho_vmalloc *preservation)”h]”jd)�”}”(hŒ&const struct kho_vmalloc *preservation”h]”(jj)�”}”(hj¾ h]”hŒconst”…”�”}”(hjÓ!h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjÏ!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà!h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÏ!ubjj)�”}”(hjmh]”hŒstruct”…”�”}”(hjî!h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjÏ!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû!h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÏ!ubh)�”}”(hhh]”jE)�”}”(hŒ kho_vmalloc”h]”hŒ kho_vmalloc”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj "ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j"Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j¹!sbŒc.kho_restore_vmalloc”†”asbuh1hhjÏ!ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,"h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÏ!ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj:"h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjÏ!ubjE)�”}”(hŒ preservation”h]”hŒ preservation”…”�”}”(hjG"h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÏ!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjË!ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj…!h²hh³j—!h´Mšubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj�!h²hh³j—!h´Mšubah}”(h]”j|!ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j—!h´Mšhj~!h²hubjT)�”}”(hhh]”hý)�”}”(hŒSrecreates and populates an area in vmalloc address space from the preserved memory.”h]”hŒSrecreates and populates an area in vmalloc address space from the preserved memory.”…”�”}”(hjq"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mšhjn"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj~!h²hh³j—!h´Mšubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj‰"jvj‰"jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX.**Parameters** ``const struct kho_vmalloc *preservation`` preservation metadata. **Description** Recreates an area in vmalloc address space and populates it with memory that was preserved using kho_preserve_vmalloc(). **Return** pointer to the area in the vmalloc address space, NULL on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj“"h]”hŒ Parameters”…”�”}”(hj•"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‘"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mžhj�"ubj›)�”}”(hhh]”j )�”}”(hŒB``const struct kho_vmalloc *preservation`` preservation metadata. ”h]”(j¦)�”}”(hŒ*``const struct kho_vmalloc *preservation``”h]”j¾)�”}”(hj²"h]”hŒ&const struct kho_vmalloc *preservation”…”�”}”(hj´"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj°"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mœhj¬"ubjÀ)�”}”(hhh]”hý)�”}”(hŒpreservation metadata.”h]”hŒpreservation metadata.”…”�”}”(hjË"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÇ"h´MœhjÈ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj¬"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÇ"h´Mœhj©"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj�"ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjí"h]”hŒ Description”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjë"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mžhj�"ubhý)�”}”(hŒxRecreates an area in vmalloc address space and populates it with memory that was preserved using kho_preserve_vmalloc().”h]”hŒxRecreates an area in vmalloc address space and populates it with memory that was preserved using kho_preserve_vmalloc().”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M�hj�"ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj#h]”hŒReturn”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M hj�"ubhý)�”}”(hŒBpointer to the area in the vmalloc address space, NULL on failure.”h]”hŒBpointer to the area in the vmalloc address space, NULL on failure.”…”�”}”(hj*#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M¡hj�"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_alloc_preserve (C function)”Œc.kho_alloc_preserve”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ'void * kho_alloc_preserve (size_t size)”h]”j)�”}”(hŒ%void *kho_alloc_preserve(size_t size)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjY#h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjU#h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Müubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh#h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjU#h²hh³jg#h´MüubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjv#h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjU#h²hh³jg#h´Müubj?)�”}”(hŒkho_alloc_preserve”h]”jE)�”}”(hŒkho_alloc_preserve”h]”hŒkho_alloc_preserve”…”�”}”(hj‡#h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjƒ#ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjU#h²hh³jg#h´Müubj^)�”}”(hŒ (size_t size)”h]”jd)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jE)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¦#h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj£#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j¨#Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j‰#sbŒc.kho_alloc_preserve”†”asbuh1hhjŸ#ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ#h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjŸ#ubjE)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÔ#h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjŸ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj›#ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjU#h²hh³jg#h´Müubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjQ#h²hh³jg#h´Müubah}”(h]”jL#ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jg#h´MühjN#h²hubjT)�”}”(hhh]”hý)�”}”(hŒ$Allocate, zero, and preserve memory.”h]”hŒ$Allocate, zero, and preserve memory.”…”�”}”(hjþ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mühjû#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjN#h²hh³jg#h´Müubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj$jvj$jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hXè**Parameters** ``size_t size`` The number of bytes to allocate. **Description** Allocates a physically contiguous block of zeroed pages that is large enough to hold **size** bytes. The allocated memory is then registered with KHO for preservation across a kexec. **Note** The actual allocated size will be rounded up to the nearest power-of-two page boundary. **return** A virtual pointer to the allocated and preserved memory on success, or an ERR_PTR() encoded error on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj $h]”hŒ Parameters”…”�”}”(hj"$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj$ubj›)�”}”(hhh]”j )�”}”(hŒ1``size_t size`` The number of bytes to allocate. ”h]”(j¦)�”}”(hŒ``size_t size``”h]”j¾)�”}”(hj?$h]”hŒ size_t size”…”�”}”(hjA$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj=$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mýhj9$ubjÀ)�”}”(hhh]”hý)�”}”(hŒ The number of bytes to allocate.”h]”hŒ The number of bytes to allocate.”…”�”}”(hjX$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jT$h´MýhjU$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj9$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jT$h´Mýhj6$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj$ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjz$h]”hŒ Description”…”�”}”(hj|$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjx$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mÿhj$ubhý)�”}”(hŒ¶Allocates a physically contiguous block of zeroed pages that is large enough to hold **size** bytes. The allocated memory is then registered with KHO for preservation across a kexec.”h]”(hŒUAllocates a physically contiguous block of zeroed pages that is large enough to hold ”…”�”}”(hj�$h²hh³Nh´Nubj…)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj˜$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�$ubhŒY bytes. The allocated memory is then registered with KHO for preservation across a kexec.”…”�”}”(hj�$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mþhj$ubhý)�”}”(hŒ**Note**”h]”j…)�”}”(hj³$h]”hŒNote”…”�”}”(hjµ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj±$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj$ubhý)�”}”(hŒWThe actual allocated size will be rounded up to the nearest power-of-two page boundary.”h]”hŒWThe actual allocated size will be rounded up to the nearest power-of-two page boundary.”…”�”}”(hjÉ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj$ubhý)�”}”(hŒx**return** A virtual pointer to the allocated and preserved memory on success, or an ERR_PTR() encoded error on failure.”h]”(j…)�”}”(hŒ **return**”h]”hŒreturn”…”�”}”(hjÜ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjØ$ubhŒn A virtual pointer to the allocated and preserved memory on success, or an ERR_PTR() encoded error on failure.”…”�”}”(hjØ$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhj$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ kho_unpreserve_free (C function)”Œc.kho_unpreserve_free”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ$void kho_unpreserve_free (void *mem)”h]”j)�”}”(hŒ#void kho_unpreserve_free(void *mem)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj%h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M$ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$%h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj%h²hh³j#%h´M$ubj?)�”}”(hŒkho_unpreserve_free”h]”jE)�”}”(hŒkho_unpreserve_free”h]”hŒkho_unpreserve_free”…”�”}”(hj6%h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj2%ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj%h²hh³j#%h´M$ubj^)�”}”(hŒ (void *mem)”h]”jd)�”}”(hŒ void *mem”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjR%h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjN%ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`%h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjN%ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjn%h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjN%ubjE)�”}”(hŒmem”h]”hŒmem”…”�”}”(hj{%h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjN%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjJ%ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj%h²hh³j#%h´M$ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj %h²hh³j#%h´M$ubah}”(h]”j%ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j#%h´M$hj %h²hubjT)�”}”(hhh]”hý)�”}”(hŒUnpreserve and free memory.”h]”hŒUnpreserve and free memory.”…”�”}”(hj¥%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M$hj¢%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj %h²hh³j#%h´M$ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj½%jvj½%jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX!**Parameters** ``void *mem`` Pointer to the memory allocated by kho_alloc_preserve(). **Description** Unregisters the memory from KHO preservation and frees the underlying pages back to the system. This function should be called to clean up memory allocated with kho_alloc_preserve().”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjÇ%h]”hŒ Parameters”…”�”}”(hjÉ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÅ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M(hjÁ%ubj›)�”}”(hhh]”j )�”}”(hŒG``void *mem`` Pointer to the memory allocated by kho_alloc_preserve(). ”h]”(j¦)�”}”(hŒ ``void *mem``”h]”j¾)�”}”(hjæ%h]”hŒ void *mem”…”�”}”(hjè%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjä%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M%hjà%ubjÀ)�”}”(hhh]”hý)�”}”(hŒ8Pointer to the memory allocated by kho_alloc_preserve().”h]”hŒ8Pointer to the memory allocated by kho_alloc_preserve().”…”�”}”(hjÿ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jû%h´M%hjü%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjà%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jû%h´M%hjÝ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjÁ%ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj!&h]”hŒ Description”…”�”}”(hj#&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M'hjÁ%ubhý)�”}”(hŒ¶Unregisters the memory from KHO preservation and frees the underlying pages back to the system. This function should be called to clean up memory allocated with kho_alloc_preserve().”h]”hŒ¶Unregisters the memory from KHO preservation and frees the underlying pages back to the system. This function should be called to clean up memory allocated with kho_alloc_preserve().”…”�”}”(hj7&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M&hjÁ%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_restore_free (C function)”Œc.kho_restore_free”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ!void kho_restore_free (void *mem)”h]”j)�”}”(hŒ void kho_restore_free(void *mem)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjf&h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjb&h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M9ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju&h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjb&h²hh³jt&h´M9ubj?)�”}”(hŒkho_restore_free”h]”jE)�”}”(hŒkho_restore_free”h]”hŒkho_restore_free”…”�”}”(hj‡&h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjƒ&ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjb&h²hh³jt&h´M9ubj^)�”}”(hŒ (void *mem)”h]”jd)�”}”(hŒ void *mem”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj£&h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjŸ&ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±&h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjŸ&ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj¿&h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjŸ&ubjE)�”}”(hŒmem”h]”hŒmem”…”�”}”(hjÌ&h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjŸ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj›&ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjb&h²hh³jt&h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj^&h²hh³jt&h´M9ubah}”(h]”jY&ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jt&h´M9hj[&h²hubjT)�”}”(hhh]”hý)�”}”(hŒ$Restore and free memory after kexec.”h]”hŒ$Restore and free memory after kexec.”…”�”}”(hjö&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M9hjó&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj[&h²hh³jt&h´M9ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj'jvj'jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hXÏ**Parameters** ``void *mem`` Pointer to the memory (in the new kernel's address space) that was allocated by the old kernel. **Description** This function is intended to be called in the new kernel (post-kexec) to take ownership of and free a memory region that was preserved by the old kernel using kho_alloc_preserve(). It first restores the pages from KHO (using their physical address) and then frees the pages back to the new kernel's page allocator.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M=hj'ubj›)�”}”(hhh]”j )�”}”(hŒn``void *mem`` Pointer to the memory (in the new kernel's address space) that was allocated by the old kernel. ”h]”(j¦)�”}”(hŒ ``void *mem``”h]”j¾)�”}”(hj7'h]”hŒ void *mem”…”�”}”(hj9'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj5'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M;hj1'ubjÀ)�”}”(hhh]”hý)�”}”(hŒ_Pointer to the memory (in the new kernel's address space) that was allocated by the old kernel.”h]”hŒaPointer to the memory (in the new kernel’s address space) that was allocated by the old kernel.”…”�”}”(hjP'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M:hjM'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj1'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jL'h´M;hj.'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj'ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjs'h]”hŒ Description”…”�”}”(hju'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjq'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M=hj'ubhý)�”}”(hŒ´This function is intended to be called in the new kernel (post-kexec) to take ownership of and free a memory region that was preserved by the old kernel using kho_alloc_preserve().”h]”hŒ´This function is intended to be called in the new kernel (post-kexec) to take ownership of and free a memory region that was preserved by the old kernel using kho_alloc_preserve().”…”�”}”(hj‰'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M<hj'ubhý)�”}”(hŒ…It first restores the pages from KHO (using their physical address) and then frees the pages back to the new kernel's page allocator.”h]”hŒ‡It first restores the pages from KHO (using their physical address) and then frees the pages back to the new kernel’s page allocator.”…”�”}”(hj˜'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M@hj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒis_kho_boot (C function)”Œ c.is_kho_boot”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒbool is_kho_boot (void)”h]”j)�”}”(hŒbool is_kho_boot(void)”h]”(j)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjÇ'h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÃ'h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MRubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ'h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÃ'h²hh³jÕ'h´MRubj?)�”}”(hŒ is_kho_boot”h]”jE)�”}”(hŒ is_kho_boot”h]”hŒ is_kho_boot”…”�”}”(hjè'h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjä'ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÃ'h²hh³jÕ'h´MRubj^)�”}”(hŒ(void)”h]”jd)�”}”(hŒvoid”h]”j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj(ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjü'ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÃ'•h²hh³jÕ'h´MRubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj¿'h²hh³jÕ'h´MRubah}”(h]”jº'ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jÕ'h´MRhj¼'h²hubjT)�”}”(hhh]”hý)�”}”(hŒ8check if current kernel was booted via KHO-enabled kexec”h]”hŒ8check if current kernel was booted via KHO-enabled kexec”…”�”}”(hj.(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MRhj+(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj¼'h²hh³jÕ'h´MRubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujF(jvjF(jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hX¹**Parameters** ``void`` no arguments **Description** This function checks if the current kernel was loaded through a kexec operation with KHO enabled, by verifying that a valid KHO FDT was passed. **Note** This function returns reliable results only after kho_populate() has been called during early boot. Before that, it may return false even if KHO data is present. **Return** true if booted via KHO-enabled kexec, false otherwise”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjP(h]”hŒ Parameters”…”�”}”(hjR(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjN(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MVhjJ(ubj›)�”}”(hhh]”j )�”}”(hŒ``void`` no arguments ”h]”(j¦)�”}”(hŒ``void``”h]”j¾)�”}”(hjo(h]”hŒvoid”…”�”}”(hjq(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjm(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Khji(ubjÀ)�”}”(hhh]”hý)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjˆ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j„(h´Khj…(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hji(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j„(h´Khjf(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjJ(ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjª(h]”hŒ Description”…”�”}”(hj¬(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¨(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´KhjJ(ubhý)�”}”(hŒ�This function checks if the current kernel was loaded through a kexec operation with KHO enabled, by verifying that a valid KHO FDT was passed.”h]”hŒ�This function checks if the current kernel was loaded through a kexec operation with KHO enabled, by verifying that a valid KHO FDT was passed.”…”�”}”(hjÀ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MShjJ(ubhý)�”}”(hŒ**Note**”h]”j…)�”}”(hjÑ(h]”hŒNote”…”�”}”(hjÓ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÏ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MWhjJ(ubhý)�”}”(hŒ¡This function returns reliable results only after kho_populate() has been called during early boot. Before that, it may return false even if KHO data is present.”h]”hŒ¡This function returns reliable results only after kho_populate() has been called during early boot. Before that, it may return false even if KHO data is present.”…”�”}”(hjç(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MYhjJ(ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjø(h]”hŒReturn”…”�”}”(hjú(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjö(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M]hjJ(ubhý)�”}”(hŒ5true if booted via KHO-enabled kexec, false otherwise”h]”hŒ5true if booted via KHO-enabled kexec, false otherwise”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´M]hjJ(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhjèh²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!kho_retrieve_subtree (C function)”Œc.kho_retrieve_subtree”hNt”auh1jùhjèh²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒLint kho_retrieve_subtree (const char *name, phys_addr_t *phys, size_t *size)”h]”j)�”}”(hŒKint kho_retrieve_subtree(const char *name, phys_addr_t *phys, size_t *size)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj=)h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj9)h²hh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mfubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL)h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj9)h²hh³jK)h´Mfubj?)�”}”(hŒkho_retrieve_subtree”h]”jE)�”}”(hŒkho_retrieve_subtree”h]”hŒkho_retrieve_subtree”…”�”}”(hj^)h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjZ)ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj9)h²hh³jK)h´Mfubj^)�”}”(hŒ3(const char *name, phys_addr_t *phys, size_t *size)”h]”(jd)�”}”(hŒconst char *name”h]”(jj)�”}”(hj¾ h]”hŒconst”…”�”}”(hjz)h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjv)ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡)h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjv)ubj)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjv)ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£)h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjv)ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj±)h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjv)ubjE)�”}”(hŒname”h]”hŒname”…”�”}”(hj¾)h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjv)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjr)ubjd)�”}”(hŒphys_addr_t *phys”h]”(h)�”}”(hhh]”jE)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjÚ)h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj×)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jÜ)Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j`)sbŒc.kho_retrieve_subtree”†”asbuh1hhjÓ)ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú)h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÓ)ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjÓ)ubjE)�”}”(hŒphys”h]”hŒphys”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÓ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjr)ubjd)�”}”(hŒ size_t *size”h]”(h)�”}”(hhh]”jE)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj1*h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj.*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j3*Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”jö)Œc.kho_retrieve_subtree”†”asbuh1hhj**ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj**ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj]*h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj**ubjE)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjj*h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj**ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjr)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj9)h²hh³jK)h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj5)h²hh³jK)h´Mfubah}”(h]”j0)ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jK)h´Mfhj2)h²hubjT)�”}”(hhh]”hý)�”}”(hŒ*retrieve a preserved sub blob by its name.”h]”hŒ*retrieve a preserved sub blob by its name.”…”�”}”(hj”*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mfhj‘*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj2)h²hh³jK)h´Mfubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj¬*jvj¬*jw‰jx‰jy‰uh1j h²hhjèh³Nh´Nubj{)�”}”(hXÖ**Parameters** ``const char *name`` the name of the sub blob passed to kho_add_subtree(). ``phys_addr_t *phys`` if found, the physical address of the sub blob is stored in **phys**. ``size_t *size`` if not NULL and found, the size of the sub blob is stored in **size**. **Description** Retrieve a preserved sub blob named **name** and store its physical address in **phys** and optionally its size in **size**. **Return** 0 on success, error code on failure”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj¶*h]”hŒ Parameters”…”�”}”(hj¸*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mjhj°*ubj›)�”}”(hhh]”(j )�”}”(hŒK``const char *name`` the name of the sub blob passed to kho_add_subtree(). ”h]”(j¦)�”}”(hŒ``const char *name``”h]”j¾)�”}”(hjÕ*h]”hŒconst char *name”…”�”}”(hj×*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÓ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´MghjÏ*ubjÀ)�”}”(hhh]”hý)�”}”(hŒ5the name of the sub blob passed to kho_add_subtree().”h]”hŒ5the name of the sub blob passed to kho_add_subtree().”…”�”}”(hjî*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jê*h´Mghjë*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÏ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jê*h´MghjÌ*ubj )�”}”(hŒ\``phys_addr_t *phys`` if found, the physical address of the sub blob is stored in **phys**. ”h]”(j¦)�”}”(hŒ``phys_addr_t *phys``”h]”j¾)�”}”(hj+h]”hŒphys_addr_t *phys”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj +ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œe/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:83: ./kernel/liveupdate/kexec_handover.c”h´Mhhj+ubjÀ)�”}”(hhh]”hý)�”}”(hŒEif found, the physical address of the sub blob is stored in **phys**.”h]”(hŒhj{,h²hh³jŒ,h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjw,h²hh³jŒ,h´Kubah}”(h]”jr,ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jŒ,h´Khjt,h²hubjT)�”}”(hhh]”hý)�”}”(hŒ1Internal representation of a serialization block.”h]”hŒ1Internal representation of a serialization block.”…”�”}”(hjÁ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj¾,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjt,h²hh³jŒ,h´Kubeh}”(h]”h ]”(j Œstruct”eh"]”h$]”h&]”jtj jujÙ,jvjÙ,jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒò**Definition**:: struct kho_block { struct list_head list; struct kho_block_header_ser *ser; }; **Members** ``list`` List head for linking blocks in memory. ``ser`` Pointer to the serialized header in preserved memory.”h]”(hý)�”}”(hŒ**Definition**::”h]”(j…)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjå,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjá,ubhŒ:”…”�”}”(hjá,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KhjÝ,ubhŒ literal_block”“”)�”}”(hŒVstruct kho_block { struct list_head list; struct kho_block_header_ser *ser; };”h]”hŒVstruct kho_block { struct list_head list; struct kho_block_header_ser *ser; };”…”�”}”hj-sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jþ,h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KhjÝ,ubhý)�”}”(hŒ **Members**”h]”j…)�”}”(hj-h]”hŒMembers”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KhjÝ,ubj›)�”}”(hhh]”(j )�”}”(hŒ1``list`` List head for linking blocks in memory. ”h]”(j¦)�”}”(hŒ``list``”h]”j¾)�”}”(hj0-h]”hŒlist”…”�”}”(hj2-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj.-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj*-ubjÀ)�”}”(hhh]”hý)�”}”(hŒ'List head for linking blocks in memory.”h]”hŒ'List head for linking blocks in memory.”…”�”}”(hjI-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jE-h´KhjF-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj*-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jE-h´Khj'-ubj )�”}”(hŒ=``ser`` Pointer to the serialized header in preserved memory.”h]”(j¦)�”}”(hŒ``ser``”h]”j¾)�”}”(hji-h]”hŒser”…”�”}”(hjk-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjg-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khjc-ubjÀ)�”}”(hhh]”hý)�”}”(hŒ5Pointer to the serialized header in preserved memory.”h]”hŒ5Pointer to the serialized header in preserved memory.”…”�”}”(hj‚-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjc-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j~-h´Khj'-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjÝ,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_block_set (C struct)”Œc.kho_block_set”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ kho_block_set”h]”j)�”}”(hŒstruct kho_block_set”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjÃ-h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj¿-h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Kubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ-h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj¿-h²hh³jÐ-h´Kubj?)�”}”(hŒ kho_block_set”h]”jE)�”}”(hj½-h]”hŒ kho_block_set”…”�”}”(hjã-h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjß-ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj¿-h²hh³jÐ-h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj»-h²hh³jÐ-h´Kubah}”(h]”j¶-ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jÐ-h´Khj¸-h²hubjT)�”}”(hhh]”hý)�”}”(hŒ?A set of blocks containing serialized entries of the same type.”h]”hŒ?A set of blocks containing serialized entries of the same type.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj¸-h²hh³jÐ-h´Kubeh}”(h]”h ]”(j Œstruct”eh"]”h$]”h&]”jtj juj.jvj.jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hXV**Definition**:: struct kho_block_set { struct list_head blocks; long nblocks; u64 head_pa; size_t entry_size; u64 count_per_block; bool incoming; }; **Members** ``blocks`` The list of serialization blocks (struct kho_block). ``nblocks`` The number of allocated serialization blocks. ``head_pa`` Physical address of the first block header. ``entry_size`` The size of each entry in the blocks. ``count_per_block`` The maximum number of entries each block can hold. ``incoming`` True if this block set was restored from the previous kernel.”h]”(hý)�”}”(hŒ**Definition**::”h]”(j…)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj).h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj%.ubhŒ:”…”�”}”(hj%.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj!.ubjÿ,)�”}”(hŒœstruct kho_block_set { struct list_head blocks; long nblocks; u64 head_pa; size_t entry_size; u64 count_per_block; bool incoming; };”h]”hŒœstruct kho_block_set { struct list_head blocks; long nblocks; u64 head_pa; size_t entry_size; u64 count_per_block; bool incoming; };”…”�”}”hjB.sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jþ,h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj!.ubhý)�”}”(hŒ **Members**”h]”j…)�”}”(hjS.h]”hŒMembers”…”�”}”(hjU.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjQ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K(hj!.ubj›)�”}”(hhh]”(j )�”}”(hŒ@``blocks`` The list of serialization blocks (struct kho_block). ”h]”(j¦)�”}”(hŒ ``blocks``”h]”j¾)�”}”(hjr.h]”hŒblocks”…”�”}”(hjt.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjp.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khjl.ubjÀ)�”}”(hhh]”hý)�”}”(hŒ4The list of serialization blocks (struct kho_block).”h]”hŒ4The list of serialization blocks (struct kho_block).”…”�”}”(hj‹.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j‡.h´Khjˆ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjl.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j‡.h´Khji.ubj )�”}”(hŒ:``nblocks`` The number of allocated serialization blocks. ”h]”(j¦)�”}”(hŒ ``nblocks``”h]”j¾)�”}”(hj«.h]”hŒnblocks”…”�”}”(hj­.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj©.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj¥.ubjÀ)�”}”(hhh]”hý)�”}”(hŒ-The number of allocated serialization blocks.”h]”hŒ-The number of allocated serialization blocks.”…”�”}”(hjÄ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÀ.h´KhjÁ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj¥.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÀ.h´Khji.ubj )�”}”(hŒ8``head_pa`` Physical address of the first block header. ”h]”(j¦)�”}”(hŒ ``head_pa``”h]”j¾)�”}”(hjä.h]”hŒhead_pa”…”�”}”(hjæ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjâ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KhjÞ.ubjÀ)�”}”(hhh]”hý)�”}”(hŒ+Physical address of the first block header.”h]”hŒ+Physical address of the first block header.”…”�”}”(hjý.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jù.h´Khjú.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÞ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jù.h´Khji.ubj )�”}”(hŒ5``entry_size`` The size of each entry in the blocks. ”h]”(j¦)�”}”(hŒ``entry_size``”h]”j¾)�”}”(hj/h]”hŒ entry_size”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj/ubjÀ)�”}”(hhh]”hý)�”}”(hŒ%The size of each entry in the blocks.”h]”hŒ%The size of each entry in the blocks.”…”�”}”(hj6/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j2/h´Khj3/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j2/h´Khji.ubj )�”}”(hŒG``count_per_block`` The maximum number of entries each block can hold. ”h]”(j¦)�”}”(hŒ``count_per_block``”h]”j¾)�”}”(hjV/h]”hŒcount_per_block”…”�”}”(hjX/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjT/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KhjP/ubjÀ)�”}”(hhh]”hý)�”}”(hŒ2The maximum number of entries each block can hold.”h]”hŒ2The maximum number of entries each block can hold.”…”�”}”(hjo/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jk/h´Khjl/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjP/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jk/h´Khji.ubj )�”}”(hŒJ``incoming`` True if this block set was restored from the previous kernel.”h]”(j¦)�”}”(hŒ ``incoming``”h]”j¾)�”}”(hj�/h]”hŒincoming”…”�”}”(hj‘/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj�/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj‰/ubjÀ)�”}”(hhh]”hý)�”}”(hŒ=True if this block set was restored from the previous kernel.”h]”hŒ=True if this block set was restored from the previous kernel.”…”�”}”(hj¨/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K hj¥/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj‰/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j¤/h´Khji.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj!.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubhý)�”}”(hŒ**Note**”h]”j…)�”}”(hjÒ/h]”hŒNote”…”�”}”(hjÔ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÐ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K#hj7,h²hubhý)�”}”(hŒ€Synchronization and locking are the responsibility of the caller. The block set structure itself is not internally synchronized.”h]”hŒ€Synchronization and locking are the responsibility of the caller. The block set structure itself is not internally synchronized.”…”�”}”(hjè/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K!hj7,h²hubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_block_set_it (C struct)”Œc.kho_block_set_it”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒkho_block_set_it”h]”j)�”}”(hŒstruct kho_block_set_it”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj 0h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K'ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj 0h²hh³j0h´K'ubj?)�”}”(hŒkho_block_set_it”h]”jE)�”}”(hj 0h]”hŒkho_block_set_it”…”�”}”(hj00h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj,0ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj 0h²hh³j0h´K'ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj0h²hh³j0h´K'ubah}”(h]”j0ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j0h´K'hj0h²hubjT)�”}”(hhh]”hý)�”}”(hŒ-Iterator for serializing entries into blocks.”h]”hŒ-Iterator for serializing entries into blocks.”…”�”}”(hjR0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K.hjO0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj0h²hh³j0h´K'ubeh}”(h]”h ]”(j Œstruct”eh"]”h$]”h&]”jtj jujj0jvjj0jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hX**Definition**:: struct kho_block_set_it { struct kho_block_set *bs; struct kho_block *block; u64 i; }; **Members** ``bs`` The block set being iterated. ``block`` The current block. ``i`` The current entry index within **block**.”h]”(hý)�”}”(hŒ**Definition**::”h]”(j…)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjv0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjr0ubhŒ:”…”�”}”(hjr0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K2hjn0ubjÿ,)�”}”(hŒbstruct kho_block_set_it { struct kho_block_set *bs; struct kho_block *block; u64 i; };”h]”hŒbstruct kho_block_set_it { struct kho_block_set *bs; struct kho_block *block; u64 i; };”…”�”}”hj�0sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jþ,h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K4hjn0ubhý)�”}”(hŒ **Members**”h]”j…)�”}”(hj 0h]”hŒMembers”…”�”}”(hj¢0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjž0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K:hjn0ubj›)�”}”(hhh]”(j )�”}”(hŒ%``bs`` The block set being iterated. ”h]”(j¦)�”}”(hŒ``bs``”h]”j¾)�”}”(hj¿0h]”hŒbs”…”�”}”(hjÁ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj½0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K0hj¹0ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set being iterated.”h]”hŒThe block set being iterated.”…”�”}”(hjØ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÔ0h´K0hjÕ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj¹0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÔ0h´K0hj¶0ubj )�”}”(hŒ``block`` The current block. ”h]”(j¦)�”}”(hŒ ``block``”h]”j¾)�”}”(hjø0h]”hŒblock”…”�”}”(hjú0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjö0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K1hjò0ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe current block.”h]”hŒThe current block.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j 1h´K1hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjò0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j 1h´K1hj¶0ubj )�”}”(hŒ/``i`` The current entry index within **block**.”h]”(j¦)�”}”(hŒ``i``”h]”j¾)�”}”(hj11h]”hŒi”…”�”}”(hj31h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj/1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K1hj+1ubjÀ)�”}”(hhh]”hý)�”}”(hŒ)The current entry index within **block**.”h]”(hŒThe current entry index within ”…”�”}”(hjJ1h²hh³Nh´Nubj…)�”}”(hŒ **block**”h]”hŒblock”…”�”}”(hjR1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjJ1ubhŒ.”…”�”}”(hjJ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K2hjG1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj+1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jF1h´K1hj¶0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjn0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒKHO_BLOCK_SET_INIT (C macro)”Œc.KHO_BLOCK_SET_INIT”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒKHO_BLOCK_SET_INIT”h]”j)�”}”(hŒKHO_BLOCK_SET_INIT”h]”j?)�”}”(hŒKHO_BLOCK_SET_INIT”h]”jE)�”}”(hj—1h]”hŒKHO_BLOCK_SET_INIT”…”�”}”(hj¡1h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj�1ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj™1h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K:ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj•1h²hh³j´1h´K:ubah}”(h]”j�1ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j´1h´K:hj’1h²hubjT)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jShj’1h²hh³j´1h´K:ubeh}”(h]”h ]”(j Œmacro”eh"]”h$]”h&]”jtj jujÍ1jvjÍ1jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubhý)�”}”(hŒ+``KHO_BLOCK_SET_INIT (_name, _entry_size)``”h]”j¾)�”}”(hjÓ1h]”hŒ'KHO_BLOCK_SET_INIT (_name, _entry_size)”…”�”}”(hjÕ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÑ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj2ubj›)�”}”(hhh]”(j )�”}”(hŒ.``_name`` Name of the kho_block_set variable. ”h]”(j¦)�”}”(hŒ ``_name``”h]”j¾)�”}”(hj)2h]”hŒ_name”…”�”}”(hj+2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj'2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K;hj#2ubjÀ)�”}”(hhh]”hý)�”}”(hŒ#Name of the kho_block_set variable.”h]”hŒ#Name of the kho_block_set variable.”…”�”}”(hjB2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j>2h´K;hj?2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj#2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j>2h´K;hj 2ubj )�”}”(hŒ8``_entry_size`` The size of each entry in the block set.”h]”(j¦)�”}”(hŒ``_entry_size``”h]”j¾)�”}”(hjb2h]”hŒ _entry_size”…”�”}”(hjd2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj`2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K=hj\2ubjÀ)�”}”(hhh]”hý)�”}”(hŒ(The size of each entry in the block set.”h]”hŒ(The size of each entry in the block set.”…”�”}”(hj{2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´Khj¸2h²hh³jà2h´KPubj^)�”}”(hŒ(struct kho_block_set *bs)”h]”jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj 3ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj 3ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj,3h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj)3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j.3Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”jÛ2Œc.kho_block_set_head_pa”†”asbuh1hhj 3ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ3h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj 3ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjX3h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj 3ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hje3h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj 3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj3ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj¸2h²hh³jà2h´KPubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj´2h²hh³jà2h´KPubah}”(h]”j¯2ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jà2h´KPhj±2h²hubjT)�”}”(hhh]”hý)�”}”(hŒ3Get the physical address of the first block header.”h]”hŒ3Get the physical address of the first block header.”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KPhjŒ3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj±2h²hh³jà2h´KPubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj§3jvj§3jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒ‰**Parameters** ``struct kho_block_set *bs`` The block set. **Return** The physical address of the first block header, or 0 if empty.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj±3h]”hŒ Parameters”…”�”}”(hj³3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¯3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KThj«3ubj›)�”}”(hhh]”j )�”}”(hŒ,``struct kho_block_set *bs`` The block set. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjÐ3h]”hŒstruct kho_block_set *bs”…”�”}”(hjÒ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÎ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KQhjÊ3ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set.”h]”hŒThe block set.”…”�”}”(hjé3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jå3h´KQhjæ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÊ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jå3h´KQhjÇ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj«3ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj 4h]”hŒReturn”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj 4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KShj«3ubhý)�”}”(hŒ>The physical address of the first block header, or 0 if empty.”h]”hŒ>The physical address of the first block header, or 0 if empty.”…”�”}”(hj!4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´KShj«3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#kho_block_set_is_empty (C function)”Œc.kho_block_set_is_empty”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ6bool kho_block_set_is_empty (struct kho_block_set *bs)”h]”j)�”}”(hŒ5bool kho_block_set_is_empty(struct kho_block_set *bs)”h]”(j)�”}”(hjÉ'h]”hŒbool”…”�”}”(hjP4h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjL4h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K[ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^4h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjL4h²hh³j]4h´K[ubj?)�”}”(hŒkho_block_set_is_empty”h]”jE)�”}”(hŒkho_block_set_is_empty”h]”hŒkho_block_set_is_empty”…”�”}”(hjp4h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjl4ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjL4h²hh³j]4h´K[ubj^)�”}”(hŒ(struct kho_block_set *bs)”h]”jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjŒ4h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjˆ4ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™4h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjˆ4ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hjª4h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj§4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j¬4Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jr4sbŒc.kho_block_set_is_empty”†”asbuh1hhjˆ4ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ4h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjˆ4ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjØ4h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjˆ4ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjå4h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjˆ4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj„4ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjL4h²hh³j]4h´K[ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjH4h²hh³j]4h´K[ubah}”(h]”jC4ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j]4h´K[hjE4h²hubjT)�”}”(hhh]”hý)�”}”(hŒ/Check if the block set has no allocated blocks.”h]”hŒ/Check if the block set has no allocated blocks.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K[hj 5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjE4h²hh³j]4h´K[ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj'5jvj'5jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒƒ**Parameters** ``struct kho_block_set *bs`` The block set. **Return** True if there are no blocks in the set, false otherwise.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj15h]”hŒ Parameters”…”�”}”(hj35h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj/5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K_hj+5ubj›)�”}”(hhh]”j )�”}”(hŒ,``struct kho_block_set *bs`` The block set. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjP5h]”hŒstruct kho_block_set *bs”…”�”}”(hjR5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjN5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K\hjJ5ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set.”h]”hŒThe block set.”…”�”}”(hji5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³je5h´K\hjf5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjJ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³je5h´K\hjG5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj+5ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj‹5h]”hŒReturn”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‰5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K^hj+5ubhý)�”}”(hŒ8True if there are no blocks in the set, false otherwise.”h]”hŒ8True if there are no blocks in the set, false otherwise.”…”�”}”(hj¡5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:92: ./include/linux/kho_block.h”h´K^hj+5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_block_set_init (C function)”Œc.kho_block_set_init”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒEvoid kho_block_set_init (struct kho_block_set *bs, size_t entry_size)”h]”j)�”}”(hŒDvoid kho_block_set_init(struct kho_block_set *bs, size_t entry_size)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÐ5h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÌ5h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K)ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß5h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÌ5h²hh³jÞ5h´K)ubj?)�”}”(hŒkho_block_set_init”h]”jE)�”}”(hŒkho_block_set_init”h]”hŒkho_block_set_init”…”�”}”(hjñ5h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjí5ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÌ5h²hh³jÞ5h´K)ubj^)�”}”(hŒ-(struct kho_block_set *bs, size_t entry_size)”h]”(jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj 6ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj 6ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj+6h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj(6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j-6Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jó5sbŒc.kho_block_set_init”†”asbuh1hhj 6ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK6h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj 6ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjY6h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj 6ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjf6h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj 6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj6ubjd)�”}”(hŒsize_t entry_size”h]”(h)�”}”(hhh]”jE)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj‚6h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j„6Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”jG6Œc.kho_block_set_init”†”asbuh1hhj{6ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj{6ubjE)�”}”(hŒ entry_size”h]”hŒ entry_size”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj{6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj6ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÌ5h²hh³jÞ5h´K)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjÈ5h²hh³jÞ5h´K)ubah}”(h]”jÃ5ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jÞ5h´K)hjÅ5h²hubjT)�”}”(hhh]”hý)�”}”(hŒInitialize a block set.”h]”hŒInitialize a block set.”…”�”}”(hjØ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K)hjÕ6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjÅ5h²hh³jÞ5h´K)ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujð6jvjð6jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒŠ**Parameters** ``struct kho_block_set *bs`` The block set to initialize. ``size_t entry_size`` The size of each entry in the blocks.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjú6h]”hŒ Parameters”…”�”}”(hjü6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjø6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K-hjô6ubj›)�”}”(hhh]”(j )�”}”(hŒ:``struct kho_block_set *bs`` The block set to initialize. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hj7h]”hŒstruct kho_block_set *bs”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K*hj7ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set to initialize.”h]”hŒThe block set to initialize.”…”�”}”(hj27h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j.7h´K*hj/7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j.7h´K*hj7ubj )�”}”(hŒ;``size_t entry_size`` The size of each entry in the blocks.”h]”(j¦)�”}”(hŒ``size_t entry_size``”h]”j¾)�”}”(hjR7h]”hŒsize_t entry_size”…”�”}”(hjT7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjP7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K,hjL7ubjÀ)�”}”(hhh]”hý)�”}”(hŒ%The size of each entry in the blocks.”h]”hŒ%The size of each entry in the blocks.”…”�”}”(hjk7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K+hjh7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjL7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jg7h´K,hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjô6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒkho_block_set_grow (C function)”Œc.kho_block_set_grow”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒhj¨7h²hh³jº7h´K�ubj^)�”}”(hŒ%(struct kho_block_set *bs, u64 count)”h]”(jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjé7h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjå7ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö7h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjå7ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j 8Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jÏ7sbŒc.kho_block_set_grow”†”asbuh1hhjå7ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'8h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjå7ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj58h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjå7ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjB8h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjå7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjá7ubjd)�”}”(hŒ u64 count”h]”(h)�”}”(hhh]”jE)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj^8h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj[8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j`8Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j#8Œc.kho_block_set_grow”†”asbuh1hhjW8ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|8h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjW8ubjE)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjŠ8h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjW8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjá7ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj¨7h²hh³jº7h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj¤7h²hh³jº7h´K�ubah}”(h]”jŸ7ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jº7h´K�hj¡7h²hubjT)�”}”(hhh]”hý)�”}”(hŒ5Expand the block set to accommodate the target count.”h]”hŒ5Expand the block set to accommodate the target count.”…”�”}”(hj´8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K�hj±8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj¡7h²hh³jº7h´K�ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujÌ8jvjÌ8jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hXÔ**Parameters** ``struct kho_block_set *bs`` The block set. ``u64 count`` The target number of valid entries to accommodate. **Description** Dynamically preallocates and links preserved memory blocks if the target entry count exceeds the current total capacity of the set, ensuring they are available during serialization/deserialization. **Context** Caller must hold a lock protecting the block set. **Return** 0 on success, or a negative errno on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjÖ8h]”hŒ Parameters”…”�”}”(hjØ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÔ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K“hjÐ8ubj›)�”}”(hhh]”(j )�”}”(hŒ,``struct kho_block_set *bs`` The block set. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjõ8h]”hŒstruct kho_block_set *bs”…”�”}”(hj÷8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjó8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K�hjï8ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set.”h]”hŒThe block set.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j 9h´K�hj 9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjï8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j 9h´K�hjì8ubj )�”}”(hŒA``u64 count`` The target number of valid entries to accommodate. ”h]”(j¦)�”}”(hŒ ``u64 count``”h]”j¾)�”}”(hj.9h]”hŒ u64 count”…”�”}”(hj09h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj,9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K‘hj(9ubjÀ)�”}”(hhh]”hý)�”}”(hŒ2The target number of valid entries to accommodate.”h]”hŒ2The target number of valid entries to accommodate.”…”�”}”(hjG9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jC9h´K‘hjD9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj(9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jC9h´K‘hjì8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjÐ8ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hji9h]”hŒ Description”…”�”}”(hjk9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjg9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K“hjÐ8ubhý)�”}”(hŒÅDynamically preallocates and links preserved memory blocks if the target entry count exceeds the current total capacity of the set, ensuring they are available during serialization/deserialization.”h]”hŒÅDynamically preallocates and links preserved memory blocks if the target entry count exceeds the current total capacity of the set, ensuring they are available during serialization/deserialization.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K’hjÐ8ubhý)�”}”(hŒ **Context**”h]”j…)�”}”(hj�9h]”hŒContext”…”�”}”(hj’9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K–hjÐ8ubhý)�”}”(hŒ1Caller must hold a lock protecting the block set.”h]”hŒ1Caller must hold a lock protecting the block set.”…”�”}”(hj¦9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K—hjÐ8ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj·9h]”hŒReturn”…”�”}”(hj¹9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjµ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K™hjÐ8ubhý)�”}”(hŒ-0 on success, or a negative errno on failure.”h]”hŒ-0 on success, or a negative errno on failure.”…”�”}”(hjÍ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K˜hjÐ8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!kho_block_set_shrink (C function)”Œc.kho_block_set_shrink”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ?void kho_block_set_shrink (struct kho_block_set *bs, u64 count)”h]”j)�”}”(hŒ>void kho_block_set_shrink(struct kho_block_set *bs, u64 count)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjü9h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjø9h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K±ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjø9h²hh³j :h´K±ubj?)�”}”(hŒkho_block_set_shrink”h]”jE)�”}”(hŒkho_block_set_shrink”h]”hŒkho_block_set_shrink”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj:ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjø9h²hh³j :h´K±ubj^)�”}”(hŒ%(struct kho_block_set *bs, u64 count)”h]”(jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj9:h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj5:ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF:h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj5:ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hjW:h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjT:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jY:Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j:sbŒc.kho_block_set_shrink”†”asbuh1hhj5:ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw:h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj5:ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj…:h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj5:ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hj’:h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj5:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj1:ubjd)�”}”(hŒ u64 count”h]”(h)�”}”(hhh]”jE)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj®:h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj«:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j°:Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”js:Œc.kho_block_set_shrink”†”asbuh1hhj§:ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ:h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj§:ubjE)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÚ:h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj§:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj1:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjø9h²hh³j :h´K±ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjô9h²hh³j :h´K±ubah}”(h]”jï9ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j :h´K±hjñ9h²hubjT)�”}”(hhh]”hý)�”}”(hŒ5Shrink the block set to accommodate the target count.”h]”hŒ5Shrink the block set to accommodate the target count.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K±hj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjñ9h²hh³j :h´K±ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj;jvj;jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hX�**Parameters** ``struct kho_block_set *bs`` The block set. ``u64 count`` The target number of valid entries to accommodate. **Description** Releases and unallocates redundant preserved memory blocks. Checks if the last block in the set can be removed because the remaining entry count is fully accommodated by the preceding blocks. **Note** It is the caller's responsibility to ensure that entries are removed in the reverse order of their insertion. Because shrinking destroys the last block in the set, removing entries in any other order would corrupt active data. **Context** Caller must hold a lock protecting the block set.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj&;h]”hŒ Parameters”…”�”}”(hj(;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj$;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kµhj ;ubj›)�”}”(hhh]”(j )�”}”(hŒ,``struct kho_block_set *bs`` The block set. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjE;h]”hŒstruct kho_block_set *bs”…”�”}”(hjG;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjC;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K²hj?;ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set.”h]”hŒThe block set.”…”�”}”(hj^;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jZ;h´K²hj[;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj?;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jZ;h´K²hj<;ubj )�”}”(hŒA``u64 count`` The target number of valid entries to accommodate. ”h]”(j¦)�”}”(hŒ ``u64 count``”h]”j¾)�”}”(hj~;h]”hŒ u64 count”…”�”}”(hj€;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj|;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K³hjx;ubjÀ)�”}”(hhh]”hý)�”}”(hŒ2The target number of valid entries to accommodate.”h]”hŒ2The target number of valid entries to accommodate.”…”�”}”(hj—;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j“;h´K³hj”;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjx;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j“;h´K³hj<;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj ;ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj¹;h]”hŒ Description”…”�”}”(hj»;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj·;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kµhj ;ubhý)�”}”(hŒ¿Releases and unallocates redundant preserved memory blocks. Checks if the last block in the set can be removed because the remaining entry count is fully accommodated by the preceding blocks.”h]”hŒ¿Releases and unallocates redundant preserved memory blocks. Checks if the last block in the set can be removed because the remaining entry count is fully accommodated by the preceding blocks.”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K´hj ;ubhý)�”}”(hŒ**Note**”h]”j…)�”}”(hjà;h]”hŒNote”…”�”}”(hjâ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÞ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K¸hj ;ubhý)�”}”(hŒâIt is the caller's responsibility to ensure that entries are removed in the reverse order of their insertion. Because shrinking destroys the last block in the set, removing entries in any other order would corrupt active data.”h]”hŒäIt is the caller’s responsibility to ensure that entries are removed in the reverse order of their insertion. Because shrinking destroys the last block in the set, removing entries in any other order would corrupt active data.”…”�”}”(hjö;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K¹hj ;ubhý)�”}”(hŒ **Context**”h]”j…)�”}”(hj<h]”hŒContext”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K¾hj ;ubhý)�”}”(hŒ1Caller must hold a lock protecting the block set.”h]”hŒ1Caller must hold a lock protecting the block set.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K¾hj ;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"kho_block_set_restore (C function)”Œc.kho_block_set_restore”hNt”auh1jùhj7,h²hh³Nh´Nubj •\¢)�”}”(hhh]”(j)�”}”(hŒAint kho_block_set_restore (struct kho_block_set *bs, u64 head_pa)”h]”j)�”}”(hŒ@int kho_block_set_restore(struct kho_block_set *bs, u64 head_pa)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjL<h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjH<h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kïubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[<h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjH<h²hh³jZ<h´Kïubj?)�”}”(hŒkho_block_set_restore”h]”jE)�”}”(hŒkho_block_set_restore”h]”hŒkho_block_set_restore”…”�”}”(hjm<h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhji<ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjH<h²hh³jZ<h´Kïubj^)�”}”(hŒ'(struct kho_block_set *bs, u64 head_pa)”h]”(jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj‰<h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj…<ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–<h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj…<ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj§<h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¤<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j©<Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jo<sbŒc.kho_block_set_restore”†”asbuh1hhj…<ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ<h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj…<ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjÕ<h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj…<ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjâ<h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj…<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj�<ubjd)�”}”(hŒ u64 head_pa”h]”(h)�”}”(hhh]”jE)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjþ<h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjû<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j=Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”jÃ<Œc.kho_block_set_restore”†”asbuh1hhj÷<ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj÷<ubjE)�”}”(hŒhead_pa”h]”hŒhead_pa”…”�”}”(hj*=h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj÷<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj�<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjH<h²hh³jZ<h´Kïubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjD<h²hh³jZ<h´Kïubah}”(h]”j?<ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jZ<h´KïhjA<h²hubjT)�”}”(hhh]”hý)�”}”(hŒ,Restore a block set from a physical address.”h]”hŒ,Restore a block set from a physical address.”…”�”}”(hjT=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´KïhjQ=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjA<h²hh³jZ<h´Kïubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujl=jvjl=jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hX—**Parameters** ``struct kho_block_set *bs`` The block set to restore. ``u64 head_pa`` Physical address of the first block header. **Description** Restores a serialized block set from a given physical address. The caller is responsible for ensuring that the block set **bs** has been allocated and initialized prior to calling this function. **Return** 0 on success, or a negative errno on failure.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjv=h]”hŒ Parameters”…”�”}”(hjx=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjt=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kóhjp=ubj›)�”}”(hhh]”(j )�”}”(hŒ7``struct kho_block_set *bs`` The block set to restore. ”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hj•=h]”hŒstruct kho_block_set *bs”…”�”}”(hj—=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj“=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kðhj�=ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set to restore.”h]”hŒThe block set to restore.”…”�”}”(hj®=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jª=h´Kðhj«=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj�=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jª=h´KðhjŒ=ubj )�”}”(hŒ<``u64 head_pa`` Physical address of the first block header. ”h]”(j¦)�”}”(hŒ``u64 head_pa``”h]”j¾)�”}”(hjÎ=h]”hŒ u64 head_pa”…”�”}”(hjÐ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÌ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´KñhjÈ=ubjÀ)�”}”(hhh]”hý)�”}”(hŒ+Physical address of the first block header.”h]”hŒ+Physical address of the first block header.”…”�”}”(hjç=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jã=h´Kñhjä=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÈ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jã=h´KñhjŒ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhjp=ubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hj >h]”hŒ Description”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kóhjp=ubhý)�”}”(hŒÂRestores a serialized block set from a given physical address. The caller is responsible for ensuring that the block set **bs** has been allocated and initialized prior to calling this function.”h]”(hŒyRestores a serialized block set from a given physical address. The caller is responsible for ensuring that the block set ”…”�”}”(hj>h²hh³Nh´Nubj…)�”}”(hŒ**bs**”h]”hŒbs”…”�”}”(hj'>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj>ubhŒC has been allocated and initialized prior to calling this function.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Kòhjp=ubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjB>h]”hŒReturn”…”�”}”(hjD>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj@>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Köhjp=ubhý)�”}”(hŒ-0 on success, or a negative errno on failure.”h]”hŒ-0 on success, or a negative errno on failure.”…”�”}”(hjX>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´K÷hjp=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"kho_block_set_destroy (C function)”Œc.kho_block_set_destroy”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ5void kho_block_set_destroy (struct kho_block_set *bs)”h]”j)�”}”(hŒ4void kho_block_set_destroy(struct kho_block_set *bs)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‡>h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjƒ>h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M(ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–>h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjƒ>h²hh³j•>h´M(ubj?)�”}”(hŒkho_block_set_destroy”h]”jE)�”}”(hŒkho_block_set_destroy”h]”hŒkho_block_set_destroy”…”�”}”(hj¨>h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¤>ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjƒ>h²hh³j•>h´M(ubj^)�”}”(hŒ(struct kho_block_set *bs)”h]”jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjÄ>h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjÀ>ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ>h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÀ>ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hjâ>h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjß>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jä>Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jª>sbŒc.kho_block_set_destroy”†”asbuh1hhjÀ>ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÀ>ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjÀ>ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÀ>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj¼>ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjƒ>h²hh³j•>h´M(ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj>h²hh³j•>h´M(ubah}”(h]”jz>ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j•>h´M(hj|>h²hubjT)�”}”(hhh]”hý)�”}”(hŒ"Destroy all blocks in a block set.”h]”hŒ"Destroy all blocks in a block set.”…”�”}”(hjG?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M(hjD?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj|>h²hh³j•>h´M(ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj_?jvj_?jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒ=**Parameters** ``struct kho_block_set *bs`` The block set.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hji?h]”hŒ Parameters”…”�”}”(hjk?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjg?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M,hjc?ubj›)�”}”(hhh]”j )�”}”(hŒ+``struct kho_block_set *bs`` The block set.”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjˆ?h]”hŒstruct kho_block_set *bs”…”�”}”(hjŠ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj†?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M.hj‚?ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set.”h]”hŒThe block set.”…”�”}”(hj¡?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M)hjž?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj‚?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³j�?h´M.hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhjc?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ kho_block_set_clear (C function)”Œc.kho_block_set_clear”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ3void kho_block_set_clear (struct kho_block_set *bs)”h]”j)�”}”(hŒ2void kho_block_set_clear(struct kho_block_set *bs)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâ?h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÞ?h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M9ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ?h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjÞ?h²hh³jð?h´M9ubj?)�”}”(hŒkho_block_set_clear”h]”jE)�”}”(hŒkho_block_set_clear”h]”hŒkho_block_set_clear”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjÿ?ubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjÞ?h²hh³jð?h´M9ubj^)�”}”(hŒ(struct kho_block_set *bs)”h]”jd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj@ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,@h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj@ubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj=@h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj:@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j?@Œmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j@sbŒc.kho_block_set_clear”†”asbuh1hhj@ubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]@h²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj@ubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjk@h²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj@ubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjx@h²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchj@ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hjÞ?h²hh³jð?h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhjÚ?h²hh³jð?h´M9ubah}”(h]”jÕ?ah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jð?h´M9hj×?h²hubjT)�”}”(hhh]”hý)�”}”(hŒ)Clear all serialized data in a block set.”h]”hŒ)Clear all serialized data in a block set.”…”�”}”(hj¢@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M9hjŸ@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj×?h²hh³jð?h´M9ubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj jujº@jvjº@jw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒF**Parameters** ``struct kho_block_set *bs`` The block set to clear.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjÄ@h]”hŒ Parameters”…”�”}”(hjÆ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M=hj¾@ubj›)�”}”(hhh]”j )�”}”(hŒ4``struct kho_block_set *bs`` The block set to clear.”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjã@h]”hŒstruct kho_block_set *bs”…”�”}”(hjå@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjá@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M?hjÝ@ubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set to clear.”h]”hŒThe block set to clear.”…”�”}”(hjü@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M:hjù@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÝ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jø@h´M?hjÚ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj¾@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"kho_block_set_it_init (C function)”Œc.kho_block_set_it_init”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒRvoid kho_block_set_it_init (struct kho_block_set_it *it, struct kho_block_set *bs)”h]”j)�”}”(hŒQvoid kho_block_set_it_init(struct kho_block_set_it *it, struct kho_block_set *bs)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj=Ah²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj9Ah²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MGubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLAh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj9Ah²hh³jKAh´MGubj?)�”}”(hŒkho_block_set_it_init”h]”jE)�”}”(hŒkho_block_set_it_init”h]”hŒkho_block_set_it_init”…”�”}”(hj^Ah²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjZAubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj9Ah²hh³jKAh´MGubj^)�”}”(hŒ7(struct kho_block_set_it *it, struct kho_block_set *bs)”h]”(jd)�”}”(hŒstruct kho_block_set_it *it”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjzAh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjvAubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Ah²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjvAubh)�”}”(hhh]”jE)�”}”(hŒkho_block_set_it”h]”hŒkho_block_set_it”…”�”}”(hj˜Ah²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj•Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jšAŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢j`AsbŒc.kho_block_set_it_init”†”asbuh1hhjvAubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Ah²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjvAubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjÆAh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjvAubjE)�”}”(hŒit”h]”hŒit”…”�”}”(hjÓAh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjvAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjrAubjd)�”}”(hŒstruct kho_block_set *bs”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjìAh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjèAubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùAh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjèAubh)�”}”(hhh]”jE)�”}”(hŒ kho_block_set”h]”hŒ kho_block_set”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j BŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j´AŒc.kho_block_set_it_init”†”asbuh1hhjèAubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Bh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjèAubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj6Bh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjèAubjE)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjCBh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjèAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjrAubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj9Ah²hh³jKAh´MGubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj5Ah²hh³jKAh´MGubah}”(h]”j0Aah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jKAh´MGhj2Ah²hubjT)�”}”(hhh]”hý)�”}”(hŒ Initialize a block set iterator.”h]”hŒ Initialize a block set iterator.”…”�”}”(hjmBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MGhjjBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj2Ah²hh³jKAh´MGubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj…Bjvj…Bjw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hŒŒ**Parameters** ``struct kho_block_set_it *it`` The iterator to initialize. ``struct kho_block_set *bs`` The block set to iterate over.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj�Bh]”hŒ Parameters”…”�”}”(hj‘Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MKhj‰Bubj›)�”}”(hhh]”(j )�”}”(hŒ<``struct kho_block_set_it *it`` The iterator to initialize. ”h]”(j¦)�”}”(hŒ``struct kho_block_set_it *it``”h]”j¾)�”}”(hj®Bh]”hŒstruct kho_block_set_it *it”…”�”}”(hj°Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¬Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MHhj¨BubjÀ)�”}”(hhh]”hý)�”}”(hŒThe iterator to initialize.”h]”hŒThe iterator to initialize.”…”�”}”(hjÇBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÃBh´MHhjÄBubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj¨Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÃBh´MHhj¥Bubj )�”}”(hŒ;``struct kho_block_set *bs`` The block set to iterate over.”h]”(j¦)�”}”(hŒ``struct kho_block_set *bs``”h]”j¾)�”}”(hjçBh]”hŒstruct kho_block_set *bs”…”�”}”(hjéBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjåBubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MJhjáBubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block set to iterate over.”h]”hŒThe block set to iterate over.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MIhjýBubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjáBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jüBh´MJhj¥Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj‰Bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+kho_block_set_it_reserve_entry (C function)”Œ c.kho_block_set_it_reserve_entry”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒCvoid * kho_block_set_it_reserve_entry (struct kho_block_set_it *it)”h]”j)�”}”(hŒAvoid *kho_block_set_it_reserve_entry(struct kho_block_set_it *it)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjACh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj=Ch²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MSubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPCh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj=Ch²hh³jOCh´MSubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj^Ch²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj=Ch²hh³jOCh´MSubj?)�”}”(hŒkho_block_set_it_reserve_entry”h]”jE)�”}”(hŒkho_block_set_it_reserve_entry”h]”hŒkho_block_set_it_reserve_entry”…”�”}”(hjoCh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjkCubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hj=Ch²hh³jOCh´MSubj^)�”}”(hŒ(struct kho_block_set_it *it)”h]”jd)�”}”(hŒstruct kho_block_set_it *it”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj‹Ch²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihj‡Cubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Ch²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj‡Cubh)�”}”(hhh]”jE)�”}”(hŒkho_block_set_it”h]”hŒkho_block_set_it”…”�”}”(hj©Ch²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj¦Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”j«CŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jqCsbŒ c.kho_block_set_it_reserve_entry”†”asbuh1hhj‡Cubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉCh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hj‡CubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hj×Ch²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhj‡CubjE)�”}”(hŒit”h]”hŒit”…”�”}”(hjäCh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj‡Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjƒCubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj=Ch²hh³jOCh´MSubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj9Ch²hh³jOCh´MSubah}”(h]”j4Cah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³jOCh´MShj6Ch²hubjT)�”}”(hhh]”hý)�”}”(hŒ7Reserve and return the next available slot for writing.”h]”hŒ7Reserve and return the next available slot for writing.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MShj Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj6Ch²hh³jOCh´MSubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj&Djvj&Djw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hX‡**Parameters** ``struct kho_block_set_it *it`` The block iterator. **Description** Reserves a slot in the current block during state serialization to add a new entry, advancing the internal index. If the current block is full, it automatically moves to the next block in the set. **Return** A pointer to the reserved entry slot, or NULL if the block set's capacity is fully exhausted.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hj0Dh]”hŒ Parameters”…”�”}”(hj2Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj.Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MWhj*Dubj›)�”}”(hhh]”j )�”}”(hŒ4``struct kho_block_set_it *it`` The block iterator. ”h]”(j¦)�”}”(hŒ``struct kho_block_set_it *it``”h]”j¾)�”}”(hjODh]”hŒstruct kho_block_set_it *it”…”�”}”(hjQDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjMDubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MThjIDubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block iterator.”h]”hŒThe block iterator.”…”�”}”(hjhDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jdDh´MThjeDubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjIDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jdDh´MThjFDubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj*Dubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjŠDh]”hŒ Description”…”�”}”(hjŒDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjˆDubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MVhj*Dubhý)�”}”(hŒÄReserves a slot in the current block during state serialization to add a new entry, advancing the internal index. If the current block is full, it automatically moves to the next block in the set.”h]”hŒÄReserves a slot in the current block during state serialization to add a new entry, advancing the internal index. If the current block is full, it automatically moves to the next block in the set.”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MUhj*Dubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hj±Dh]”hŒReturn”…”�”}”(hj³Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¯Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MYhj*Dubhý)�”}”(hŒ]A pointer to the reserved entry slot, or NULL if the block set's capacity is fully exhausted.”h]”hŒ_A pointer to the reserved entry slot, or NULL if the block set’s capacity is fully exhausted.”…”�”}”(hjÇDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MZhj*Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubjú)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(kho_block_set_it_read_entry (C function)”Œc.kho_block_set_it_read_entry”hNt”auh1jùhj7,h²hh³Nh´Nubj )�”}”(hhh]”(j)�”}”(hŒ@void * kho_block_set_it_read_entry (struct kho_block_set_it *it)”h]”j)�”}”(hŒ>void *kho_block_set_it_read_entry(struct kho_block_set_it *it)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjöDh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjòDh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´Mqubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjòDh²hh³jEh´MqubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjòDh²hh³jEh´Mqubj?)�”}”(hŒkho_block_set_it_read_entry”h]”jE)�”}”(hŒkho_block_set_it_read_entry”h]”hŒkho_block_set_it_read_entry”…”�”}”(hj$Eh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhj Eubah}”(h]”h ]”(jXjYeh"]”h$]”h&]”hÅhÆuh1j>hjòDh²hh³jEh´Mqubj^)�”}”(hŒ(struct kho_block_set_it *it)”h]”jd)�”}”(hŒstruct kho_block_set_it *it”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hj@Eh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjhj§Fh²hh³j¹Fh´MŠubj^)�”}”(hŒ(struct kho_block_set_it *it)”h]”jd)�”}”(hŒstruct kho_block_set_it *it”h]”(jj)�”}”(hjmh]”hŒstruct”…”�”}”(hjõFh²hh³Nh´Nubah}”(h]”h ]”jvah"]”h$]”h&]”uh1jihjñFubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjñFubh)�”}”(hhh]”jE)�”}”(hŒkho_block_set_it”h]”hŒkho_block_set_it”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j Œreftype”j¢Œ reftarget”jGŒmodname”NŒ classname”Nj¦j©)�”}”j¬]”j¯)�”}”j¢jÛFsbŒc.kho_block_set_it_prev”†”asbuh1hhjñFubj.)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Gh²hh³Nh´Nubah}”(h]”h ]”j:ah"]”h$]”h&]”uh1j-hjñFubjÃ)�”}”(hjÆh]”hŒ*”…”�”}”(hjAGh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÂhjñFubjE)�”}”(hŒit”h]”hŒit”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”jQah"]”h$]”h&]”uh1jDhjñFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jchjíFubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j]hj§Fh²hh³j¹Fh´MŠubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjEˆuh1jjFjGhj£Fh²hh³j¹Fh´MŠubah}”(h]”jžFah ]”(jKjLeh"]”h$]”h&]”jPˆjQ)jRhuh1jh³j¹Fh´MŠhj Fh²hubjT)�”}”(hhh]”hý)�”}”(hŒ0Return the previous entry slot in the block set.”h]”hŒ0Return the previous entry slot in the block set.”…”�”}”(hjxGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MŠhjuGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj Fh²hh³j¹Fh´MŠubeh}”(h]”h ]”(j Œfunction”eh"]”h$]”h&]”jtj juj�Gjvj�Gjw‰jx‰jy‰uh1j h²hhj7,h³Nh´Nubj{)�”}”(hX'**Parameters** ``struct kho_block_set_it *it`` The block iterator. **Description** If the current index is at the start of a block, it automatically moves to the end of the previous block. **Return** A pointer to the previous entry slot, or NULL if at the very beginning of the block set.”h]”(hý)�”}”(hŒ**Parameters**”h]”j…)�”}”(hjšGh]”hŒ Parameters”…”�”}”(hjœGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj˜Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MŽhj”Gubj›)�”}”(hhh]”j )�”}”(hŒ4``struct kho_block_set_it *it`` The block iterator. ”h]”(j¦)�”}”(hŒ``struct kho_block_set_it *it``”h]”j¾)�”}”(hj¹Gh]”hŒstruct kho_block_set_it *it”…”�”}”(hj»Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj·Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M‹hj³GubjÀ)�”}”(hhh]”hý)�”}”(hŒThe block iterator.”h]”hŒThe block iterator.”…”�”}”(hjÒGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÎGh´M‹hjÏGubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj³Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸh³jÎGh´M‹hj°Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jšhj”Gubhý)�”}”(hŒ**Description**”h]”j…)�”}”(hjôGh]”hŒ Description”…”�”}”(hjöGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòGubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M�hj”Gubhý)�”}”(hŒiIf the current index is at the start of a block, it automatically moves to the end of the previous block.”h]”hŒiIf the current index is at the start of a block, it automatically moves to the end of the previous block.”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´MŒhj”Gubhý)�”}”(hŒ **Return**”h]”j…)�”}”(hjHh]”hŒReturn”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M�hj”Gubhý)�”}”(hŒXA pointer to the previous entry slot, or NULL if at the very beginning of the block set.”h]”hŒXA pointer to the previous entry slot, or NULL if at the very beginning of the block set.”…”�”}”(hj1Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kho/index:94: ./kernel/liveupdate/kho_block.c”h´M�hj”Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jzhj7,h²hh³Nh´Nubeh}”(h]”Œkho-serialization-blocks-api”ah ]”h"]”Œkho serialization blocks api”ah$]”h&]”uh1hÖhhØh²hh³hÇh´KWubh×)�”}”(hhh]”(hÜ)�”}”(hŒSee Also”h]”hŒSee Also”…”�”}”(hjRHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjOHh²hh³hÇh´KbubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒ:doc:`/admin-guide/mm/kho`”h]”hý)�”}”(hjiHh]”h)�”}”(hjiHh]”j)�”}”(hjiHh]”hŒ/admin-guide/mm/kho”…”�”}”(hjqHh²hh³Nh´Nubah}”(h]”h ]”(j$Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jhjnHubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j1Œ refdomain”j{HŒreftype”Œdoc”Œ refexplicit”‰Œrefwarn”ˆj7Œ/admin-guide/mm/kho”uh1hh³hÇh´KdhjkHubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KdhjgHubah}”(h]”h ]”h"]”h$]”h&]”uh1jeHhjbHh²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j`Hh³hÇh´KdhjOHh²hubeh}”(h]”Œsee-also”ah ]”h"]”Œsee also”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kbubeh}”(h]”(Œkexec-handover-subsystem”hÕeh ]”h"]”(Œkexec handover subsystem”Œ kho-concepts”eh$]”h&]”uh1hÖhhh²hh³hÇh´Kj}”j¯HhÊsj}”hÕhÊsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÛNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j×HŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”(hÕ]”hÊajq]”jgaj]”jýauŒnameids”}”(j¯HhÕj®Hj«Hjwjtjjqj j jzjjyjvjåjâj4,j1,jLHjIHj¦Hj£HuŒ nametypes”}”(j¯Hˆj®H‰jw‰jˆj ‰jzˆjy‰jå‰j4,‰jLH‰j¦H‰uh}”(hÕhØj«HhØjthëjqjzj jzjjjvjjâjj1,jèjjjÛjàjøjýjm jr j j jújÿjŽj“jÓjØj»jÀjcjhjöjûj(j-j{j€jûj j|!j�!jL#jQ#j%j %jY&j^&jº'j¿'j0)j5)jIHj7,jr,jw,j¶-j»-j0j0j�1j•1j¯2j´2jC4jH4jÃ5jÈ5jŸ7j¤7jï9jô9j?<jD<jz>j>jÕ?jÚ?j0Aj5Aj4Cj9CjéDjîDjžFj£Fj£HjOHuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jåHKs…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hý)�”}”(hhh]”hŒ2Hyperlink target "kho-concepts" is not referenced.”…”�”}”hjCIsbah}”(h]”h ]”h"]”h$]”h&]”uh1hühj@Iubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j>Iubj?I)�”}”(hhh]”hý)�”}”(hhh]”hŒ-Hyperlink target "kho-fdt" is not referenced.”…”�”}”hj^Isbah}”(h]”h ]”h"]”h$]”h&]”uh1hühj[Iubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jXIŒsource”hÇŒline”Kuh1j>Iubj?I)�”}”(hhh]”hý)�”}”(hhh]”hŒ1Hyperlink target "kho-scratch" is not referenced.”…”�”}”hjxIsbah}”(h]”h ]”h"]”h$]”h&]”uh1hühjuIubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jXIŒsource”hÇŒline”K+uh1j>IubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.