Hj sphinx.addnodesdocument)}( rawsource children](translations
LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba
attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/virt/kvm/review-checklistmodnameN classnameNrefexplicitutagnamehhhubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/virt/kvm/review-checklistmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/virt/kvm/review-checklistmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/virt/kvm/review-checklistmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/virt/kvm/review-checklistmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/virt/kvm/review-checklistmodnameN classnameNrefexplicituh1hhhubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h
hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/virt/kvm/review-checklist.rsthKubhsection)}(hhh](htitle)}(h Review checklist for kvm patchesh]h Review checklist for kvm patches}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhenumerated_list)}(hhh](h list_item)}(hoThe patch must follow Documentation/process/coding-style.rst and
Documentation/process/submitting-patches.rst.
h]h paragraph)}(hnThe patch must follow Documentation/process/coding-style.rst and
Documentation/process/submitting-patches.rst.h]hnThe patch must follow Documentation/process/coding-style.rst and
Documentation/process/submitting-patches.rst.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(h;Patches should be against kvm.git master or next branches.
h]h)}(h:Patches should be against kvm.git master or next branches.h]h:Patches should be against kvm.git master or next branches.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK
hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hIf the patch introduces or modifies a new userspace API:
- the API must be documented in Documentation/virt/kvm/api.rst
- the API must be discoverable using KVM_CHECK_EXTENSION
h]h)}(hIf the patch introduces or modifies a new userspace API:
- the API must be documented in Documentation/virt/kvm/api.rst
- the API must be discoverable using KVM_CHECK_EXTENSIONh]hIf the patch introduces or modifies a new userspace API:
- the API must be documented in Documentation/virt/kvm/api.rst
- the API must be discoverable using KVM_CHECK_EXTENSION}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(h1New state must include support for save/restore.
h]h)}(h0New state must include support for save/restore.h]h0New state must include support for save/restore.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hNew features must default to off (userspace should explicitly request them).
Performance improvements can and should default to on.
h]h)}(hNew features must default to off (userspace should explicitly request them).
Performance improvements can and should default to on.h]hNew features must default to off (userspace should explicitly request them).
Performance improvements can and should default to on.}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2 ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hmNew cpu features should be exposed via KVM_GET_SUPPORTED_CPUID2,
or its equivalent for non-x86 architectures
h]h)}(hlNew cpu features should be exposed via KVM_GET_SUPPORTED_CPUID2,
or its equivalent for non-x86 architecturesh]hlNew cpu features should be exposed via KVM_GET_SUPPORTED_CPUID2,
or its equivalent for non-x86 architectures}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJ ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(h,The feature should be testable (see below).
h]h)}(h+The feature should be testable (see below).h]h+The feature should be testable (see below).}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjb ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(h|Changes should be vendor neutral when possible. Changes to common code
are better than duplicating changes to vendor code.
h]h)}(h{Changes should be vendor neutral when possible. Changes to common code
are better than duplicating changes to vendor code.h]h{Changes should be vendor neutral when possible. Changes to common code
are better than duplicating changes to vendor code.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hPSimilarly, prefer changes to arch independent code than to arch dependent
code.
h]h)}(hOSimilarly, prefer changes to arch independent code than to arch dependent
code.h]hOSimilarly, prefer changes to arch independent code than to arch dependent
code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hUser/kernel interfaces and guest/host interfaces must be 64-bit clean
(all variables and sizes naturally aligned on 64-bit; use specific types
only - u64 rather than ulong).
h]h)}(hUser/kernel interfaces and guest/host interfaces must be 64-bit clean
(all variables and sizes naturally aligned on 64-bit; use specific types
only - u64 rather than ulong).h]hUser/kernel interfaces and guest/host interfaces must be 64-bit clean
(all variables and sizes naturally aligned on 64-bit; use specific types
only - u64 rather than ulong).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hnNew guest visible features must either be documented in a hardware manual
or be accompanied by documentation.
h]h)}(hmNew guest visible features must either be documented in a hardware manual
or be accompanied by documentation.h]hmNew guest visible features must either be documented in a hardware manual
or be accompanied by documentation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hj ubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1hhhhhhhhKubh)}(hhh](h)}(hTesting of KVM codeh]hTesting of KVM code}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK(ubh)}(hAll features contributed to KVM, and in many cases bugfixes too, should be
accompanied by some kind of tests and/or enablement in open source guests
and VMMs. KVM is covered by multiple test suites:h]hAll features contributed to KVM, and in many cases bugfixes too, should be
accompanied by some kind of tests and/or enablement in open source guests
and VMMs. KVM is covered by multiple test suites:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj hhubhdefinition_list)}(hhh](hdefinition_list_item)}(hX8 *Selftests*
These are low level tests that allow granular testing of kernel APIs.
This includes API failure scenarios, invoking APIs after specific
guest instructions, and testing multiple calls to ``KVM_CREATE_VM``
within a single test. They are included in the kernel tree at
``tools/testing/selftests/kvm``.
h](hterm)}(h*Selftests*h]hemphasis)}(hj h]h Selftests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hhhK3hj ubh
definition)}(hhh]h)}(hX+ These are low level tests that allow granular testing of kernel APIs.
This includes API failure scenarios, invoking APIs after specific
guest instructions, and testing multiple calls to ``KVM_CREATE_VM``
within a single test. They are included in the kernel tree at
``tools/testing/selftests/kvm``.h](hThese are low level tests that allow granular testing of kernel APIs.
This includes API failure scenarios, invoking APIs after specific
guest instructions, and testing multiple calls to }(hj/ hhhNhNubhliteral)}(h``KVM_CREATE_VM``h]h
KVM_CREATE_VM}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj/ ubh@
within a single test. They are included in the kernel tree at
}(hj/ hhhNhNubj8 )}(h``tools/testing/selftests/kvm``h]htools/testing/selftests/kvm}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj/ ubh.}(hj/ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK/hj, ubah}(h]h ]h"]h$]h&]uh1j* hj ubeh}(h]h ]h"]h$]h&]uh1j hhhK3hj ubj
)}(hX` ``kvm-unit-tests``
A collection of small guests that test CPU and emulated device features
from a guest's perspective. They run under QEMU or ``kvmtool``, and
are generally not KVM-specific: they can be run with any accelerator
that QEMU support or even on bare metal, making it possible to compare
behavior across hypervisors and processor families.
h](j )}(h``kvm-unit-tests``h]j8 )}(hju h]hkvm-unit-tests}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hjs ubah}(h]h ]h"]h$]h&]uh1j hhhK:hjo ubj+ )}(hhh]h)}(hXL A collection of small guests that test CPU and emulated device features
from a guest's perspective. They run under QEMU or ``kvmtool``, and
are generally not KVM-specific: they can be run with any accelerator
that QEMU support or even on bare metal, making it possible to compare
behavior across hypervisors and processor families.h](h~A collection of small guests that test CPU and emulated device features
from a guest’s perspective. They run under QEMU or }(hj hhhNhNubj8 )}(h``kvmtool``h]hkvmtool}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh, and
are generally not KVM-specific: they can be run with any accelerator
that QEMU support or even on bare metal, making it possible to compare
behavior across hypervisors and processor families.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hj ubah}(h]h ]h"]h$]h&]uh1j* hjo ubeh}(h]h ]h"]h$]h&]uh1j hhhK:hj hhubj
)}(hFunctional test suites
Various sets of functional tests exist, such as QEMU's ``tests/functional``
suite and `avocado-vt `__.
These typically involve running a full operating system in a virtual
machine.
h](j )}(hFunctional test suitesh]hFunctional test suites}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK@hj ubj+ )}(hhh]h)}(hVarious sets of functional tests exist, such as QEMU's ``tests/functional``
suite and `avocado-vt `__.
These typically involve running a full operating system in a virtual
machine.h](h9Various sets of functional tests exist, such as QEMU’s }(hj hhhNhNubj8 )}(h``tests/functional``h]htests/functional}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh
suite and }(hj hhhNhNubh reference)}(h=`avocado-vt `__h]h
avocado-vt}(hj hhhNhNubah}(h]h ]h"]h$]h&]name
avocado-vtrefuri,https://avocado-vt.readthedocs.io/en/latest/uh1j hj ubhO.
These typically involve running a full operating system in a virtual
machine.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hj ubah}(h]h ]h"]h$]h&]uh1j* hj ubeh}(h]h ]h"]h$]h&]uh1j hhhK@hj hhubeh}(h]h ]h"]h$]h&]uh1j hj hhhhhNubh)}(hsThe best testing approach depends on the feature's complexity and
operation. Here are some examples and guidelines:h]huThe best testing approach depends on the feature’s complexity and
operation. Here are some examples and guidelines:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhj hhubj )}(hhh](j
)}(hXr New instructions (no new registers or APIs)
The corresponding CPU features (if applicable) should be made available
in QEMU. If the instructions require emulation support or other code in
KVM, it is worth adding coverage to ``kvm-unit-tests`` or selftests;
the latter can be a better choice if the instructions relate to an API
that already has good selftest coverage.
h](j )}(h+New instructions (no new registers or APIs)h]h+New instructions (no new registers or APIs)}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKJhj) ubj+ )}(hhh]h)}(hXE The corresponding CPU features (if applicable) should be made available
in QEMU. If the instructions require emulation support or other code in
KVM, it is worth adding coverage to ``kvm-unit-tests`` or selftests;
the latter can be a better choice if the instructions relate to an API
that already has good selftest coverage.h](hThe corresponding CPU features (if applicable) should be made available
in QEMU. If the instructions require emulation support or other code in
KVM, it is worth adding coverage to }(hj> hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj> ubh~ or selftests;
the latter can be a better choice if the instructions relate to an API
that already has good selftest coverage.}(hj> hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKFhj; ubah}(h]h ]h"]h$]h&]uh1j* hj) ubeh}(h]h ]h"]h$]h&]uh1j hhhKJhj& ubj
)}(hX6 New hardware features (new registers, no new APIs)
These should be tested via ``kvm-unit-tests``; this more or less implies
supporting them in QEMU and/or ``kvmtool``. In some cases selftests
can be used instead, similar to the previous case, or specifically to
test corner cases in guest state save/restore.
h](j )}(h2New hardware features (new registers, no new APIs)h]h2New hardware features (new registers, no new APIs)}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKPhjj ubj+ )}(hhh]h)}(hX These should be tested via ``kvm-unit-tests``; this more or less implies
supporting them in QEMU and/or ``kvmtool``. In some cases selftests
can be used instead, similar to the previous case, or specifically to
test corner cases in guest state save/restore.h](hThese should be tested via }(hj hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh;; this more or less implies
supporting them in QEMU and/or }(hj hhhNhNubj8 )}(h``kvmtool``h]hkvmtool}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh. In some cases selftests
can be used instead, similar to the previous case, or specifically to
test corner cases in guest state save/restore.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhj| ubah}(h]h ]h"]h$]h&]uh1j* hjj ubeh}(h]h ]h"]h$]h&]uh1j hhhKPhj& hhubj
)}(hX Bug fixes and performance improvements
These usually do not introduce new APIs, but it's worth sharing
any benchmarks and tests that will validate your contribution,
ideally in the form of regression tests. Tests and benchmarks
can be included in either ``kvm-unit-tests`` or selftests, depending
on the specifics of your change. Selftests are especially useful for
regression tests because they are included directly in Linux's tree.
h](j )}(h&Bug fixes and performance improvementsh]h&Bug fixes and performance improvements}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKXhj ubj+ )}(hhh]h)}(hX These usually do not introduce new APIs, but it's worth sharing
any benchmarks and tests that will validate your contribution,
ideally in the form of regression tests. Tests and benchmarks
can be included in either ``kvm-unit-tests`` or selftests, depending
on the specifics of your change. Selftests are especially useful for
regression tests because they are included directly in Linux's tree.h](hThese usually do not introduce new APIs, but it’s worth sharing
any benchmarks and tests that will validate your contribution,
ideally in the form of regression tests. Tests and benchmarks
can be included in either }(hj hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh or selftests, depending
on the specifics of your change. Selftests are especially useful for
regression tests because they are included directly in Linux’s tree.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKShj ubah}(h]h ]h"]h$]h&]uh1j* hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKXhj& hhubj
)}(hXk Large scale internal changes
While it's difficult to provide a single policy, you should ensure that
the changed code is covered by either ``kvm-unit-tests`` or selftests.
In some cases the affected code is run for any guests and functional
tests suffice. Explain your testing process in the cover letter,
as that can help identify gaps in existing test suites.
h](j )}(hLarge scale internal changesh]hLarge scale internal changes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK_hj ubj+ )}(hhh]h)}(hXM While it's difficult to provide a single policy, you should ensure that
the changed code is covered by either ``kvm-unit-tests`` or selftests.
In some cases the affected code is run for any guests and functional
tests suffice. Explain your testing process in the cover letter,
as that can help identify gaps in existing test suites.h](hpWhile it’s difficult to provide a single policy, you should ensure that
the changed code is covered by either }(hj hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh or selftests.
In some cases the affected code is run for any guests and functional
tests suffice. Explain your testing process in the cover letter,
as that can help identify gaps in existing test suites.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK[hj ubah}(h]h ]h"]h$]h&]uh1j* hj ubeh}(h]h ]h"]h$]h&]uh1j hhhK_hj& hhubj
)}(hX New APIs
It is important to demonstrate your use case. This can be as simple as
explaining that the feature is already in use on bare metal, or it can be
a proof-of-concept implementation in userspace. The latter need not be
open source, though that is of course preferrable for easier testing.
Selftests should test corner cases of the APIs, and should also cover
basic host and guest operation if no open source VMM uses the feature.
h](j )}(hNew APIsh]hNew APIs}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKghj? ubj+ )}(hhh]h)}(hX It is important to demonstrate your use case. This can be as simple as
explaining that the feature is already in use on bare metal, or it can be
a proof-of-concept implementation in userspace. The latter need not be
open source, though that is of course preferrable for easier testing.
Selftests should test corner cases of the APIs, and should also cover
basic host and guest operation if no open source VMM uses the feature.h]hX It is important to demonstrate your use case. This can be as simple as
explaining that the feature is already in use on bare metal, or it can be
a proof-of-concept implementation in userspace. The latter need not be
open source, though that is of course preferrable for easier testing.
Selftests should test corner cases of the APIs, and should also cover
basic host and guest operation if no open source VMM uses the feature.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjQ ubah}(h]h ]h"]h$]h&]uh1j* hj? ubeh}(h]h ]h"]h$]h&]uh1j hhhKghj& hhubj
)}(hX Bigger features, usually spanning host and guest
These should be supported by Linux guests, with limited exceptions for
Hyper-V features that are testable on Windows guests. It is strongly
suggested that the feature be usable with an open source host VMM, such
as at least one of QEMU or crosvm, and guest firmware. Selftests should
test at least API error cases. Guest operation can be covered by
either selftests of ``kvm-unit-tests`` (this is especially important for
paravirtualized and Windows-only features). Strong selftest coverage
can also be a replacement for implementation in an open source VMM,
but this is generally not recommended.
h](j )}(h0Bigger features, usually spanning host and guesth]h0Bigger features, usually spanning host and guest}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKrhjn ubj+ )}(hhh]h)}(hXY These should be supported by Linux guests, with limited exceptions for
Hyper-V features that are testable on Windows guests. It is strongly
suggested that the feature be usable with an open source host VMM, such
as at least one of QEMU or crosvm, and guest firmware. Selftests should
test at least API error cases. Guest operation can be covered by
either selftests of ``kvm-unit-tests`` (this is especially important for
paravirtualized and Windows-only features). Strong selftest coverage
can also be a replacement for implementation in an open source VMM,
but this is generally not recommended.h](hXt These should be supported by Linux guests, with limited exceptions for
Hyper-V features that are testable on Windows guests. It is strongly
suggested that the feature be usable with an open source host VMM, such
as at least one of QEMU or crosvm, and guest firmware. Selftests should
test at least API error cases. Guest operation can be covered by
either selftests of }(hj hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh (this is especially important for
paravirtualized and Windows-only features). Strong selftest coverage
can also be a replacement for implementation in an open source VMM,
but this is generally not recommended.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhj ubah}(h]h ]h"]h$]h&]uh1j* hjn ubeh}(h]h ]h"]h$]h&]uh1j hhhKrhj& hhubeh}(h]h ]h"]h$]h&]uh1j hj hhhhhNubh)}(hX Following the above suggestions for testing in selftests and
``kvm-unit-tests`` will make it easier for the maintainers to review
and accept your code. In fact, even before you contribute your changes
upstream it will make it easier for you to develop for KVM.h](h=Following the above suggestions for testing in selftests and
}(hj hhhNhNubj8 )}(h``kvm-unit-tests``h]hkvm-unit-tests}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7 hj ubh will make it easier for the maintainers to review
and accept your code. In fact, even before you contribute your changes
upstream it will make it easier for you to develop for KVM.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthj hhubh)}(hOf course, the KVM maintainers reserve the right to require more tests,
though they may also waive the requirement from time to time.h]hOf course, the KVM maintainers reserve the right to require more tests,
though they may also waive the requirement from time to time.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhj hhubeh}(h]testing-of-kvm-codeah ]h"]testing of kvm codeah$]h&]uh1hhhhhhhhK(ubeh}(h] review-checklist-for-kvm-patchesah ]h"] review checklist for kvm patchesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceNcurrent_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampNsource_linkN
source_urlN
toc_backlinksentryfootnote_backlinksK
sectnum_xformKstrip_commentsNstrip_elements_with_classesN
strip_classesNreport_levelK
halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace
language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid
dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh_destinationN
_config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabledraw_enabledKline_length_limitM'pep_referencesNpep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesNrfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlongsmart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform
docinfo_xformKsectsubtitle_xform
image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j j j u nametypes}(j j uh}(j hj j u
footnote_refs}
citation_refs}
autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK
id_countercollectionsCounter}Rparse_messages]transform_messages]transformerNinclude_log]
decorationNhhub.