€•GŒ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”Œ7/translations/zh_CN/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/zh_TW/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/it_IT/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ja_JP/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ko_KR/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/pt_BR/driver-api/cxl/linux/memory-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/sp_SP/driver-api/cxl/linux/memory-hotplug”Œ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”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/driver-api/cxl/linux/memory-hotplug.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒMemory Hotplug”h]”hŒMemory Hotplug”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒªThe final phase of surfacing CXL memory to the kernel page allocator is for the `DAX` driver to surface a `Driver Managed` memory region via the memory-hotplug component.”h]”(hŒPThe final phase of surfacing CXL memory to the kernel page allocator is for the ”…””}”(hhßh²hh³Nh´NubhŒtitle_reference”“”)”}”(hŒ`DAX`”h]”hŒDAX”…””}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhßubhŒ driver to surface a ”…””}”(hhßh²hh³Nh´Nubhè)”}”(hŒ`Driver Managed`”h]”hŒDriver Managed”…””}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhßubhŒ0 memory region via the memory-hotplug component.”…””}”(hhßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hŒ0There are four major configurations to consider:”h]”hŒ0There are four major configurations to consider:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ)Default Online Behavior (on/off and zone)”h]”hÞ)”}”(hj*h]”hŒ)Default Online Behavior (on/off and zone)”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj#h²hh³hÇh´Nubj')”}”(hŒHotplug Memory Block size”h]”hÞ)”}”(hjAh]”hŒHotplug Memory Block size”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj#h²hh³hÇh´Nubj')”}”(hŒMemory Map Resource location”h]”hÞ)”}”(hjXh]”hŒMemory Map Resource location”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj#h²hh³hÇh´Nubj')”}”(hŒ"Driver-Managed Memory Designation ”h]”hÞ)”}”(hŒ!Driver-Managed Memory Designation”h]”hŒ!Driver-Managed Memory Designation”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj#h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1j!hhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒDefault Online Behavior”h]”hŒDefault Online Behavior”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´KubhÞ)”}”(hŒcThe default-online behavior of hotplug memory is dictated by the following, in order of precedence:”h]”hŒcThe default-online behavior of hotplug memory is dictated by the following, in order of precedence:”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjh²hubhŒ bullet_list”“”)”}”(hhh]”(j')”}”(hŒ::code:`CONFIG_MHP_DEFAULT_ONLINE_TYPE` Build Configuration”h]”hÞ)”}”(hj¶h]”(hŒliteral”“”)”}”(hŒ&:code:`CONFIG_MHP_DEFAULT_ONLINE_TYPE`”h]”hŒCONFIG_MHP_DEFAULT_ONLINE_TYPE”…””}”(hj½h²hh³Nh´Nubah}”(h]”h ]”Œcode”ah"]”h$]”h&]”Œlanguage”huh1j»hj¸ubhŒ Build Configuration”…””}”(hj¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj±h²hh³hÇh´Nubj')”}”(hŒ*:code:`memhp_default_state` Boot parameter”h]”hÞ)”}”(hjßh]”(j¼)”}”(hŒ:code:`memhp_default_state`”h]”hŒmemhp_default_state”…””}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjáubhŒ Boot parameter”…””}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj±h²hh³hÇh´Nubj')”}”(hŒ<:code:`/sys/devices/system/memory/auto_online_blocks` value ”h]”hÞ)”}”(hŒ;:code:`/sys/devices/system/memory/auto_online_blocks` value”h]”(j¼)”}”(hŒ5:code:`/sys/devices/system/memory/auto_online_blocks`”h]”hŒ-/sys/devices/system/memory/auto_online_blocks”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjubhŒ value”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj±h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j¯h³hÇh´Khjh²hubhÞ)”}”(hŒMThese dictate whether hotplugged memory blocks arrive in one of three states:”h]”hŒMThese dictate whether hotplugged memory blocks arrive in one of three states:”…””}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjh²hubj")”}”(hhh]”(j')”}”(hŒOffline”h]”hÞ)”}”(hjEh]”hŒOffline”…””}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj@h²hh³hÇh´Nubj')”}”(hŒOnline in :code:`ZONE_NORMAL`”h]”hÞ)”}”(hj\h]”(hŒ Online in ”…””}”(hj^h²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj@h²hh³hÇh´Nubj')”}”(hŒOnline in :code:`ZONE_MOVABLE` ”h]”hÞ)”}”(hŒOnline in :code:`ZONE_MOVABLE`”h]”(hŒ Online in ”…””}”(hj„h²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj@h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j‹jŒjhjŽjuh1j!hjh²hh³hÇh´KubhÞ)”}”(hŒ±:code:`ZONE_NORMAL` implies this capacity may be used for almost any allocation, while :code:`ZONE_MOVABLE` implies this capacity should only be used for migratable allocations.”h]”(j¼)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj­ubhŒD implies this capacity may be used for almost any allocation, while ”…””}”(hj­h²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj­ubhŒF implies this capacity should only be used for migratable allocations.”…””}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjh²hubhÞ)”}”(hX:code:`ZONE_MOVABLE` attempts to retain the hotplug-ability of a memory block so that it the entire region may be hot-unplugged at a later time. Any capacity onlined into :code:`ZONE_NORMAL` should be considered permanently attached to the page allocator.”h]”(j¼)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjÝubhŒ˜ attempts to retain the hotplug-ability of a memory block so that it the entire region may be hot-unplugged at a later time. Any capacity onlined into ”…””}”(hjÝh²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjÝubhŒA should be considered permanently attached to the page allocator.”…””}”(hjÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hjh²hubeh}”(h]”Œdefault-online-behavior”ah ]”h"]”Œdefault online behavior”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒHotplug Memory Block Size”h]”hŒHotplug Memory Block Size”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K*ubhÞ)”}”(hXUBy default, on most architectures, the Hotplug Memory Block Size is either 128MB or 256MB. On x86, the block size increases up to 2GB as total memory capacity exceeds 64GB. As of v6.15, Linux does not take into account the size and alignment of the ACPI CEDT CFMWS regions (see Early Boot docs) when deciding the Hotplug Memory Block Size.”h]”hXUBy default, on most architectures, the Hotplug Memory Block Size is either 128MB or 256MB. On x86, the block size increases up to 2GB as total memory capacity exceeds 64GB. As of v6.15, Linux does not take into account the size and alignment of the ACPI CEDT CFMWS regions (see Early Boot docs) when deciding the Hotplug Memory Block Size.”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjh²hubeh}”(h]”Œhotplug-memory-block-size”ah ]”h"]”Œhotplug memory block size”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K*ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Memory Map”h]”hŒ Memory Map”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj<h²hh³hÇh´K2ubhÞ)”}”(hŒ‹The location of :code:`struct folio` allocations to represent the hotplugged memory capacity are dictated by the following system settings:”h]”(hŒThe location of ”…””}”(hjMh²hh³Nh´Nubj¼)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjMubhŒg allocations to represent the hotplugged memory capacity are dictated by the following system settings:”…””}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj<h²hubj°)”}”(hhh]”(j')”}”(hŒ>:code:`/sys_module/memory_hotplug/parameters/memmap_on_memory`”h]”hÞ)”}”(hjsh]”j¼)”}”(hjsh]”hŒ6/sys_module/memory_hotplug/parameters/memmap_on_memory”…””}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjnh²hh³hÇh´Nubj')”}”(hŒ5:code:`/sys/bus/dax/devices/daxN.Y/memmap_on_memory` ”h]”hÞ)”}”(hŒ4:code:`/sys/bus/dax/devices/daxN.Y/memmap_on_memory`”h]”j¼)”}”(hj˜h]”hŒ,/sys/bus/dax/devices/daxN.Y/memmap_on_memory”…””}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjnh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j0j1uh1j¯h³hÇh´K6hj<h²hubhÞ)”}”(hX If both of these parameters are set to true, :code:`struct folio` for this capacity will be carved out of the memory block being onlined. This has performance implications if the memory is particularly high-latency and its :code:`struct folio` becomes hotly contended.”h]”(hŒ-If both of these parameters are set to true, ”…””}”(hjºh²hh³Nh´Nubj¼)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjºubhŒŸ for this capacity will be carved out of the memory block being onlined. This has performance implications if the memory is particularly high-latency and its ”…””}”(hjºh²hh³Nh´Nubj¼)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjºubhŒ becomes hotly contended.”…””}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K9hj<h²hubhÞ)”}”(hXIf either parameter is set to false, :code:`struct folio` for this capacity will be allocated from the local node of the processor running the hotplug procedure. This capacity will be allocated from :code:`ZONE_NORMAL` on that node, as it is a :code:`GFP_KERNEL` allocation.”h]”(hŒ%If either parameter is set to false, ”…””}”(hjîh²hh³Nh´Nubj¼)”}”(hŒ:code:`struct folio`”h]”hŒ struct folio”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjîubhŒ for this capacity will be allocated from the local node of the processor running the hotplug procedure. This capacity will be allocated from ”…””}”(hjîh²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjîubhŒ on that node, as it is a ”…””}”(hjîh²hh³Nh´Nubj¼)”}”(hŒ:code:`GFP_KERNEL`”h]”hŒ GFP_KERNEL”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hjîubhŒ allocation.”…””}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K>hj<h²hubhÞ)”}”(hŒ×Systems with extremely large amounts of :code:`ZONE_MOVABLE` memory (e.g. CXL memory pools) must ensure that there is sufficient local :code:`ZONE_NORMAL` capacity to host the memory map for the hotplugged capacity.”h]”(hŒ(Systems with extremely large amounts of ”…””}”(hj5h²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_MOVABLE`”h]”hŒ ZONE_MOVABLE”…””}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj5ubhŒK memory (e.g. CXL memory pools) must ensure that there is sufficient local ”…””}”(hj5h²hh³Nh´Nubj¼)”}”(hŒ:code:`ZONE_NORMAL`”h]”hŒ ZONE_NORMAL”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jÈah"]”h$]”h&]”Œlanguage”huh1j»hj5ubhŒ= capacity to host the memory map for the hotplugged capacity.”…””}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KChj<h²hubeh}”(h]”Œ memory-map”ah ]”h"]”Œ memory map”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K2ubhÉ)”}”(hhh]”(hÎ)”}”(hŒDriver Managed Memory”h]”hŒDriver Managed Memory”…””}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjqh²hh³hÇh´KHubhÞ)”}”(hX´The DAX driver surfaces this memory to memory-hotplug as "Driver Managed". This is not a configurable setting, but it's important to note that driver managed memory is explicitly excluded from use during kexec. This is required to ensure any reset or out-of-band operations that the CXL device may be subject to during a functional system-reboot (such as a reset-on-probe) will not cause portions of the kexec kernel to be overwritten.”h]”hXºThe DAX driver surfaces this memory to memory-hotplug as “Driver Managedâ€. This is not a configurable setting, but it’s important to note that driver managed memory is explicitly excluded from use during kexec. This is required to ensure any reset or out-of-band operations that the CXL device may be subject to during a functional system-reboot (such as a reset-on-probe) will not cause portions of the kexec kernel to be overwritten.”…””}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhjqh²hubeh}”(h]”Œdriver-managed-memory”ah ]”h"]”Œdriver managed memory”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KHubeh}”(h]”Œmemory-hotplug”ah ]”h"]”Œmemory hotplug”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”jÃŒ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”}”(jjšjjj9j6jnjkj•j’uŒ nametypes”}”(j‰j‰j9‰jn‰j•‰uh}”(jšhÊjjj6jjkj<j’jquŒ 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.