€•—+Œ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/fdt”Œ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/fdt”Œ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/fdt”Œ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/fdt”Œ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/fdt”Œ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/fdt”Œ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/fdt.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒKHO FDT”h]”hŒKHO FDT”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hXžKHO uses the flattened device tree (FDT) container format and libfdt library to create and parse the data that is passed between the kernels. The properties in KHO FDT are stored in native format. It includes the physical address of an in-memory structure describing all preserved memory regions, as well as physical addresses of KHO users' own FDTs. Interpreting those sub FDTs is the responsibility of KHO users.”h]”hX KHO uses the flattened device tree (FDT) container format and libfdt library to create and parse the data that is passed between the kernels. The properties in KHO FDT are stored in native format. It includes the physical address of an in-memory structure describing all preserved memory regions, as well as physical addresses of KHO users’ own FDTs. Interpreting those sub FDTs is the responsibility of KHO users.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒKHO nodes and properties”h]”hŒKHO nodes and properties”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÙhžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ!Property ``preserved-memory-map``”h]”(hŒ Property ”…””}”(hhíhžhhŸNh NubhŒliteral”“”)”}”(hŒ``preserved-memory-map``”h]”hŒpreserved-memory-map”…””}”(hh÷hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhhíubeh}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhêhžhhŸh³h KubhÊ)”}”(hŒÃKHO saves a special property named ``preserved-memory-map`` under the root node. This node contains the physical address of an in-memory structure for KHO to preserve memory regions across kexec.”h]”(hŒ#KHO saves a special property named ”…””}”(hj hžhhŸNh Nubhö)”}”(hŒ``preserved-memory-map``”h]”hŒpreserved-memory-map”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubhŒˆ under the root node. This node contains the physical address of an in-memory structure for KHO to preserve memory regions across kexec.”…””}”(hj hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khhêhžhubeh}”(h]”Œproperty-preserved-memory-map”ah ]”h"]”Œproperty preserved-memory-map”ah$]”h&]”uh1h´hhÙhžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒProperty ``compatible``”h]”(hŒ Property ”…””}”(hj6hžhhŸNh Nubhö)”}”(hŒ``compatible``”h]”hŒ compatible”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj3hžhhŸh³h KubhÊ)”}”(hŒòThe ``compatible`` property determines compatibility between the kernel that created the KHO FDT and the kernel that attempts to load it. If the kernel that loads the KHO FDT is not compatible with it, the entire KHO process will be bypassed.”h]”(hŒThe ”…””}”(hjRhžhhŸNh Nubhö)”}”(hŒ``compatible``”h]”hŒ compatible”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjRubhŒà property determines compatibility between the kernel that created the KHO FDT and the kernel that attempts to load it. If the kernel that loads the KHO FDT is not compatible with it, the entire KHO process will be bypassed.”…””}”(hjRhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj3hžhubeh}”(h]”Œproperty-compatible”ah ]”h"]”Œproperty compatible”ah$]”h&]”uh1h´hhÙhžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒProperty ``fdt``”h]”(hŒ Property ”…””}”(hj}hžhhŸNh Nubhö)”}”(hŒ``fdt``”h]”hŒfdt”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjzhžhhŸh³h K!ubhÊ)”}”(hŒÃGenerally, a KHO user serialize its state into its own FDT and instructs KHO to preserve the underlying memory, such that after kexec, the new kernel can recover its state from the preserved FDT.”h]”hŒÃGenerally, a KHO user serialize its state into its own FDT and instructs KHO to preserve the underlying memory, such that after kexec, the new kernel can recover its state from the preserved FDT.”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K#hjzhžhubhÊ)”}”(hŒA KHO user thus can create a node in KHO root tree and save the physical address of its own FDT in that node's property ``fdt`` .”h]”(hŒzA KHO user thus can create a node in KHO root tree and save the physical address of its own FDT in that node’s property ”…””}”(hj§hžhhŸNh Nubhö)”}”(hŒ``fdt``”h]”hŒfdt”…””}”(hj¯hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj§ubhŒ .”…””}”(hj§hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K'hjzhžhubeh}”(h]”Œ property-fdt”ah ]”h"]”Œ property fdt”ah$]”h&]”uh1h´hhÙhžhhŸh³h K!ubeh}”(h]”Œkho-nodes-and-properties”ah ]”h"]”Œkho nodes and properties”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒExamples”h]”hŒExamples”…””}”(hjÚhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj×hžhhŸh³h K+ubhÊ)”}”(hŒ‰The following example demonstrates KHO FDT that preserves two memory regions created with ``reserve_mem`` kernel command line parameter::”h]”(hŒZThe following example demonstrates KHO FDT that preserves two memory regions created with ”…””}”(hjèhžhhŸNh Nubhö)”}”(hŒ``reserve_mem``”h]”hŒ reserve_mem”…””}”(hjðhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjèubhŒ kernel command line parameter:”…””}”(hjèhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hj×hžhubhŒ literal_block”“”)”}”(hŒ¥/dts-v1/; / { compatible = "kho-v1"; preserved-memory-map = <0x40be16 0x1000000>; memblock { fdt = <0x1517 0x1000000>; }; };”h]”hŒ¥/dts-v1/; / { compatible = "kho-v1"; preserved-memory-map = <0x40be16 0x1000000>; memblock { fdt = <0x1517 0x1000000>; }; };”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhŸh³h K0hj×hžhubhÊ)”}”(hŒšwhere the ``memblock`` node contains an FDT that is requested by the subsystem memblock for preservation. The FDT contains the following serialized data::”h]”(hŒ where the ”…””}”(hjhžhhŸNh Nubhö)”}”(hŒ ``memblock``”h]”hŒmemblock”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒƒ node contains an FDT that is requested by the subsystem memblock for preservation. The FDT contains the following serialized data:”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K; size = <0x04 0x00>; }; n2 { compatible = "reserve-mem-v1"; start = <0xc067 0x4000000>; size = <0x04 0x00>; }; };”h]”hXO/dts-v1/; / { compatible = "memblock-v1"; n1 { compatible = "reserve-mem-v1"; start = <0xc06b 0x4000000>; size = <0x04 0x00>; }; n2 { compatible = "reserve-mem-v1"; start = <0xc067 0x4000000>; size = <0x04 0x00>; }; };”…””}”hj8sbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhŸh³h K@hj×hžhubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1h´hh¶hžhhŸh³h K+ubeh}”(h]”Œkho-fdt”ah ]”h"]”Œkho fdt”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(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”jyŒ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”}”Œnameids”}”(jSjPjÔjÑj0j-jwjtjÌjÉjKjHuŒ nametypes”}”(jS‰jÔ‰j0‰jw‰j̉jK‰uh}”(jPh¶jÑhÙj-hêjtj3jÉjzjHj×uŒ 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”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.