€•Œ^Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types”Œ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/devices/device-types.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒDevices and Protocols”h]”hŒDevices and Protocols”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒÞThe type of CXL device (Memory, Accelerator, etc) dictates many configuration steps. This section covers some basic background on device types and on-device resources used by the platform and OS which impact configuration.”h]”hŒÞThe type of CXL device (Memory, Accelerator, etc) dictates many configuration steps. This section covers some basic background on device types and on-device resources used by the platform and OS which impact configuration.”…””}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Protocols”h]”hŒ Protocols”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhíh²hh³hÇh´K ubhÞ)”}”(hŒõThere are three core protocols to CXL. For the purpose of this documentation, we will only discuss very high level definitions as the specific hardware details are largely abstracted away from Linux. See the CXL specification for more details.”h]”hŒõThere are three core protocols to CXL. For the purpose of this documentation, we will only discuss very high level definitions as the specific hardware details are largely abstracted away from Linux. See the CXL specification for more details.”…””}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhíh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒCXL.io”h]”hŒCXL.io”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KubhÞ)”}”(hŒÔThe basic interaction protocol, similar to PCIe configuration mechanisms. Typically used for initialization, configuration, and I/O access for anything other than memory (CXL.mem) or cache (CXL.cache) operations.”h]”hŒÔThe basic interaction protocol, similar to PCIe configuration mechanisms. Typically used for initialization, configuration, and I/O access for anything other than memory (CXL.mem) or cache (CXL.cache) operations.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj h²hubhÞ)”}”(hŒ¢The Linux CXL driver exposes access to .io functionality via the various sysfs interfaces and /dev/cxl/ devices (which exposes direct access to device mailboxes).”h]”hŒ¢The Linux CXL driver exposes access to .io functionality via the various sysfs interfaces and /dev/cxl/ devices (which exposes direct access to device mailboxes).”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj h²hubeh}”(h]”Œcxl-io”ah ]”h"]”Œcxl.io”ah$]”h&]”uh1hÈhhíh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ CXL.cache”h]”hŒ CXL.cache”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjAh²hh³hÇh´KubhÞ)”}”(hŒLThe mechanism by which a device may coherently access and cache host memory.”h]”hŒLThe mechanism by which a device may coherently access and cache host memory.”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjAh²hubhÞ)”}”(hŒ-Largely transparent to Linux once configured.”h]”hŒ-Largely transparent to Linux once configured.”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjAh²hubeh}”(h]”Œ cxl-cache”ah ]”h"]”Œ cxl.cache”ah$]”h&]”uh1hÈhhíh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒCXL.mem”h]”hŒCXL.mem”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjvh²hh³hÇh´K$ubhÞ)”}”(hŒMThe mechanism by which the CPU may coherently access and cache device memory.”h]”hŒMThe mechanism by which the CPU may coherently access and cache device memory.”…””}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjvh²hubhÞ)”}”(hŒ-Largely transparent to Linux once configured.”h]”hŒ-Largely transparent to Linux once configured.”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjvh²hubeh}”(h]”Œcxl-mem”ah ]”h"]”Œcxl.mem”ah$]”h&]”uh1hÈhhíh²hh³hÇh´K$ubeh}”(h]”Œ protocols”ah ]”h"]”Œ protocols”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Device Types”h]”hŒ Device Types”…””}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj³h²hh³hÇh´K+ubhÉ)”}”(hhh]”(hÎ)”}”(hŒType-1”h]”hŒType-1”…””}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÄh²hh³hÇh´K.ubhÞ)”}”(hŒA Type-1 CXL device:”h]”hŒA Type-1 CXL device:”…””}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K0hjÄh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ'Supports cxl.io and cxl.cache protocols”h]”hÞ)”}”(hjìh]”hŒ'Supports cxl.io and cxl.cache protocols”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K2hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjåh²hh³hÇh´Nubjé)”}”(hŒ!Implements a fully coherent cache”h]”hÞ)”}”(hjh]”hŒ!Implements a fully coherent cache”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjåh²hh³hÇh´Nubjé)”}”(hŒ:Allows Device-to-Host coherence and Host-to-Device snoops.”h]”hÞ)”}”(hjh]”hŒ:Allows Device-to-Host coherence and Host-to-Device snoops.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K4hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjåh²hh³hÇh´Nubjé)”}”(hŒ/Does NOT have host-managed device memory (HDM) ”h]”hÞ)”}”(hŒ.Does NOT have host-managed device memory (HDM)”h]”hŒ.Does NOT have host-managed device memory (HDM)”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K5hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjåh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jãh³hÇh´K2hjÄh²hubhÞ)”}”(hŒ¹Typical examples of type-1 devices is a Smart NIC - which may want to directly operate on host-memory (DMA) to store incoming packets. These devices largely rely on CPU-attached memory.”h]”hŒ¹Typical examples of type-1 devices is a Smart NIC - which may want to directly operate on host-memory (DMA) to store incoming packets. These devices largely rely on CPU-attached memory.”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hjÄh²hubeh}”(h]”Œtype-1”ah ]”h"]”Œtype-1”ah$]”h&]”uh1hÈhj³h²hh³hÇh´K.ubhÉ)”}”(hhh]”(hÎ)”}”(hŒType-2”h]”hŒType-2”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjeh²hh³hÇh´Khjeh²hubjä)”}”(hhh]”(jé)”}”(hŒ1Supports cxl.io, cxl.cache, and cxl.mem protocols”h]”hÞ)”}”(hj‰h]”hŒ1Supports cxl.io, cxl.cache, and cxl.mem protocols”…””}”(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ŒCOptionally implements coherent cache and Host-Managed Device Memory”h]”hÞ)”}”(hj h]”hŒCOptionally implements coherent cache and Host-Managed Device Memory”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KAhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhj„h²hh³hÇh´Nubjé)”}”(hŒ?Is typically an accelerator device with high bandwidth memory. ”h]”hÞ)”}”(hŒ>Is typically an accelerator device with high bandwidth memory.”h]”hŒ>Is typically an accelerator device with high bandwidth memory.”…””}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KBhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhj„h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jMjNuh1jãh³hÇh´K@hjeh²hubhÞ)”}”(hŒÝThe primary difference between a type-1 and type-2 device is the presence of host-managed device memory, which allows the device to operate on a local memory bank - while the CPU still has coherent DMA to the same memory.”h]”hŒÝThe primary difference between a type-1 and type-2 device is the presence of host-managed device memory, which allows the device to operate on a local memory bank - while the CPU still has coherent DMA to the same memory.”…””}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KDhjeh²hubhÞ)”}”(hŒ½This allows things like GPUs to expose their memory via DAX devices or file descriptors, allows drivers and programs direct access to device memory rather than use block-transfer semantics.”h]”hŒ½This allows things like GPUs to expose their memory via DAX devices or file descriptors, allows drivers and programs direct access to device memory rather than use block-transfer semantics.”…””}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjeh²hubeh}”(h]”Œtype-2”ah ]”h"]”Œtype-2”ah$]”h&]”uh1hÈhj³h²hh³hÇh´K`.”h]”(hX(A Multi-Headed Single-Logical Device (MHSLD) exposes a single logical device to multiple heads which may be connected to one or more discrete hosts. An example of this would be a simple memory-pool which may be statically configured (prior to boot) to expose portions of its memory to Linux via ”…””}”(hj h²hh³Nh´Nubh)”}”(hŒ#:doc:`CEDT <../platform/acpi/cedt>`”h]”hŒinline”“”)”}”(hjh]”hŒCEDT”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ#driver-api/cxl/devices/device-types”Œ refdomain”j#Œreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ../platform/acpi/cedt”uh1hh³hÇh´Krhj ubhŒ.”…””}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Krhjùh²hubeh}”(h]”Œmhsld”ah ]”h"]”Œmhsld”ah$]”h&]”uh1hÈhj¢h²hh³hÇh´KqubhÉ)”}”(hhh]”(hÎ)”}”(hŒMHMLD”h]”hŒMHMLD”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjIh²hh³hÇh´KyubhÞ)”}”(hXA Multi-Headed Multi-Logical Device (MHMLD) exposes multiple logical devices to multiple heads which may be connected to one or more discrete hosts. An example of this would be a Dynamic Capacity Device or which may be configured at runtime to expose portions of its memory to Linux.”h]”hXA Multi-Headed Multi-Logical Device (MHMLD) exposes multiple logical devices to multiple heads which may be connected to one or more discrete hosts. An example of this would be a Dynamic Capacity Device or which may be configured at runtime to expose portions of its memory to Linux.”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KzhjIh²hubeh}”(h]”Œmhmld”ah ]”h"]”Œmhmld”ah$]”h&]”uh1hÈhj¢h²hh³hÇh´Kyubeh}”(h]”Œlogical-devices-and-heads”ah ]”h"]”Œlogical devices and heads”ah$]”h&]”uh1hÈhj³h²hh³hÇh´Kaubeh}”(h]”Œ device-types”ah ]”h"]”Œ device types”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K+ubhÉ)”}”(hhh]”(hÎ)”}”(hŒExample Devices”h]”hŒExample Devices”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj€h²hh³hÇh´K€ubhÉ)”}”(hhh]”(hÎ)”}”(hŒMemory Expander”h]”hŒMemory Expander”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‘h²hh³hÇh´KƒubhÞ)”}”(hŒ¹The simplest form of Type-3 device is a memory expander. A memory expander exposes Host-Managed Device Memory (HDM) to Linux. This memory may be Volatile or Non-Volatile (Persistent).”h]”hŒ¹The simplest form of Type-3 device is a memory expander. A memory expander exposes Host-Managed Device Memory (HDM) to Linux. This memory may be Volatile or Non-Volatile (Persistent).”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K„hj‘h²hubhÞ)”}”(hŒ»Memory Expanders will typically be considered a form of Single-Headed, Single-Logical Device - as its form factor will typically be an add-in-card (AIC) or some other similar form-factor.”h]”hŒ»Memory Expanders will typically be considered a form of Single-Headed, Single-Logical Device - as its form factor will typically be an add-in-card (AIC) or some other similar form-factor.”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kˆhj‘h²hubhÞ)”}”(hXThe Linux CXL driver provides support for static or dynamic configuration of basic memory expanders. The platform may program decoders prior to OS init (e.g. auto-decoders), or the user may program the fabric if the platform defers these operations to the OS.”h]”hXThe Linux CXL driver provides support for static or dynamic configuration of basic memory expanders. The platform may program decoders prior to OS init (e.g. auto-decoders), or the user may program the fabric if the platform defers these operations to the OS.”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŒhj‘h²hubhÞ)”}”(hXMultiple Memory Expanders may be added to an external chassis and exposed to a host via a head attached to a CXL switch. This is a "memory pool", and would be considered an MHSLD or MHMLD depending on the management capabilities provided by the switch platform.”h]”hX Multiple Memory Expanders may be added to an external chassis and exposed to a host via a head attached to a CXL switch. This is a “memory poolâ€, and would be considered an MHSLD or MHMLD depending on the management capabilities provided by the switch platform.”…””}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‘hj‘h²hubhÞ)”}”(hŒdAs of v6.14, Linux does not provide a formalized interface to manage non-DCD MHSLD or MHMLD devices.”h]”hŒdAs of v6.14, Linux does not provide a formalized interface to manage non-DCD MHSLD or MHMLD devices.”…””}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K–hj‘h²hubeh}”(h]”Œmemory-expander”ah ]”h"]”Œmemory expander”ah$]”h&]”uh1hÈhj€h²hh³hÇh´KƒubhÉ)”}”(hhh]”(hÎ)”}”(hŒDynamic Capacity Device (DCD)”h]”hŒDynamic Capacity Device (DCD)”…””}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjðh²hh³hÇh´KšubhÞ)”}”(hX0A Dynamic Capacity Device is a Type-3 device which provides dynamic management of memory capacity. The basic premise of a DCD to provide an allocator-like interface for physical memory capacity to a "Fabric Manager" (an external, privileged host with privileges to change configurations for other hosts).”h]”hX4A Dynamic Capacity Device is a Type-3 device which provides dynamic management of memory capacity. The basic premise of a DCD to provide an allocator-like interface for physical memory capacity to a “Fabric Manager†(an external, privileged host with privileges to change configurations for other hosts).”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kœhjðh²hubhÞ)”}”(hŒ”A DCD manages "Memory Extents", which may be volatile or persistent. Extents may also be exclusive to a single host or shared across multiple hosts.”h]”hŒ˜A DCD manages “Memory Extentsâ€, which may be volatile or persistent. Extents may also be exclusive to a single host or shared across multiple hosts.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¡hjðh²hubhÞ)”}”(hŒAs of v6.14, Linux does not provide a formalized interface to manage DCD devices, however there is active work on LKML targeting future release.”h]”hŒAs of v6.14, Linux does not provide a formalized interface to manage DCD devices, however there is active work on LKML targeting future release.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¤hjðh²hubeh}”(h]”Œdynamic-capacity-device-dcd”ah ]”h"]”Œdynamic capacity device (dcd)”ah$]”h&]”uh1hÈhj€h²hh³hÇh´Kšubeh}”(h]”Œexample-devices”ah ]”h"]”Œexample devices”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K€ubeh}”(h]”Œdevices-and-protocols”ah ]”h"]”Œdevices and protocols”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”jfŒ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”}”(j@j=j°j­j>j;jsjpj¨j¥j}jzjbj_jôjñjxjujŸjœjujrjFjCjmjjj8j5jíjêj0j-uŒ nametypes”}”(j@‰j°‰j>‰js‰j¨‰j}‰jb‰jô‰jx‰jŸ‰ju‰jF‰jm‰j8‰jí‰j0‰uh}”(j=hÊj­híj;j jpjAj¥jvjzj³j_jÄjñjejuj÷jœj{jrj¢jCjùjjjIj5j€jêj‘j-jð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.