€•ÁèŒ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/virt/kvm/devices/vcpu”Œ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/virt/kvm/devices/vcpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/virt/kvm/devices/vcpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/virt/kvm/devices/vcpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/virt/kvm/devices/vcpu”Œ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/virt/kvm/devices/vcpu”Œ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/virt/kvm/devices/vcpu”Œ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³ŒC/var/lib/git/docbuild/linux/Documentation/virt/kvm/devices/vcpu.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒGeneric vcpu interface”h]”hŒGeneric vcpu interface”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒåThe virtual cpu "device" also accepts the ioctls KVM_SET_DEVICE_ATTR, KVM_GET_DEVICE_ATTR, and KVM_HAS_DEVICE_ATTR. The interface uses the same struct kvm_device_attr as other devices, but targets VCPU-wide settings and controls.”h]”hŒéThe virtual cpu “deviceâ€� also accepts the ioctls KVM_SET_DEVICE_ATTR, KVM_GET_DEVICE_ATTR, and KVM_HAS_DEVICE_ATTR. The interface uses the same struct kvm_device_attr as other devices, but targets VCPU-wide settings and controls.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒMThe groups and attributes per virtual cpu, if any, are architecture specific.”h]”hŒMThe groups and attributes per virtual cpu, if any, are architecture specific.”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"1. GROUP: KVM_ARM_VCPU_PMU_V3_CTRL”h]”hŒ"1. GROUP: KVM_ARM_VCPU_PMU_V3_CTRL”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhûh²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒ Architectures”h]”hŒ Architectures”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh³hÇh´KubhŒ field_body”“”)�”}”(hŒARM64 ”h]”hÞ)�”}”(hŒARM64”h]”hŒARM64”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hhûh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ'1.1. ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_IRQ”h]”hŒ'1.1. ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_IRQ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjLh²hh³hÇh´Kubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`h³hÇh´Kubj')�”}”(hŒVin kvm_device_attr.addr the address for PMU overflow interrupt is a pointer to an int ”h]”hÞ)�”}”(hŒUin kvm_device_attr.addr the address for PMU overflow interrupt is a pointer to an int”h]”hŒUin kvm_device_attr.addr the address for PMU overflow interrupt is a pointer to an int”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khj]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLh²hh³hÇh´KubhÞ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjLh²hubhŒ block_quote”“”)�”}”(hX======= ======================================================== -EBUSY The PMU overflow interrupt is already set -EFAULT Error reading interrupt number -ENXIO PMUv3 not supported or the overflow interrupt not set when attempting to get it -ENODEV KVM_ARM_VCPU_PMU_V3 feature missing from VCPU -EINVAL Invalid PMU overflow interrupt number supplied or trying to set the IRQ number without using an in-kernel irqchip. ======= ======================================================== ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hj°ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K8uh1j³hj°ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÐubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ)The PMU overflow interrupt is already set”h]”hŒ)The PMU overflow interrupt is already set”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒError reading interrupt number”h]”hŒError reading interrupt number”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj@ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒOPMUv3 not supported or the overflow interrupt not set when attempting to get it”h]”hŒOPMUv3 not supported or the overflow interrupt not set when attempting to get it”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjwubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ-KVM_ARM_VCPU_PMU_V3 feature missing from VCPU”h]”hŒ-KVM_ARM_VCPU_PMU_V3 feature missing from VCPU”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒrInvalid PMU overflow interrupt number supplied or trying to set the IRQ number without using an in-kernel irqchip.”h]”hŒrInvalid PMU overflow interrupt number supplied or trying to set the IRQ number without using an in-kernel irqchip.”…”�”}”(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&]”uh1jÎhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´KhjLh²hubhÞ)�”}”(hX-A value describing the PMUv3 (Performance Monitor Unit v3) overflow interrupt number for this vcpu. This interrupt could be a PPI or SPI, but the interrupt type must be same for each vcpu. As a PPI, the interrupt number is the same for all vcpus, while as an SPI it must be a separate number per vcpu.”h]”hX-A value describing the PMUv3 (Performance Monitor Unit v3) overflow interrupt number for this vcpu. This interrupt could be a PPI or SPI, but the interrupt type must be same for each vcpu. As a PPI, the interrupt number is the same for all vcpus, while as an SPI it must be a separate number per vcpu.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjLh²hubhÞ)�”}”(hŒÍFor GICv5-based guests, the architected PPI (23) must be used, and must be communicated as the full GICv5-style Interrupt ID, i.e., 0x20000017. This ioctl can be omitted altogether for a GICv5-based guest.”h]”hŒÍFor GICv5-based guests, the architected PPI (23) must be used, and must be communicated as the full GICv5-style Interrupt ID, i.e., 0x20000017. This ioctl can be omitted altogether for a GICv5-based guest.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjLh²hubeh}”(h]”Œ!attribute-kvm-arm-vcpu-pmu-v3-irq”ah ]”h"]”Œ'1.1. attribute: kvm_arm_vcpu_pmu_v3_irq”ah$]”h&]”uh1hÈhhûh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ'1.2 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_INIT”h]”hŒ'1.2 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_INIT”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj"h²hh³hÇh´K/ubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6h³hÇh´Kubj')�”}”(hŒ0no additional parameter in kvm_device_attr.addr ”h]”hÞ)�”}”(hŒ/no additional parameter in kvm_device_attr.addr”h]”hŒ/no additional parameter in kvm_device_attr.addr”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K1hj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj"h²hh³hÇh´K1ubhÞ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj"h²hubj¤)�”}”(hX�======= ====================================================== -EEXIST Interrupt number already used -ENODEV PMUv3 not supported or GIC not initialized -ENXIO PMUv3 not supported, missing VCPU feature, missing hardware PMU, or interrupt number not set (non-GICv5 guests, only) -EBUSY PMUv3 already initialized ======= ====================================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hj€ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K6uh1j³hj€ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EEXIST”h]”hŒ-EEXIST”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjšubjÔ)�”}”(hhh]”hÞ)�”}”(hŒInterrupt number already used”h]”hŒInterrupt number already used”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj—ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÑubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ*PMUv3 not supported or GIC not initialized”h]”hŒ*PMUv3 not supported or GIC not initialized”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj—ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjubjÔ)�”}”(hhh]”hÞ)�”}”(hŒuPMUv3 not supported, missing VCPU feature, missing hardware PMU, or interrupt number not set (non-GICv5 guests, only)”h]”hŒuPMUv3 not supported, missing VCPU feature, missing hardware PMU, or interrupt number not set (non-GICv5 guests, only)”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj—ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj?ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒPMUv3 already initialized”h]”hŒPMUv3 already initialized”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj€ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´K5hj"h²hubhÞ)�”}”(hŒ¦Request the initialization of the PMUv3. If using the PMUv3 with an in-kernel virtual GIC implementation, this must be done after initializing the in-kernel irqchip.”h]”hŒ¦Request the initialization of the PMUv3. If using the PMUv3 with an in-kernel virtual GIC implementation, this must be done after initializing the in-kernel irqchip.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K>hj"h²hubhÞ)�”}”(hŒmWhen the KVM_ARM_VCPU_PMU_V3_STRICT vCPU feature is enabled this must be done after selecting a hardware PMU.”h]”hŒmWhen the KVM_ARM_VCPU_PMU_V3_STRICT vCPU feature is enabled this must be done after selecting a hardware PMU.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KBhj"h²hubeh}”(h]”Œ"attribute-kvm-arm-vcpu-pmu-v3-init”ah ]”h"]”Œ'1.2 attribute: kvm_arm_vcpu_pmu_v3_init”ah$]”h&]”uh1hÈhhûh²hh³hÇh´K/ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ)1.3 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_FILTER”h]”hŒ)1.3 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_FILTER”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj³h²hh³hÇh´KFubj )�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇh³hÇh´Kubj')�”}”(hŒiin kvm_device_attr.addr the address for a PMU event filter is a pointer to a struct kvm_pmu_event_filter ”h]”hÞ)�”}”(hŒhin kvm_device_attr.addr the address for a PMU event filter is a pointer to a struct kvm_pmu_event_filter”h]”hŒhin kvm_device_attr.addr the address for a PMU event filter is a pointer to a struct kvm_pmu_event_filter”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KHhjÄh²hubj)�”}”(hhh]”(j)�”}”(hŒReturns”h]”hŒReturns”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh³hÇh´Kubj')�”}”(hX�======= ====================================================== -ENODEV PMUv3 not supported or GIC not initialized -ENXIO PMUv3 not properly configured or in-kernel irqchip not configured as required prior to calling this attribute -EBUSY PMUv3 already initialized or a VCPU has already run -EINVAL Invalid filter range ======= ====================================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hjubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K6uh1j³hjubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KNhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj(ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ*PMUv3 not supported or GIC not initialized”h]”hŒ*PMUv3 not supported or GIC not initialized”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KNhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj%ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj_ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒmPMUv3 not properly configured or in-kernel irqchip not configured as required prior to calling this attribute”h]”hŒmPMUv3 not properly configured or in-kernel irqchip not configured as required prior to calling this attribute”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj%ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj–ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ3PMUv3 already initialized or a VCPU has already run”h]”hŒ3PMUv3 already initialized or a VCPU has already run”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj%ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KRhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÍubjÔ)�”}”(hhh]”hÞ)�”}”(hŒInvalid filter range”h]”hŒInvalid filter range”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KRhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KKhjÄh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj³h²hh³hÇh´KHubhÞ)�”}”(hŒERequest the installation of a PMU event filter described as follows::”h]”hŒDRequest the installation of a PMU event filter described as follows:”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KUhj³h²hubhŒ literal_block”“”)�”}”(hŒÓstruct kvm_pmu_event_filter { __u16 base_event; __u16 nevents; #define KVM_PMU_EVENT_ALLOW 0 #define KVM_PMU_EVENT_DENY 1 __u8 action; __u8 pad[3]; };”h]”hŒÓstruct kvm_pmu_event_filter { __u16 base_event; __u16 nevents; #define KVM_PMU_EVENT_ALLOW 0 #define KVM_PMU_EVENT_DENY 1 __u8 action; __u8 pad[3]; };”…”�”}”hj9sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j7h³hÇh´KWhj³h²hubhÞ)�”}”(hX»A filter range is defined as the range [@base_event, @base_event + @nevents), together with an @action (KVM_PMU_EVENT_ALLOW or KVM_PMU_EVENT_DENY). The first registered range defines the global policy (global ALLOW if the first @action is DENY, global DENY if the first @action is ALLOW). Multiple ranges can be programmed, and must fit within the event space defined by the PMU architecture (10 bits on ARMv8.0, 16 bits from ARMv8.1 onwards).”h]”hX»A filter range is defined as the range [@base_event, @base_event + @nevents), together with an @action (KVM_PMU_EVENT_ALLOW or KVM_PMU_EVENT_DENY). The first registered range defines the global policy (global ALLOW if the first @action is DENY, global DENY if the first @action is ALLOW). Multiple ranges can be programmed, and must fit within the event space defined by the PMU architecture (10 bits on ARMv8.0, 16 bits from ARMv8.1 onwards).”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kbhj³h²hubhÞ)�”}”(hX"Note: "Cancelling" a filter by registering the opposite action for the same range doesn't change the default action. For example, installing an ALLOW filter for event range [0:10) as the first filter and then applying a DENY action for the same range will leave the whole range as disabled.”h]”hX(Note: “Cancellingâ€� a filter by registering the opposite action for the same range doesn’t change the default action. For example, installing an ALLOW filter for event range [0:10) as the first filter and then applying a DENY action for the same range will leave the whole range as disabled.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kihj³h²hubhÞ)�”}”(hŒúRestrictions: Event 0 (SW_INCR) is never filtered, as it doesn't count a hardware event. Filtering event 0x1E (CHAIN) has no effect either, as it isn't strictly speaking an event. Filtering the cycle counter is possible using event 0x11 (CPU_CYCLES).”h]”hŒþRestrictions: Event 0 (SW_INCR) is never filtered, as it doesn’t count a hardware event. Filtering event 0x1E (CHAIN) has no effect either, as it isn’t strictly speaking an event. Filtering the cycle counter is possible using event 0x11 (CPU_CYCLES).”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Knhj³h²hubhÞ)�”}”(hŒmWhen the KVM_ARM_VCPU_PMU_V3_STRICT vCPU feature is enabled this must be done after selecting a hardware PMU.”h]”hŒmWhen the KVM_ARM_VCPU_PMU_V3_STRICT vCPU feature is enabled this must be done after selecting a hardware PMU.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kshj³h²hubeh}”(h]”Œ$attribute-kvm-arm-vcpu-pmu-v3-filter”ah ]”h"]”Œ)1.3 attribute: kvm_arm_vcpu_pmu_v3_filter”ah$]”h&]”uh1hÈhhûh²hh³hÇh´KFubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ*1.4 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_SET_PMU”h]”hŒ*1.4 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_SET_PMU”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‡h²hh³hÇh´Kwubj )�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›h³hÇh´Kubj')�”}”(hŒOin kvm_device_attr.addr the address to an int representing the PMU identifier. ”h]”hÞ)�”}”(hŒNin kvm_device_attr.addr the address to an int representing the PMU identifier.”h]”hŒNin kvm_device_attr.addr the address to an int representing the PMU identifier.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kyhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kyhj˜h²hubj)�”}”(hhh]”(j)�”}”(hŒReturns”h]”hŒReturns”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊh³hÇh´Kubj')�”}”(hX‚======= ==================================================== -EBUSY PMUv3 already initialized, a VCPU has already run or an event filter has already been set -EFAULT Error accessing the PMU identifier -ENXIO PMU not found -ENODEV PMUv3 not supported or GIC not initialized -ENOMEM Could not allocate memory ======= ==================================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hjâubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1j³hjâubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjüubjÔ)�”}”(hhh]”hÞ)�”}”(hŒYPMUv3 already initialized, a VCPU has already run or an event filter has already been set”h]”hŒYPMUv3 already initialized, a VCPU has already run or an event filter has already been set”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjùubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj3ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ"Error accessing the PMU identifier”h]”hŒ"Error accessing the PMU identifier”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjùubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‚hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjjubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ PMU not found”h]”hŒ PMU not found”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‚hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjùubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ*PMUv3 not supported or GIC not initialized”h]”hŒ*PMUv3 not supported or GIC not initialized”…”�”}”(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&]”uh1jÎhjùubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENOMEM”h]”hŒ-ENOMEM”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒCould not allocate memory”h]”hŒCould not allocate memory”…”�”}”(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&]”uh1jÎhjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjâubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K|hj˜h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‡h²hh³hÇh´KyubhÞ)�”}”(hXRequest that the VCPU uses the specified hardware PMU when creating guest events for the purpose of PMU emulation. The PMU identifier can be read from the "type" file for the desired PMU instance under /sys/devices (or, equivalent, /sys/bus/even_source). This attribute is particularly useful on heterogeneous systems where there are at least two CPU PMUs on the system. The PMU that is set for one VCPU will be used by all the other VCPUs. It isn't possible to set a PMU if a PMU event filter is already present.”h]”hXRequest that the VCPU uses the specified hardware PMU when creating guest events for the purpose of PMU emulation. The PMU identifier can be read from the “typeâ€� file for the desired PMU instance under /sys/devices (or, equivalent, /sys/bus/even_source). This attribute is particularly useful on heterogeneous systems where there are at least two CPU PMUs on the system. The PMU that is set for one VCPU will be used by all the other VCPUs. It isn’t possible to set a PMU if a PMU event filter is already present.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‡hj‡h²hubhÞ)�”}”(hXÝNote that KVM will not make any attempts to run the VCPU on the physical CPUs associated with the PMU specified by this attribute. This is entirely left to userspace. However, attempting to run the VCPU on a physical CPU not supported by the PMU will fail and KVM_RUN will return with exit_reason = KVM_EXIT_FAIL_ENTRY and populate the fail_entry struct by setting hardare_entry_failure_reason field to KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED and the cpu field to the processor id.”h]”hXÝNote that KVM will not make any attempts to run the VCPU on the physical CPUs associated with the PMU specified by this attribute. This is entirely left to userspace. However, attempting to run the VCPU on a physical CPU not supported by the PMU will fail and KVM_RUN will return with exit_reason = KVM_EXIT_FAIL_ENTRY and populate the fail_entry struct by setting hardare_entry_failure_reason field to KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED and the cpu field to the processor id.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hj‡h²hubeh}”(h]”Œ%attribute-kvm-arm-vcpu-pmu-v3-set-pmu”ah ]”h"]”Œ*1.4 attribute: kvm_arm_vcpu_pmu_v3_set_pmu”ah$]”h&]”uh1hÈhhûh²hh³hÇh´KwubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ21.5 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_SET_NR_COUNTERS”h]”hŒ21.5 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_SET_NR_COUNTERS”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjXh²hh³hÇh´K˜ubj )�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlh³hÇh´Kubj')�”}”(hŒjin kvm_device_attr.addr the address to an unsigned int representing the maximum value taken by PMCR_EL0.N ”h]”hÞ)�”}”(hŒiin kvm_device_attr.addr the address to an unsigned int representing the maximum value taken by PMCR_EL0.N”h]”hŒiin kvm_device_attr.addr the address to an unsigned int representing the maximum value taken by PMCR_EL0.N”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kšhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kšhjih²hubj)�”}”(hhh]”(j)�”}”(hŒReturns”h]”hŒReturns”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›h³hÇh´Kubj')�”}”(hX�======= ==================================================== -EBUSY PMUv3 already initialized, a VCPU has already run or an event filter has already been set -EFAULT Error accessing the value pointed to by addr -ENODEV PMUv3 not supported or GIC not initialized -EINVAL No PMUv3 explicitly selected, or value of N out of range ======= ==================================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hj³ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1j³hj³ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒYPMUv3 already initialized, a VCPU has already run or an event filter has already been set”h]”hŒYPMUv3 already initialized, a VCPU has already run or an event filter has already been set”…”�”}”(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&]”uh1jÎhjÊubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ,Error accessing the value pointed to by addr”h]”hŒ,Error accessing the value pointed to by addr”…”�”}”(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&]”uh1jÎhjÊubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K£hj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj; ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ*PMUv3 not supported or GIC not initialized”h]”hŒ*PMUv3 not supported or GIC not initialized”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K£hjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÊubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¤hju ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjr ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ8No PMUv3 explicitly selected, or value of N out of range”h]”hŒ8No PMUv3 explicitly selected, or value of N out of range”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¤hjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj³ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hjih²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjXh²hh³hÇh´KšubhÞ)�”}”(hXQSet the number of implemented event counters in the virtual PMU. This mandates that a PMU has explicitly been selected via KVM_ARM_VCPU_PMU_V3_SET_PMU, and will fail when no PMU has been explicitly selected, or the number of counters is out of range for the selected PMU. Selecting a new PMU cancels the effect of setting this attribute.”h]”hXQSet the number of implemented event counters in the virtual PMU. This mandates that a PMU has explicitly been selected via KVM_ARM_VCPU_PMU_V3_SET_PMU, and will fail when no PMU has been explicitly selected, or the number of counters is out of range for the selected PMU. Selecting a new PMU cancels the effect of setting this attribute.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¨hjXh²hubeh}”(h]”Œ-attribute-kvm-arm-vcpu-pmu-v3-set-nr-counters”ah ]”h"]”Œ21.5 attribute: kvm_arm_vcpu_pmu_v3_set_nr_counters”ah$]”h&]”uh1hÈhhûh²hh³hÇh´K˜ubeh}”(h]”Œgroup-kvm-arm-vcpu-pmu-v3-ctrl”ah ]”h"]”Œ"1. group: kvm_arm_vcpu_pmu_v3_ctrl”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ!2. GROUP: KVM_ARM_VCPU_TIMER_CTRL”h]”hŒ!2. GROUP: KVM_ARM_VCPU_TIMER_CTRL”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjì h²hh³hÇh´K°ubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Architectures”h]”hŒ Architectures”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h³hÇh´Kubj')�”}”(hŒARM64 ”h]”hÞ)�”}”(hŒARM64”h]”hŒARM64”…”�”}”(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&]”uh1jh³hÇh´K²hjý h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjì h²hh³hÇh´K²ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒG2.1. ATTRIBUTES: KVM_ARM_VCPU_TIMER_IRQ_{VTIMER,PTIMER,HVTIMER,HPTIMER}”h]”hŒG2.1. ATTRIBUTES: KVM_ARM_VCPU_TIMER_IRQ_{VTIMER,PTIMER,HVTIMER,HPTIMER}”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj5 h²hh³hÇh´Kµubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjI h³hÇh´Kubj')�”}”(hŒSin kvm_device_attr.addr the address for the timer interrupt is a pointer to an int ”h]”hÞ)�”}”(hŒRin kvm_device_attr.addr the address for the timer interrupt is a pointer to an int”h]”hŒRin kvm_device_attr.addr the address for the timer interrupt is a pointer to an int”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K·hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjI ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K·hjF h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj5 h²hh³hÇh´K·ubhÞ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kºhj5 h²hubj¤)�”}”(hŒ©======= ================================= -EINVAL Invalid timer interrupt number -EBUSY One or more VCPUs has already run ======= ================================= ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hj“ ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K!uh1j³hj“ ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒInvalid timer interrupt number”h]”hŒInvalid timer interrupt number”…”�”}”(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&]”uh1jÎhjª ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ!One or more VCPUs has already run”h]”hŒ!One or more VCPUs has already run”…”�”}”(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&]”uh1jÎhjª ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj“ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´K¼hj5 h²hubhÞ)�”}”(hŒÏA value describing the architected timer interrupt number when connected to an in-kernel virtual GIC. These must be a PPI (16 <= intid < 32). Setting the attribute overrides the default values (see below).”h]”hŒÏA value describing the architected timer interrupt number when connected to an in-kernel virtual GIC. These must be a PPI (16 <= intid < 32). Setting the attribute overrides the default values (see below).”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÁhj5 h²hubjª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hjE ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K*uh1j³hjE ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒKVM_ARM_VCPU_TIMER_IRQ_VTIMER”h]”hŒKVM_ARM_VCPU_TIMER_IRQ_VTIMER”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj_ ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ)The EL1 virtual timer intid (default: 27)”h]”hŒ)The EL1 virtual timer intid (default: 27)”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj_ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj\ ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒKVM_ARM_VCPU_TIMER_IRQ_PTIMER”h]”hŒKVM_ARM_VCPU_TIMER_IRQ_PTIMER”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ*The EL1 physical timer intid (default: 30)”h]”hŒ*The EL1 physical timer intid (default: 30)”…”�”}”(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&]”uh1jÎhj\ ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒKVM_ARM_VCPU_TIMER_IRQ_HVTIMER”h]”hŒKVM_ARM_VCPU_TIMER_IRQ_HVTIMER”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ)The EL2 virtual timer intid (default: 28)”h]”hŒ)The EL2 virtual timer intid (default: 28)”…”�”}”(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&]”uh1jÎhj\ ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒKVM_ARM_VCPU_TIMER_IRQ_HPTIMER”h]”hŒKVM_ARM_VCPU_TIMER_IRQ_HPTIMER”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ*The EL2 physical timer intid (default: 26)”h]”hŒ*The EL2 physical timer intid (default: 26)”…”�”}”(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&]”uh1jÎhj\ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjE ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj5 h²hh³hÇh´NubhÞ)�”}”(hXˆSetting the same PPI for different timers will prevent the VCPUs from running. Setting the interrupt number on a VCPU configures all VCPUs created at that time to use the number provided for a given timer, overwriting any previously configured values on other VCPUs. Userspace should configure the interrupt numbers on at least one VCPU after creating all VCPUs and before running any VCPUs.”h]”hXˆSetting the same PPI for different timers will prevent the VCPUs from running. Setting the interrupt number on a VCPU configures all VCPUs created at that time to use the number provided for a given timer, overwriting any previously configured values on other VCPUs. Userspace should configure the interrupt numbers on at least one VCPU after creating all VCPUs and before running any VCPUs.”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÌhj5 h²hubhŒtarget”“”)�”}”(hŒ.. _kvm_arm_vcpu_pvtime_ctrl:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œkvm-arm-vcpu-pvtime-ctrl”uh1j\ h´KÓhj5 h²hh³hÇubeh}”(h]”Œ?attributes-kvm-arm-vcpu-timer-irq-vtimer-ptimer-hvtimer-hptimer”ah ]”h"]”ŒG2.1. attributes: kvm_arm_vcpu_timer_irq_{vtimer,ptimer,hvtimer,hptimer}”ah$]”h&]”uh1hÈhjì h²hh³hÇh´Kµubeh}”(h]”Œgroup-kvm-arm-vcpu-timer-ctrl”ah ]”h"]”Œ!2. group: kvm_arm_vcpu_timer_ctrl”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K°ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL”h]”hŒ"3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjz h²hh³hÇh´KÖubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Architectures”h]”hŒ Architectures”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ h³hÇh´Kubj')�”}”(hŒARM64 ”h]”hÞ)�”}”(hŒARM64”h]”hŒARM64”…”�”}”(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&]”uh1jh³hÇh´KØhj‹ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjz h²hh³hÇh´KØubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ&3.1 ATTRIBUTE: KVM_ARM_VCPU_PVTIME_IPA”h]”hŒ&3.1 ATTRIBUTE: KVM_ARM_VCPU_PVTIME_IPA”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjà h²hh³hÇh´KÛubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj× h³hÇh´Kubj')�”}”(hŒ64-bit base address ”h]”hÞ)�”}”(hŒ64-bit base address”h]”hŒ64-bit base address”…”�”}”(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&]”uh1jh³hÇh´KÝhjÔ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjà h²hh³hÇh´KÝubhÞ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kßhjà h²hubj¤)�”}”(hŒß======= ====================================== -ENXIO Stolen time not implemented -EEXIST Base address already set for this VCPU -EINVAL Base address not 64 byte aligned ======= ====================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hj! ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K&uh1j³hj! ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kâhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj; ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒStolen time not implemented”h]”hŒStolen time not implemented”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KâhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj8 ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EEXIST”h]”hŒ-EEXIST”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjr ubjÔ)�”}”(hhh]”hÞ)�”}”(hŒ&Base address already set for this VCPU”h]”hŒ&Base address already set for this VCPU”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KãhjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj8 ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ Base address not 64 byte aligned”h]”hŒ Base address not 64 byte aligned”…”�”}”(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&]”uh1jÎhj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj! ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´Káhjà h²hubhÞ)�”}”(hXSpecifies the base address of the stolen time structure for this VCPU. The base address must be 64 byte aligned and exist within a valid guest memory region. See Documentation/virt/kvm/arm/pvtime.rst for more information including the layout of the stolen time structure.”h]”hXSpecifies the base address of the stolen time structure for this VCPU. The base address must be 64 byte aligned and exist within a valid guest memory region. See Documentation/virt/kvm/arm/pvtime.rst for more information including the layout of the stolen time structure.”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kçhjà h²hubeh}”(h]”Œ!attribute-kvm-arm-vcpu-pvtime-ipa”ah ]”h"]”Œ&3.1 attribute: kvm_arm_vcpu_pvtime_ipa”ah$]”h&]”uh1hÈhjz h²hh³hÇh´KÛubeh}”(h]”(Œgroup-kvm-arm-vcpu-pvtime-ctrl”ji eh ]”h"]”(Œ"3. group: kvm_arm_vcpu_pvtime_ctrl”Œkvm_arm_vcpu_pvtime_ctrl”eh$]”h&]”uh1hÈhhÊh²hh³hÇh´KÖŒexpect_referenced_by_name”}”jj^ sŒexpect_referenced_by_id”}”ji j^ subhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ4. GROUP: KVM_VCPU_TSC_CTRL”h]”hŒ4. GROUP: KVM_VCPU_TSC_CTRL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´Kíubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Architectures”h]”hŒ Architectures”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0h³hÇh´Kubj')�”}”(hŒx86 ”h]”hÞ)�”}”(hŒx86”h]”hŒx86”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KïhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kïhj-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjh²hh³hÇh´KïubhÞ)�”}”(hŒ"4.1 ATTRIBUTE: KVM_VCPU_TSC_OFFSET”h]”hŒ"4.1 ATTRIBUTE: KVM_VCPU_TSC_OFFSET”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kñhjh²hubj )�”}”(hhh]”j)�”}”(hhh]”(j)�”}”(hŒ Parameters”h]”hŒ Parameters”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvh³hÇh´Kubj')�”}”(hŒ64-bit unsigned TSC offset ”h]”hÞ)�”}”(hŒ64-bit unsigned TSC offset”h]”hŒ64-bit unsigned TSC offset”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kóhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kóhjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjh²hh³hÇh´KóubhÞ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kõhjh²hubj¤)�”}”(hŒÄ======= ====================================== -EFAULT Error reading/writing the provided parameter address. -ENXIO Attribute not supported ======= ====================================== ”h]”jª)�”}”(hhh]”j¯)�”}”(hhh]”(j´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j³hjÀubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K&uh1j³hjÀubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(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Ô)�”}”(hhh]”hÞ)�”}”(hŒ5Error reading/writing the provided parameter address.”h]”hŒ5Error reading/writing the provided parameter address.”…”�”}”(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&]”uh1jÎhj×ubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hÞ)�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kúhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjubjÔ)�”}”(hhh]”hÞ)�”}”(hŒAttribute not supported”h]”hŒAttribute not supported”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kúhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÀubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´K÷hjh²hubhÞ)�”}”(hŒwSpecifies the guest's TSC offset relative to the host's TSC. The guest's TSC is then derived by the following equation:”h]”hŒ}Specifies the guest’s TSC offset relative to the host’s TSC. The guest’s TSC is then derived by the following equation:”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kýhjh²hubj¤)�”}”(hŒ+guest_tsc = host_tsc + KVM_VCPU_TSC_OFFSET ”h]”hÞ)�”}”(hŒ*guest_tsc = host_tsc + KVM_VCPU_TSC_OFFSET”h]”hŒ*guest_tsc = host_tsc + KVM_VCPU_TSC_OFFSET”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÇh´Mhjh²hubhÞ)�”}”(hŒËThis attribute is useful to adjust the guest's TSC on live migration, so that the TSC counts the time during which the VM was paused. The following describes a possible algorithm to use for this purpose.”h]”hŒÍThis attribute is useful to adjust the guest’s TSC on live migration, so that the TSC counts the time during which the VM was paused. The following describes a possible algorithm to use for this purpose.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjh²hubhÞ)�”}”(hŒFrom the source VMM process:”h]”hŒFrom the source VMM process:”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjh²hubhŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ“Invoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_src), kvmclock nanoseconds (guest_src), and host CLOCK_REALTIME nanoseconds (host_src). ”h]”hÞ)�”}”(hŒ’Invoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_src), kvmclock nanoseconds (guest_src), and host CLOCK_REALTIME nanoseconds (host_src).”h]”hŒ’Invoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_src), kvmclock nanoseconds (guest_src), and host CLOCK_REALTIME nanoseconds (host_src).”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒcRead the KVM_VCPU_TSC_OFFSET attribute for every vCPU to record the guest TSC offset (ofs_src[i]). ”h]”hÞ)�”}”(hŒbRead the KVM_VCPU_TSC_OFFSET attribute for every vCPU to record the guest TSC offset (ofs_src[i]).”h]”hŒbRead the KVM_VCPU_TSC_OFFSET attribute for every vCPU to record the guest TSC offset (ofs_src[i]).”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒTInvoke the KVM_GET_TSC_KHZ ioctl to record the frequency of the guest's TSC (freq). ”h]”hÞ)�”}”(hŒSInvoke the KVM_GET_TSC_KHZ ioctl to record the frequency of the guest's TSC (freq).”h]”hŒUInvoke the KVM_GET_TSC_KHZ ioctl to record the frequency of the guest’s TSC (freq).”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j£hjh²hh³hÇh´MubhÞ)�”}”(hŒ!From the destination VMM process:”h]”hŒ!From the destination VMM process:”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjh²hubj¤)�”}”(hhh]”(j©)�”}”(hX=Invoke the KVM_SET_CLOCK ioctl, providing the source nanoseconds from kvmclock (guest_src) and CLOCK_REALTIME (host_src) in their respective fields. Ensure that the KVM_CLOCK_REALTIME flag is set in the provided structure. KVM will advance the VM's kvmclock to account for elapsed time since recording the clock values. Note that this will cause problems in the guest (e.g., timeouts) unless CLOCK_REALTIME is synchronized between the source and destination, and a reasonably short time passes between the source pausing the VMs and the destination executing steps 4-7. ”h]”(hÞ)�”}”(hŒßInvoke the KVM_SET_CLOCK ioctl, providing the source nanoseconds from kvmclock (guest_src) and CLOCK_REALTIME (host_src) in their respective fields. Ensure that the KVM_CLOCK_REALTIME flag is set in the provided structure.”h]”hŒßInvoke the KVM_SET_CLOCK ioctl, providing the source nanoseconds from kvmclock (guest_src) and CLOCK_REALTIME (host_src) in their respective fields. Ensure that the KVM_CLOCK_REALTIME flag is set in the provided structure.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjubhÞ)�”}”(hX[KVM will advance the VM's kvmclock to account for elapsed time since recording the clock values. Note that this will cause problems in the guest (e.g., timeouts) unless CLOCK_REALTIME is synchronized between the source and destination, and a reasonably short time passes between the source pausing the VMs and the destination executing steps 4-7.”h]”hX]KVM will advance the VM’s kvmclock to account for elapsed time since recording the clock values. Note that this will cause problems in the guest (e.g., timeouts) unless CLOCK_REALTIME is synchronized between the source and destination, and a reasonably short time passes between the source pausing the VMs and the destination executing steps 4-7.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj h²hh³hÇh´Nubj©)�”}”(hŒhInvoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_dest) and kvmclock nanoseconds (guest_dest). ”h]”hÞ)�”}”(hŒgInvoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_dest) and kvmclock nanoseconds (guest_dest).”h]”hŒgInvoke the KVM_GET_CLOCK ioctl to record the host TSC (tsc_dest) and kvmclock nanoseconds (guest_dest).”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj h²hh³hÇh´Nubj©)�”}”(hX¼Adjust the guest TSC offsets for every vCPU to account for (1) time elapsed since recording state and (2) difference in TSCs between the source and destination machine: ofs_dst[i] = ofs_src[i] - (guest_src - guest_dest) * freq + (tsc_src - tsc_dest) ("ofs[i] + tsc - guest * freq" is the guest TSC value corresponding to a time of 0 in kvmclock. The above formula ensures that it is the same on the destination as it was on the source). ”h]”(hÞ)�”}”(hŒ¨Adjust the guest TSC offsets for every vCPU to account for (1) time elapsed since recording state and (2) difference in TSCs between the source and destination machine:”h]”hŒ¨Adjust the guest TSC offsets for every vCPU to account for (1) time elapsed since recording state and (2) difference in TSCs between the source and destination machine:”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M#hjLubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒQofs_dst[i] = ofs_src[i] - (guest_src - guest_dest) * freq + (tsc_src - tsc_dest) ”h]”(hŒterm”“”)�”}”(hŒofs_dst[i] = ofs_src[i] -”h]”hŒofs_dst[i] = ofs_src[i] -”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jih³hÇh´M)hjeubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒ6(guest_src - guest_dest) * freq + (tsc_src - tsc_dest)”h]”hŒ6(guest_src - guest_dest) * freq + (tsc_src - tsc_dest)”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M(hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jch³hÇh´M)hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjLubhÞ)�”}”(hŒ»("ofs[i] + tsc - guest * freq" is the guest TSC value corresponding to a time of 0 in kvmclock. The above formula ensures that it is the same on the destination as it was on the source).”h]”hŒ¿(“ofs[i] + tsc - guest * freqâ€� is the guest TSC value corresponding to a time of 0 in kvmclock. The above formula ensures that it is the same on the destination as it was on the source).”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M+hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj h²hh³hÇh´Nubj©)�”}”(hŒnWrite the KVM_VCPU_TSC_OFFSET attribute for every vCPU with the respective value derived in the previous step.”h]”hÞ)�”}”(hŒnWrite the KVM_VCPU_TSC_OFFSET attribute for every vCPU with the respective value derived in the previous step.”h]”hŒnWrite the KVM_VCPU_TSC_OFFSET attribute for every vCPU with the respective value derived in the previous step.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M/hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jøjùjúhjûjüŒstart”Kuh1j£hjh²hh³hÇh´Mubeh}”(h]”Œgroup-kvm-vcpu-tsc-ctrl”ah ]”h"]”Œ4. group: kvm_vcpu_tsc_ctrl”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kíubeh}”(h]”Œgeneric-vcpu-interface”ah ]”h"]”Œgeneric vcpu interface”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”jÓŒ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”}”ji ]”j^ asŒnameids”}”(jÞjÛjé jæ jjj°j­j„j�jUjRjá jÞ jw jt jo jl jji jjj j jÖjÓuŒ nametypes”}”(jÞ‰jé ‰j‰j°‰j„‰jU‰já ‰jw ‰jo ‰jˆj‰j ‰jÖ‰uh}”(jÛhÊjæ hûjjLj­j"j�j³jRj‡jÞ jXjt jì jl j5 ji jz jjz j jà jÓjuŒ 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”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hŒ:Enumerated list start value not ordinal-1: "4" (ordinal 4)”h]”hŒ>Enumerated list start value not ordinal-1: “4â€� (ordinal 4)”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjhubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jfhjh²hh³hÇh´MubaŒtransform_messages”]”jg)�”}”(hhh]”hÞ)�”}”(hhh]”hŒ>Hyperlink target "kvm-arm-vcpu-pvtime-ctrl" is not referenced.”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj†ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j�Œsource”hÇŒline”KÓuh1jfubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.