€•Ä›Œ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/arch/riscv/vector”Œ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/arch/riscv/vector”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/arch/riscv/vector”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/arch/riscv/vector”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/arch/riscv/vector”Œ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/arch/riscv/vector”Œ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/arch/riscv/vector”Œ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³Œ?/var/lib/git/docbuild/linux/Documentation/arch/riscv/vector.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ)Vector Extension Support for RISC-V Linux”h]”hŒ)Vector Extension Support for RISC-V Linux”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ‡This document briefly outlines the interface provided to userspace by Linux in order to support the use of the RISC-V Vector Extension.”h]”hŒ‡This document briefly outlines the interface provided to userspace by Linux in order to support the use of the RISC-V Vector Extension.”…””}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ1. prctl() Interface”h]”hŒ1. prctl() Interface”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhíh²hh³hÇh´K ubhÞ)”}”(hXÈTwo new prctl() calls are added to allow programs to manage the enablement status for the use of Vector in userspace. The intended usage guideline for these interfaces is to give init systems a way to modify the availability of V for processes running under its domain. Calling these interfaces is not recommended in libraries routines because libraries should not override policies configured from the parent process. Also, users must note that these interfaces are not portable to non-Linux, nor non-RISC-V environments, so it is discourage to use in a portable code. To get the availability of V in an ELF program, please read :c:macro:`COMPAT_HWCAP_ISA_V` bit of :c:macro:`ELF_HWCAP` in the auxiliary vector.”h]”(hXvTwo new prctl() calls are added to allow programs to manage the enablement status for the use of Vector in userspace. The intended usage guideline for these interfaces is to give init systems a way to modify the availability of V for processes running under its domain. Calling these interfaces is not recommended in libraries routines because libraries should not override policies configured from the parent process. Also, users must note that these interfaces are not portable to non-Linux, nor non-RISC-V environments, so it is discourage to use in a portable code. To get the availability of V in an ELF program, please read ”…””}”(hhþh²hh³Nh´Nubh)”}”(hŒ:c:macro:`COMPAT_HWCAP_ISA_V`”h]”hŒliteral”“”)”}”(hjh]”hŒCOMPAT_HWCAP_ISA_V”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-macro”eh"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œarch/riscv/vector”Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”ŒCOMPAT_HWCAP_ISA_V”uh1hh³hÇh´K hhþubhŒ bit of ”…””}”(hhþh²hh³Nh´Nubh)”}”(hŒ:c:macro:`ELF_HWCAP`”h]”j )”}”(hj1h]”hŒ ELF_HWCAP”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)Œ ELF_HWCAP”uh1hh³hÇh´K hhþubhŒ in the auxiliary vector.”…””}”(hhþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhíh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hX€ prctl(PR_RISCV_V_SET_CONTROL, unsigned long arg) Sets the Vector enablement status of the calling thread, where the control argument consists of two 2-bit enablement statuses and a bit for inheritance mode. Other threads of the calling process are unaffected. Enablement status is a tri-state value each occupying 2-bit of space in the control argument: * :c:macro:`PR_RISCV_V_VSTATE_CTRL_DEFAULT`: Use the system-wide default enablement status on execve(). The system-wide default setting can be controlled via sysctl interface (see sysctl section below). * :c:macro:`PR_RISCV_V_VSTATE_CTRL_ON`: Allow Vector to be run for the thread. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_OFF`: Disallow Vector. Executing Vector instructions under such condition will trap and casuse the termination of the thread. arg: The control argument is a 5-bit value consisting of 3 parts, and accessed by 3 masks respectively. The 3 masks, PR_RISCV_V_VSTATE_CTRL_CUR_MASK, PR_RISCV_V_VSTATE_CTRL_NEXT_MASK, and PR_RISCV_V_VSTATE_CTRL_INHERIT represents bit[1:0], bit[3:2], and bit[4]. bit[1:0] accounts for the enablement status of current thread, and the setting at bit[3:2] takes place at next execve(). bit[4] defines the inheritance mode of the setting in bit[3:2]. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`: bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value. Return value: * 0 on success; * EINVAL: Vector not supported, invalid enablement status for current or next mask; * EPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread. On success: * A valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set. * Every successful call overwrites a previous setting for the calling thread. ”h]”(hÞ)”}”(hŒ0prctl(PR_RISCV_V_SET_CONTROL, unsigned long arg)”h]”hŒ0prctl(PR_RISCV_V_SET_CONTROL, unsigned long arg)”…””}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj_ubhŒ block_quote”“”)”}”(hXè Sets the Vector enablement status of the calling thread, where the control argument consists of two 2-bit enablement statuses and a bit for inheritance mode. Other threads of the calling process are unaffected. Enablement status is a tri-state value each occupying 2-bit of space in the control argument: * :c:macro:`PR_RISCV_V_VSTATE_CTRL_DEFAULT`: Use the system-wide default enablement status on execve(). The system-wide default setting can be controlled via sysctl interface (see sysctl section below). * :c:macro:`PR_RISCV_V_VSTATE_CTRL_ON`: Allow Vector to be run for the thread. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_OFF`: Disallow Vector. Executing Vector instructions under such condition will trap and casuse the termination of the thread. arg: The control argument is a 5-bit value consisting of 3 parts, and accessed by 3 masks respectively. The 3 masks, PR_RISCV_V_VSTATE_CTRL_CUR_MASK, PR_RISCV_V_VSTATE_CTRL_NEXT_MASK, and PR_RISCV_V_VSTATE_CTRL_INHERIT represents bit[1:0], bit[3:2], and bit[4]. bit[1:0] accounts for the enablement status of current thread, and the setting at bit[3:2] takes place at next execve(). bit[4] defines the inheritance mode of the setting in bit[3:2]. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`: bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value. Return value: * 0 on success; * EINVAL: Vector not supported, invalid enablement status for current or next mask; * EPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread. On success: * A valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set. * Every successful call overwrites a previous setting for the calling thread. ”h]”(hÞ)”}”(hŒÒSets the Vector enablement status of the calling thread, where the control argument consists of two 2-bit enablement statuses and a bit for inheritance mode. Other threads of the calling process are unaffected.”h]”hŒÒSets the Vector enablement status of the calling thread, where the control argument consists of two 2-bit enablement statuses and a bit for inheritance mode. Other threads of the calling process are unaffected.”…””}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjsubhÞ)”}”(hŒ]Enablement status is a tri-state value each occupying 2-bit of space in the control argument:”h]”hŒ]Enablement status is a tri-state value each occupying 2-bit of space in the control argument:”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjsubjY)”}”(hhh]”(j^)”}”(hŒÉ:c:macro:`PR_RISCV_V_VSTATE_CTRL_DEFAULT`: Use the system-wide default enablement status on execve(). The system-wide default setting can be controlled via sysctl interface (see sysctl section below). ”h]”hÞ)”}”(hŒÈ:c:macro:`PR_RISCV_V_VSTATE_CTRL_DEFAULT`: Use the system-wide default enablement status on execve(). The system-wide default setting can be controlled via sysctl interface (see sysctl section below).”h]”(h)”}”(hŒ):c:macro:`PR_RISCV_V_VSTATE_CTRL_DEFAULT`”h]”j )”}”(hj h]”hŒPR_RISCV_V_VSTATE_CTRL_DEFAULT”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hjžubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒPR_RISCV_V_VSTATE_CTRL_DEFAULT”uh1hh³hÇh´K!hjšubhŒŸ: Use the system-wide default enablement status on execve(). The system-wide default setting can be controlled via sysctl interface (see sysctl section below).”…””}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj“ubj^)”}”(hŒM:c:macro:`PR_RISCV_V_VSTATE_CTRL_ON`: Allow Vector to be run for the thread. ”h]”hÞ)”}”(hŒL:c:macro:`PR_RISCV_V_VSTATE_CTRL_ON`: Allow Vector to be run for the thread.”h]”(h)”}”(hŒ$:c:macro:`PR_RISCV_V_VSTATE_CTRL_ON`”h]”j )”}”(hj×h]”hŒPR_RISCV_V_VSTATE_CTRL_ON”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hjÕubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒPR_RISCV_V_VSTATE_CTRL_ON”uh1hh³hÇh´K%hjÑubhŒ(: Allow Vector to be run for the thread.”…””}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj“ubj^)”}”(hŒŸ:c:macro:`PR_RISCV_V_VSTATE_CTRL_OFF`: Disallow Vector. Executing Vector instructions under such condition will trap and casuse the termination of the thread. ”h]”hÞ)”}”(hŒž:c:macro:`PR_RISCV_V_VSTATE_CTRL_OFF`: Disallow Vector. Executing Vector instructions under such condition will trap and casuse the termination of the thread.”h]”(h)”}”(hŒ%:c:macro:`PR_RISCV_V_VSTATE_CTRL_OFF`”h]”j )”}”(hjh]”hŒPR_RISCV_V_VSTATE_CTRL_OFF”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒPR_RISCV_V_VSTATE_CTRL_OFF”uh1hh³hÇh´K(hjubhŒy: Disallow Vector. Executing Vector instructions under such condition will trap and casuse the termination of the thread.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jXh³hÇh´K!hjsubhÞ)”}”(hŒgarg: The control argument is a 5-bit value consisting of 3 parts, and accessed by 3 masks respectively.”h]”hŒgarg: The control argument is a 5-bit value consisting of 3 parts, and accessed by 3 masks respectively.”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjsubhÞ)”}”(hXVThe 3 masks, PR_RISCV_V_VSTATE_CTRL_CUR_MASK, PR_RISCV_V_VSTATE_CTRL_NEXT_MASK, and PR_RISCV_V_VSTATE_CTRL_INHERIT represents bit[1:0], bit[3:2], and bit[4]. bit[1:0] accounts for the enablement status of current thread, and the setting at bit[3:2] takes place at next execve(). bit[4] defines the inheritance mode of the setting in bit[3:2].”h]”hXVThe 3 masks, PR_RISCV_V_VSTATE_CTRL_CUR_MASK, PR_RISCV_V_VSTATE_CTRL_NEXT_MASK, and PR_RISCV_V_VSTATE_CTRL_INHERIT represents bit[1:0], bit[3:2], and bit[4]. bit[1:0] accounts for the enablement status of current thread, and the setting at bit[3:2] takes place at next execve(). bit[4] defines the inheritance mode of the setting in bit[3:2].”…””}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hjsubjr)”}”(hXm* :c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`: bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen. * :c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value. ”h]”jY)”}”(hhh]”(j^)”}”(hX·:c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status. ”h]”hÞ)”}”(hX¶:c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status.”h]”(h)”}”(hŒ*:c:macro:`PR_RISCV_V_VSTATE_CTRL_CUR_MASK`”h]”j )”}”(hjph]”hŒPR_RISCV_V_VSTATE_CTRL_CUR_MASK”…””}”(hjrh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hjnubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒPR_RISCV_V_VSTATE_CTRL_CUR_MASK”uh1hh³hÇh´K5hjjubhXŒ: bit[1:0]: Account for the Vector enablement status for the calling thread. The calling thread is not able to turn off Vector once it has been enabled. The prctl() call fails with EPERM if the value in this mask is PR_RISCV_V_VSTATE_CTRL_OFF but the current enablement status is not off. Setting PR_RISCV_V_VSTATE_CTRL_DEFAULT here takes no effect but to set back the original enablement status.”…””}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K5hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hjcubj^)”}”(hX8:c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`: bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen. ”h]”hÞ)”}”(hX7:c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`: bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen.”h]”(h)”}”(hŒ+:c:macro:`PR_RISCV_V_VSTATE_CTRL_NEXT_MASK`”h]”j )”}”(hj§h]”hŒ PR_RISCV_V_VSTATE_CTRL_NEXT_MASK”…””}”(hj©h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)Œ PR_RISCV_V_VSTATE_CTRL_NEXT_MASK”uh1hh³hÇh´K=hj¡ubhX : bit[3:2]: Account for the Vector enablement setting for the calling thread at the next execve() system call. If PR_RISCV_V_VSTATE_CTRL_DEFAULT is used in this mask, then the enablement status will be decided by the system-wide enablement status when execve() happen.”…””}”(hj¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hjcubj^)”}”(hXZ:c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value. ”h]”hÞ)”}”(hXY:c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value.”h]”(h)”}”(hŒ):c:macro:`PR_RISCV_V_VSTATE_CTRL_INHERIT`”h]”j )”}”(hjÞh]”hŒPR_RISCV_V_VSTATE_CTRL_INHERIT”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hjÜubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒPR_RISCV_V_VSTATE_CTRL_INHERIT”uh1hh³hÇh´KChjØubhX0: bit[4]: the inheritance mode for the setting at PR_RISCV_V_VSTATE_CTRL_NEXT_MASK. If the bit is set then the following execve() will not clear the setting in both PR_RISCV_V_VSTATE_CTRL_NEXT_MASK and PR_RISCV_V_VSTATE_CTRL_INHERIT. This setting persists across changes in the system-wide default value.”…””}”(hjØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KChjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hjcubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´K5hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÇh´K5hjsubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒãReturn value: * 0 on success; * EINVAL: Vector not supported, invalid enablement status for current or next mask; * EPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread. ”h]”(hŒterm”“”)”}”(hŒ Return value:”h]”hŒ Return value:”…””}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"h³hÇh´KNhjubhŒ definition”“”)”}”(hhh]”jY)”}”(hhh]”(j^)”}”(hŒ 0 on success;”h]”hÞ)”}”(hj<h]”hŒ 0 on success;”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KJhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj7ubj^)”}”(hŒQEINVAL: Vector not supported, invalid enablement status for current or next mask;”h]”hÞ)”}”(hŒQEINVAL: Vector not supported, invalid enablement status for current or next mask;”h]”hŒQEINVAL: Vector not supported, invalid enablement status for current or next mask;”…””}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KKhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj7ubj^)”}”(hŒkEPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread. ”h]”hÞ)”}”(hŒjEPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread.”h]”hŒjEPERM: Turning off Vector in PR_RISCV_V_VSTATE_CTRL_CUR_MASK if Vector was enabled for the calling thread.”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj7ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´KJhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KNhjubj)”}”(hXhOn success: * A valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set. * Every successful call overwrites a previous setting for the calling thread. ”h]”(j#)”}”(hŒ On success:”h]”hŒ On success:”…””}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"h³hÇh´KWhj“ubj3)”}”(hhh]”jY)”}”(hhh]”(j^)”}”(hXA valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set.”h]”hÞ)”}”(hXA valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set.”h]”hXA valid setting for PR_RISCV_V_VSTATE_CTRL_CUR_MASK takes place immediately. The enablement status specified in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK happens at the next execve() call, or all following execve() calls if PR_RISCV_V_VSTATE_CTRL_INHERIT bit is set.”…””}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj¨ubj^)”}”(hŒLEvery successful call overwrites a previous setting for the calling thread. ”h]”hÞ)”}”(hŒKEvery successful call overwrites a previous setting for the calling thread.”h]”hŒKEvery successful call overwrites a previous setting for the calling thread.”…””}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KVhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´KQhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KWhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÇh´Khj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]hjZh²hh³hÇh´Nubj^)”}”(hX½prctl(PR_RISCV_V_GET_CONTROL) Gets the same Vector enablement status for the calling thread. Setting for next execve() call and the inheritance bit are all OR-ed together. Note that ELF programs are able to get the availability of V for itself by reading :c:macro:`COMPAT_HWCAP_ISA_V` bit of :c:macro:`ELF_HWCAP` in the auxiliary vector. Return value: * a nonnegative value on success; * EINVAL: Vector not supported. ”h]”(hÞ)”}”(hŒprctl(PR_RISCV_V_GET_CONTROL)”h]”hŒprctl(PR_RISCV_V_GET_CONTROL)”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KYhjÿubjr)”}”(hXŽGets the same Vector enablement status for the calling thread. Setting for next execve() call and the inheritance bit are all OR-ed together. Note that ELF programs are able to get the availability of V for itself by reading :c:macro:`COMPAT_HWCAP_ISA_V` bit of :c:macro:`ELF_HWCAP` in the auxiliary vector. Return value: * a nonnegative value on success; * EINVAL: Vector not supported. ”h]”(hÞ)”}”(hŒGets the same Vector enablement status for the calling thread. Setting for next execve() call and the inheritance bit are all OR-ed together.”h]”hŒGets the same Vector enablement status for the calling thread. Setting for next execve() call and the inheritance bit are all OR-ed together.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hjubhÞ)”}”(hŒ¥Note that ELF programs are able to get the availability of V for itself by reading :c:macro:`COMPAT_HWCAP_ISA_V` bit of :c:macro:`ELF_HWCAP` in the auxiliary vector.”h]”(hŒSNote that ELF programs are able to get the availability of V for itself by reading ”…””}”(hj#h²hh³Nh´Nubh)”}”(hŒ:c:macro:`COMPAT_HWCAP_ISA_V`”h]”j )”}”(hj-h]”hŒCOMPAT_HWCAP_ISA_V”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hj+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)ŒCOMPAT_HWCAP_ISA_V”uh1hh³hÇh´K^hj#ubhŒ bit of ”…””}”(hj#h²hh³Nh´Nubh)”}”(hŒ:c:macro:`ELF_HWCAP`”h]”j )”}”(hjPh]”hŒ ELF_HWCAP”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-macro”eh"]”h$]”h&]”uh1j hjNubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j#Œ refdomain”jŒreftype”Œmacro”Œ refexplicit”‰Œrefwarn”‰j)Œ ELF_HWCAP”uh1hh³hÇh´K^hj#ubhŒ in the auxiliary vector.”…””}”(hj#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K^hjubj)”}”(hhh]”j)”}”(hŒPReturn value: * a nonnegative value on success; * EINVAL: Vector not supported. ”h]”(j#)”}”(hŒ Return value:”h]”hŒ Return value:”…””}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"h³hÇh´Kdhjzubj3)”}”(hhh]”jY)”}”(hhh]”(j^)”}”(hŒa nonnegative value on success;”h]”hÞ)”}”(hj”h]”hŒa nonnegative value on success;”…””}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kchj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hjubj^)”}”(hŒEINVAL: Vector not supported. ”h]”hÞ)”}”(hŒEINVAL: Vector not supported.”h]”hŒEINVAL: Vector not supported.”…””}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kdhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hjubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´KchjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kdhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÇh´K[hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]hjZh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´Khhíh²hubeh}”(h]”Œprctl-interface”ah ]”h"]”Œ1. prctl() interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ)2. System runtime configuration (sysctl)”h]”hŒ)2. System runtime configuration (sysctl)”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjóh²hh³hÇh´KgubhÞ)”}”(hŒõTo mitigate the ABI impact of expansion of the signal stack, a policy mechanism is provided to the administrators, distro maintainers, and developers to control the default Vector enablement status for userspace processes in form of sysctl knob:”h]”hŒõTo mitigate the ABI impact of expansion of the signal stack, a policy mechanism is provided to the administrators, distro maintainers, and developers to control the default Vector enablement status for userspace processes in form of sysctl knob:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kihjóh²hubjY)”}”(hhh]”j^)”}”(hXÌ/proc/sys/abi/riscv_v_default_allow Writing the text representation of 0 or 1 to this file sets the default system enablement status for new starting userspace programs. Valid values are: * 0: Do not allow Vector code to be executed as the default for new processes. * 1: Allow Vector code to be executed as the default for new processes. Reading this file returns the current system default enablement status. At every execve() call, a new enablement status of the new process is set to the system default, unless: * PR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or, * The setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Modifying the system default enablement status does not affect the enablement status of any existing process of thread that do not make an execve() call. ”h]”(hÞ)”}”(hŒ#/proc/sys/abi/riscv_v_default_allow”h]”hŒ#/proc/sys/abi/riscv_v_default_allow”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Knhjubjr)”}”(hX‰Writing the text representation of 0 or 1 to this file sets the default system enablement status for new starting userspace programs. Valid values are: * 0: Do not allow Vector code to be executed as the default for new processes. * 1: Allow Vector code to be executed as the default for new processes. Reading this file returns the current system default enablement status. At every execve() call, a new enablement status of the new process is set to the system default, unless: * PR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or, * The setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Modifying the system default enablement status does not affect the enablement status of any existing process of thread that do not make an execve() call. ”h]”(hÞ)”}”(hŒ—Writing the text representation of 0 or 1 to this file sets the default system enablement status for new starting userspace programs. Valid values are:”h]”hŒ—Writing the text representation of 0 or 1 to this file sets the default system enablement status for new starting userspace programs. Valid values are:”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphj'ubjY)”}”(hhh]”(j^)”}”(hŒL0: Do not allow Vector code to be executed as the default for new processes.”h]”hÞ)”}”(hj>h]”hŒL0: Do not allow Vector code to be executed as the default for new processes.”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kthj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj9ubj^)”}”(hŒF1: Allow Vector code to be executed as the default for new processes. ”h]”hÞ)”}”(hŒE1: Allow Vector code to be executed as the default for new processes.”h]”hŒE1: Allow Vector code to be executed as the default for new processes.”…””}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KuhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj9ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´Kthj'ubhÞ)”}”(hŒGReading this file returns the current system default enablement status.”h]”hŒGReading this file returns the current system default enablement status.”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kwhj'ubhÞ)”}”(hŒhAt every execve() call, a new enablement status of the new process is set to the system default, unless:”h]”hŒhAt every execve() call, a new enablement status of the new process is set to the system default, unless:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kyhj'ubjr)”}”(hX* PR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or, * The setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. ”h]”jY)”}”(hhh]”(j^)”}”(hŒžPR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or, ”h]”hÞ)”}”(hŒPR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or,”h]”hŒPR_RISCV_V_VSTATE_CTRL_INHERIT is set for the calling process, and the setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. Or,”…””}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj‘ubj^)”}”(hŒWThe setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT. ”h]”hÞ)”}”(hŒVThe setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT.”h]”hŒVThe setting in PR_RISCV_V_VSTATE_CTRL_NEXT_MASK is not PR_RISCV_V_VSTATE_CTRL_DEFAULT.”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K€hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j]hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´K|hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÇh´K|hj'ubhÞ)”}”(hŒ™Modifying the system default enablement status does not affect the enablement status of any existing process of thread that do not make an execve() call.”h]”hŒ™Modifying the system default enablement status does not affect the enablement status of any existing process of thread that do not make an execve() call.”…””}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kƒhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÇh´Kphjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]hjh²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jXh³hÇh´Knhjóh²hubeh}”(h]”Œ#system-runtime-configuration-sysctl”ah ]”h"]”Œ(2. system runtime configuration (sysctl)”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KgubhÉ)”}”(hhh]”(hÎ)”}”(hŒ-3. Vector Register State Across System Calls”h]”hŒ-3. Vector Register State Across System Calls”…””}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjøh²hh³hÇh´K‡ubhÞ)”}”(hŒcAs indicated by version 1.0 of the V extension [1], vector registers are clobbered by system calls.”h]”hŒcAs indicated by version 1.0 of the V extension [1], vector registers are clobbered by system calls.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‰hjøh²hubhÞ)”}”(hŒL1: https://github.com/riscv/riscv-v-spec/blob/master/calling-convention.adoc”h]”(hŒ1: ”…””}”(hjh²hh³Nh´NubhŒ reference”“”)”}”(hŒIhttps://github.com/riscv/riscv-v-spec/blob/master/calling-convention.adoc”h]”hŒIhttps://github.com/riscv/riscv-v-spec/blob/master/calling-convention.adoc”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j#uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŒhjøh²hubeh}”(h]”Œ)vector-register-state-across-system-calls”ah ]”h"]”Œ,3. vector register state across system calls”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K‡ubeh}”(h]”Œ)vector-extension-support-for-risc-v-linux”ah ]”h"]”Œ)vector extension support for risc-v linux”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”jiŒ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”}”(jCj@jðjíjõjòj;j8uŒ nametypes”}”(jC‰jð‰jõ‰j;‰uh}”(j@hÊjíhíjòjój8jø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.