€•¬áŒ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/xive”Œ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/xive”Œ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/xive”Œ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/xive”Œ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/xive”Œ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/xive”Œ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/xive”Œ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/xive.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ;POWER9 eXternal Interrupt Virtualization Engine (XIVE Gen1)”h]”hŒ;POWER9 eXternal Interrupt Virtualization Engine (XIVE Gen1)”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ^Device types supported: - KVM_DEV_TYPE_XIVE POWER9 XIVE Interrupt Controller generation 1 ”h]”(hŒterm”“”)�”}”(hŒDevice types supported:”h]”hŒDevice types supported:”…”�”}”(hhêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´KhhäubhŒ definition”“”)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒDKVM_DEV_TYPE_XIVE POWER9 XIVE Interrupt Controller generation 1 ”h]”hŒ paragraph”“”)�”}”(hŒCKVM_DEV_TYPE_XIVE POWER9 XIVE Interrupt Controller generation 1”h]”hŒCKVM_DEV_TYPE_XIVE POWER9 XIVE Interrupt Controller generation 1”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hýh³hÇh´Khhúubah}”(h]”h ]”h"]”h$]”h&]”uh1høhhäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´Khhßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÊh²hh³Nh´Nubj )�”}”(hŒ«This device acts as a VM interrupt controller. It provides the KVM interface to configure the interrupt sources of a VM in the underlying POWER9 XIVE interrupt controller.”h]”hŒ«This device acts as a VM interrupt controller. It provides the KVM interface to configure the interrupt sources of a VM in the underlying POWER9 XIVE interrupt controller.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K hhÊh²hubj )�”}”(hXOnly one XIVE instance may be instantiated. A guest XIVE device requires a POWER9 host and the guest OS should have support for the XIVE native exploitation interrupt mode. If not, it should run using the legacy interrupt mode, referred as XICS (POWER7/8).”h]”hXOnly one XIVE instance may be instantiated. A guest XIVE device requires a POWER9 host and the guest OS should have support for the XIVE native exploitation interrupt mode. If not, it should run using the legacy interrupt mode, referred as XICS (POWER7/8).”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhhÊh²hubhþ)�”}”(hhh]”(j)�”}”(hX‘Device Mappings The KVM device exposes different MMIO ranges of the XIVE HW which are required for interrupt management. These are exposed to the guest in VMAs populated with a custom VM fault handler. 1. Thread Interrupt Management Area (TIMA) Each thread has an associated Thread Interrupt Management context composed of a set of registers. These registers let the thread handle priority management and interrupt acknowledgment. The most important are : - Interrupt Pending Buffer (IPB) - Current Processor Priority (CPPR) - Notification Source Register (NSR) They are exposed to software in four different pages each proposing a view with a different privilege. The first page is for the physical thread context and the second for the hypervisor. Only the third (operating system) and the fourth (user level) are exposed the guest. 2. Event State Buffer (ESB) Each source is associated with an Event State Buffer (ESB) with either a pair of even/odd pair of pages which provides commands to manage the source: to trigger, to EOI, to turn off the source for instance. 3. Device pass-through When a device is passed-through into the guest, the source interrupts are from a different HW controller (PHB4) and the ESB pages exposed to the guest should accommodate this change. The passthru_irq helpers, kvmppc_xive_set_mapped() and kvmppc_xive_clr_mapped() are called when the device HW irqs are mapped into or unmapped from the guest IRQ number space. The KVM device extends these helpers to clear the ESB pages of the guest IRQ number being mapped and then lets the VM fault handler repopulate. The handler will insert the ESB page corresponding to the HW interrupt of the device being passed-through or the initial IPI ESB page if the device has being removed. The ESB remapping is fully transparent to the guest and the OS device driver. All handling is done within VFIO and the above helpers in KVM-PPC. ”h]”(j )�”}”(hŒDevice Mappings”h]”hŒDevice Mappings”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjWubj )�”}”(hŒ¹The KVM device exposes different MMIO ranges of the XIVE HW which are required for interrupt management. These are exposed to the guest in VMAs populated with a custom VM fault handler.”h]”hŒ¹The KVM device exposes different MMIO ranges of the XIVE HW which are required for interrupt management. These are exposed to the guest in VMAs populated with a custom VM fault handler.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjWubhŒenumerated_list”“”)�”}”(hhh]”j)�”}”(hŒ(Thread Interrupt Management Area (TIMA) ”h]”j )�”}”(hŒ'Thread Interrupt Management Area (TIMA)”h]”hŒ'Thread Interrupt Management Area (TIMA)”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jwhjWubj )�”}”(hŒÒEach thread has an associated Thread Interrupt Management context composed of a set of registers. These registers let the thread handle priority management and interrupt acknowledgment. The most important are :”h]”hŒÒEach thread has an associated Thread Interrupt Management context composed of a set of registers. These registers let the thread handle priority management and interrupt acknowledgment. The most important are :”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjWubhŒ block_quote”“”)�”}”(hŒp- Interrupt Pending Buffer (IPB) - Current Processor Priority (CPPR) - Notification Source Register (NSR) ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ"Interrupt Pending Buffer (IPB)”h]”j )�”}”(hj¸h]”hŒ"Interrupt Pending Buffer (IPB)”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubj)�”}”(hŒ#Current Processor Priority (CPPR)”h]”j )�”}”(hjÏh]”hŒ#Current Processor Priority (CPPR)”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K!hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubj)�”}”(hŒ#Notification Source Register (NSR) ”h]”j )�”}”(hŒ"Notification Source Register (NSR)”h]”hŒ"Notification Source Register (NSR)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K"hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubeh}”(h]”h ]”h"]”h$]”h&]”j$j%uh1hýh³hÇh´K hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´K hjWubj )�”}”(hXThey are exposed to software in four different pages each proposing a view with a different privilege. The first page is for the physical thread context and the second for the hypervisor. Only the third (operating system) and the fourth (user level) are exposed the guest.”h]”hXThey are exposed to software in four different pages each proposing a view with a different privilege. The first page is for the physical thread context and the second for the hypervisor. Only the third (operating system) and the fourth (user level) are exposed the guest.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K$hjWubjx)�”}”(hhh]”j)�”}”(hŒEvent State Buffer (ESB) ”h]”j )�”}”(hŒEvent State Buffer (ESB)”h]”hŒEvent State Buffer (ESB)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K*hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžŒstart”Kuh1jwhjWubj )�”}”(hŒÎEach source is associated with an Event State Buffer (ESB) with either a pair of even/odd pair of pages which provides commands to manage the source: to trigger, to EOI, to turn off the source for instance.”h]”hŒÎEach source is associated with an Event State Buffer (ESB) with either a pair of even/odd pair of pages which provides commands to manage the source: to trigger, to EOI, to turn off the source for instance.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K,hjWubjx)�”}”(hhh]”j)�”}”(hŒDevice pass-through ”h]”j )�”}”(hŒDevice pass-through”h]”hŒDevice pass-through”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K1hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžj7Kuh1jwhjWubj )�”}”(hŒ¶When a device is passed-through into the guest, the source interrupts are from a different HW controller (PHB4) and the ESB pages exposed to the guest should accommodate this change.”h]”hŒ¶When a device is passed-through into the guest, the source interrupts are from a different HW controller (PHB4) and the ESB pages exposed to the guest should accommodate this change.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K3hjWubj )�”}”(hXæThe passthru_irq helpers, kvmppc_xive_set_mapped() and kvmppc_xive_clr_mapped() are called when the device HW irqs are mapped into or unmapped from the guest IRQ number space. The KVM device extends these helpers to clear the ESB pages of the guest IRQ number being mapped and then lets the VM fault handler repopulate. The handler will insert the ESB page corresponding to the HW interrupt of the device being passed-through or the initial IPI ESB page if the device has being removed.”h]”hXæThe passthru_irq helpers, kvmppc_xive_set_mapped() and kvmppc_xive_clr_mapped() are called when the device HW irqs are mapped into or unmapped from the guest IRQ number space. The KVM device extends these helpers to clear the ESB pages of the guest IRQ number being mapped and then lets the VM fault handler repopulate. The handler will insert the ESB page corresponding to the HW interrupt of the device being passed-through or the initial IPI ESB page if the device has being removed.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K7hjWubj )�”}”(hŒ�The ESB remapping is fully transparent to the guest and the OS device driver. All handling is done within VFIO and the above helpers in KVM-PPC.”h]”hŒ�The ESB remapping is fully transparent to the guest and the OS device driver. All handling is done within VFIO and the above helpers in KVM-PPC.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K@hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjTh²hh³hÇh´Nubj)�”}”(hŒGroups: ”h]”j )�”}”(hŒGroups:”h]”hŒGroups:”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KDhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j$Œ*”uh1hýh³hÇh´KhhÊh²hubjx)�”}”(hhh]”j)�”}”(hŒ?KVM_DEV_XIVE_GRP_CTRL Provides global controls on the device ”h]”hÞ)�”}”(hhh]”hã)�”}”(hŒ=KVM_DEV_XIVE_GRP_CTRL Provides global controls on the device ”h]”(hé)�”}”(hŒKVM_DEV_XIVE_GRP_CTRL”h]”hŒKVM_DEV_XIVE_GRP_CTRL”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´KGhjÀubhù)�”}”(hhh]”j )�”}”(hŒ&Provides global controls on the device”h]”hŒ&Provides global controls on the device”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KGhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´KGhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžuh1jwhhÊh²hh³hÇh´KFubj®)�”}”(hXSAttributes: 1.1 KVM_DEV_XIVE_RESET (write only) Resets the interrupt controller configuration for sources and event queues. To be used by kexec and kdump. Errors: none 1.2 KVM_DEV_XIVE_EQ_SYNC (write only) Sync all the sources and queues and mark the EQ pages dirty. This to make sure that a consistent memory state is captured when migrating the VM. Errors: none 1.3 KVM_DEV_XIVE_NR_SERVERS (write only) The kvm_device_attr.addr points to a __u32 value which is the number of interrupt server numbers (ie, highest possible vcpu id plus one). Errors: ======= ========================================== -EINVAL Value greater than KVM_MAX_VCPU_IDS. -EFAULT Invalid user pointer for attr->addr. -EBUSY A vCPU is already connected to the device. ======= ========================================== ”h]”hÞ)�”}”(hhh]”hã)�”}”(hX/Attributes: 1.1 KVM_DEV_XIVE_RESET (write only) Resets the interrupt controller configuration for sources and event queues. To be used by kexec and kdump. Errors: none 1.2 KVM_DEV_XIVE_EQ_SYNC (write only) Sync all the sources and queues and mark the EQ pages dirty. This to make sure that a consistent memory state is captured when migrating the VM. Errors: none 1.3 KVM_DEV_XIVE_NR_SERVERS (write only) The kvm_device_attr.addr points to a __u32 value which is the number of interrupt server numbers (ie, highest possible vcpu id plus one). Errors: ======= ========================================== -EINVAL Value greater than KVM_MAX_VCPU_IDS. -EFAULT Invalid user pointer for attr->addr. -EBUSY A vCPU is already connected to the device. ======= ========================================== ”h]”(hé)�”}”(hŒ Attributes:”h]”hŒ Attributes:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´Kahjubhù)�”}”(hhh]”(j )�”}”(hŒŽ1.1 KVM_DEV_XIVE_RESET (write only) Resets the interrupt controller configuration for sources and event queues. To be used by kexec and kdump.”h]”hŒŽ1.1 KVM_DEV_XIVE_RESET (write only) Resets the interrupt controller configuration for sources and event queues. To be used by kexec and kdump.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KJhjubj )�”}”(hŒ Errors: none”h]”hŒ Errors: none”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KNhjubj )�”}”(hŒ¶1.2 KVM_DEV_XIVE_EQ_SYNC (write only) Sync all the sources and queues and mark the EQ pages dirty. This to make sure that a consistent memory state is captured when migrating the VM.”h]”hŒ¶1.2 KVM_DEV_XIVE_EQ_SYNC (write only) Sync all the sources and queues and mark the EQ pages dirty. This to make sure that a consistent memory state is captured when migrating the VM.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KPhjubj )�”}”(hŒ Errors: none”h]”hŒ Errors: none”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KUhjubj )�”}”(hŒ²1.3 KVM_DEV_XIVE_NR_SERVERS (write only) The kvm_device_attr.addr points to a __u32 value which is the number of interrupt server numbers (ie, highest possible vcpu id plus one).”h]”hŒ²1.3 KVM_DEV_XIVE_NR_SERVERS (write only) The kvm_device_attr.addr points to a __u32 value which is the number of interrupt server numbers (ie, highest possible vcpu id plus one).”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KWhjubj )�”}”(hŒErrors:”h]”hŒErrors:”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K[hjubj®)�”}”(hŒø======= ========================================== -EINVAL Value greater than KVM_MAX_VCPU_IDS. -EFAULT Invalid user pointer for attr->addr. -EBUSY A vCPU is already connected to the device. ======= ========================================== ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhj|ubj€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K*uh1jhj|ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K^hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubj )�”}”(hhh]”j )�”}”(hŒ$Value greater than KVM_MAX_VCPU_IDS.”h]”hŒ$Value greater than KVM_MAX_VCPU_IDS.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K^hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj—ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K_hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÕubj )�”}”(hhh]”j )�”}”(hŒ$Invalid user pointer for attr->addr.”h]”hŒ$Invalid user pointer for attr->addr.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K_hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj—ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K`hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubj )�”}”(hhh]”j )�”}”(hŒ*A vCPU is already connected to the device.”h]”hŒ*A vCPU is already connected to the device.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³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”Kuh1jzhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1juhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´K]hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1høhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´Kahjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KIhhÊh²hubjx)�”}”(hhh]”j)�”}”(hŒ`KVM_DEV_XIVE_GRP_SOURCE (write only) Initializes a new source in the XIVE device and mask it. ”h]”hÞ)�”}”(hhh]”hã)�”}”(hŒ^KVM_DEV_XIVE_GRP_SOURCE (write only) Initializes a new source in the XIVE device and mask it. ”h]”(hé)�”}”(hŒ$KVM_DEV_XIVE_GRP_SOURCE (write only)”h]”hŒ$KVM_DEV_XIVE_GRP_SOURCE (write only)”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´Kdhj~ubhù)�”}”(hhh]”j )�”}”(hŒ8Initializes a new source in the XIVE device and mask it.”h]”hŒ8Initializes a new source in the XIVE device and mask it.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kdhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´Kdhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžj7Kuh1jwhhÊh²hh³hÇh´Kcubj®)�”}”(hX8Attributes: Interrupt source number (64-bit) The kvm_device_attr.addr points to a __u64 value:: bits: | 63 .... 2 | 1 | 0 values: | unused | level | type - type: 0:MSI 1:LSI - level: assertion level in case of an LSI. Errors: ======= ========================================== -E2BIG Interrupt source number is out of range -ENOMEM Could not create a new source block -EFAULT Invalid user pointer for attr->addr. -ENXIO Could not allocate underlying HW interrupt ======= ========================================== ”h]”(hÞ)�”}”(hhh]”hã)�”}”(hŒ.Attributes: Interrupt source number (64-bit) ”h]”(hé)�”}”(hŒ Attributes:”h]”hŒ Attributes:”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´KghjÆubhù)�”}”(hhh]”j )�”}”(hŒ!Interrupt source number (64-bit)”h]”hŒ!Interrupt source number (64-bit)”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KghjØubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´KghjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj¿ubj )�”}”(hŒ2The kvm_device_attr.addr points to a __u64 value::”h]”hŒ1The kvm_device_attr.addr points to a __u64 value:”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kihj¿ubhŒ literal_block”“”)�”}”(hŒNbits: | 63 .... 2 | 1 | 0 values: | unused | level | type”h]”hŒNbits: | 63 .... 2 | 1 | 0 values: | unused | level | type”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j h³hÇh´Kkhj¿ubhþ)�”}”(hhh]”(j)�”}”(hŒtype: 0:MSI 1:LSI”h]”j )�”}”(hjh]”hŒtype: 0:MSI 1:LSI”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Knhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ*level: assertion level in case of an LSI. ”h]”j )�”}”(hŒ)level: assertion level in case of an LSI.”h]”hŒ)level: assertion level in case of an LSI.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kohj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”j$j%uh1hýh³hÇh´Knhj¿ubj )�”}”(hŒErrors:”h]”hŒErrors:”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kqhj¿ubj®)�”}”(hX(======= ========================================== -E2BIG Interrupt source number is out of range -ENOMEM Could not create a new source block -EFAULT Invalid user pointer for attr->addr. -ENXIO Could not allocate underlying HW interrupt ======= ========================================== ”h]”jv)�”}”(hhh]”j{)�”}”(hhh]”(j€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhjfubj€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K*uh1jhjfubj–)�”}”(hhh]”(j›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-E2BIG”h]”hŒ-E2BIG”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kthjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj€ubj )�”}”(hhh]”j )�”}”(hŒ'Interrupt source number is out of range”h]”hŒ'Interrupt source number is out of range”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kthjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj}ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENOMEM”h]”hŒ-ENOMEM”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kuhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj·ubj )�”}”(hhh]”j )�”}”(hŒ#Could not create a new source block”h]”hŒ#Could not create a new source block”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KuhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj}ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kvhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjîubj )�”}”(hhh]”j )�”}”(hŒ$Invalid user pointer for attr->addr.”h]”hŒ$Invalid user pointer for attr->addr.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kvhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj}ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kwhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj%ubj )�”}”(hhh]”j )�”}”(hŒ*Could not allocate underlying HW interrupt”h]”hŒ*Could not allocate underlying HW interrupt”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kwhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjfubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jzhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´Kshj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KfhhÊh²hubjx)�”}”(hhh]”j)�”}”(hŒJKVM_DEV_XIVE_GRP_SOURCE_CONFIG (write only) Configures source targeting ”h]”hÞ)�”}”(hhh]”hã)�”}”(hŒHKVM_DEV_XIVE_GRP_SOURCE_CONFIG (write only) Configures source targeting ”h]”(hé)�”}”(hŒ+KVM_DEV_XIVE_GRP_SOURCE_CONFIG (write only)”h]”hŒ+KVM_DEV_XIVE_GRP_SOURCE_CONFIG (write only)”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´K{hj…ubhù)�”}”(hhh]”j )�”}”(hŒConfigures source targeting”h]”hŒConfigures source targeting”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K{hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´K{hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžj7Kuh1jwhhÊh²hh³hÇh´Kzubj®)�”}”(hXXAttributes: Interrupt source number (64-bit) The kvm_device_attr.addr points to a __u64 value:: bits: | 63 .... 33 | 32 | 31 .. 3 | 2 .. 0 values: | eisn | mask | server | priority - priority: 0-7 interrupt priority level - server: CPU number chosen to handle the interrupt - mask: mask flag (unused) - eisn: Effective Interrupt Source Number Errors: ======= ======================================================= -ENOENT Unknown source number -EINVAL Not initialized source number -EINVAL Invalid priority -EINVAL Invalid CPU number. -EFAULT Invalid user pointer for attr->addr. -ENXIO CPU event queues not configured or configuration of the underlying HW interrupt failed -EBUSY No CPU available to serve interrupt ======= ======================================================= ”h]”(hÞ)�”}”(hhh]”hã)�”}”(hŒ.Attributes: Interrupt source number (64-bit) ”h]”(hé)�”}”(hŒ Attributes:”h]”hŒ Attributes:”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´K~hjÍubhù)�”}”(hhh]”j )�”}”(hŒ!Interrupt source number (64-bit)”h]”hŒ!Interrupt source number (64-bit)”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K~hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´K~hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjÆubj )�”}”(hŒ2The kvm_device_attr.addr points to a __u64 value::”h]”hŒ1The kvm_device_attr.addr points to a __u64 value:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K€hjÆubj )�”}”(hŒjbits: | 63 .... 33 | 32 | 31 .. 3 | 2 .. 0 values: | eisn | mask | server | priority”h]”hŒjbits: | 63 .... 33 | 32 | 31 .. 3 | 2 .. 0 values: | eisn | mask | server | priority”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j h³hÇh´K‚hjÆubhþ)�”}”(hhh]”(j)�”}”(hŒ&priority: 0-7 interrupt priority level”h]”j )�”}”(hj#h]”hŒ&priority: 0-7 interrupt priority level”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K…hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ1server: CPU number chosen to handle the interrupt”h]”j )�”}”(hj:h]”hŒ1server: CPU number chosen to handle the interrupt”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K†hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒmask: mask flag (unused)”h]”j )�”}”(hjQh]”hŒmask: mask flag (unused)”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‡hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ(eisn: Effective Interrupt Source Number ”h]”j )�”}”(hŒ'eisn: Effective Interrupt Source Number”h]”hŒ'eisn: Effective Interrupt Source Number”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kˆhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”j$j%uh1hýh³hÇh´K…hjÆubj )�”}”(hŒErrors:”h]”hŒErrors:”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KŠhjÆubj®)�”}”(hXÃ======= ======================================================= -ENOENT Unknown source number -EINVAL Not initialized source number -EINVAL Invalid priority -EINVAL Invalid CPU number. -EFAULT Invalid user pointer for attr->addr. -ENXIO CPU event queues not configured or configuration of the underlying HW interrupt failed -EBUSY No CPU available to serve interrupt ======= ======================================================= ”h]”jv)�”}”(hhh]”j{)�”}”(hhh]”(j€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhj™ubj€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K7uh1jhj™ubj–)�”}”(hhh]”(j›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENOENT”h]”hŒ-ENOENT”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj³ubj )�”}”(hhh]”j )�”}”(hŒUnknown source number”h]”hŒUnknown source number”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KŽhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjêubj )�”}”(hhh]”j )�”}”(hŒNot initialized source number”h]”hŒNot initialized source number”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KŽhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj!ubj )�”}”(hhh]”j )�”}”(hŒInvalid priority”h]”hŒInvalid priority”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjXubj )�”}”(hhh]”j )�”}”(hŒInvalid CPU number.”h]”hŒInvalid CPU number.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K�hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‘hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ubj )�”}”(hhh]”j )�”}”(hŒ$Invalid user pointer for attr->addr.”h]”hŒ$Invalid user pointer for attr->addr.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K‘hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENXIO”h]”hŒ-ENXIO”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K’hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÆubj )�”}”(hhh]”j )�”}”(hŒVCPU event queues not configured or configuration of the underlying HW interrupt failed”h]”hŒVCPU event queues not configured or configuration of the underlying HW interrupt failed”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K’hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj°ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K”hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjýubj )�”}”(hhh]”j )�”}”(hŒ#No CPU available to serve interrupt”h]”hŒ#No CPU available to serve interrupt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³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”Kuh1jzhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KŒhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´K}hhÊh²hubjx)�”}”(hhh]”j)�”}”(hŒMKVM_DEV_XIVE_GRP_EQ_CONFIG (read-write) Configures an event queue of a CPU ”h]”hÞ)�”}”(hhh]”hã)�”}”(hŒKKVM_DEV_XIVE_GRP_EQ_CONFIG (read-write) Configures an event queue of a CPU ”h]”(hé)�”}”(hŒ'KVM_DEV_XIVE_GRP_EQ_CONFIG (read-write)”h]”hŒ'KVM_DEV_XIVE_GRP_EQ_CONFIG (read-write)”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´K˜hj] ubhù)�”}”(hhh]”j )�”}”(hŒ"Configures an event queue of a CPU”h]”hŒ"Configures an event queue of a CPU”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K˜hjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj] ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´K˜hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžj7Kuh1jwhhÊh²hh³hÇh´K—ubj®)�”}”(hXAAttributes: EQ descriptor identifier (64-bit) The EQ descriptor identifier is a tuple (server, priority):: bits: | 63 .... 32 | 31 .. 3 | 2 .. 0 values: | unused | server | priority The kvm_device_attr.addr points to:: struct kvm_ppc_xive_eq { __u32 flags; __u32 qshift; __u64 qaddr; __u32 qtoggle; __u32 qindex; __u8 pad[40]; }; - flags: queue flags KVM_XIVE_EQ_ALWAYS_NOTIFY (required) forces notification without using the coalescing mechanism provided by the XIVE END ESBs. - qshift: queue size (power of 2) - qaddr: real address of queue - qtoggle: current queue toggle bit - qindex: current queue index - pad: reserved for future use Errors: ======= ========================================= -ENOENT Invalid CPU number -EINVAL Invalid priority -EINVAL Invalid flags -EINVAL Invalid queue size -EINVAL Invalid queue address -EFAULT Invalid user pointer for attr->addr. -EIO Configuration of the underlying HW failed ======= ========================================= ”h]”(hÞ)�”}”(hhh]”hã)�”}”(hŒ.Attributes: EQ descriptor identifier (64-bit) ”h]”(hé)�”}”(hŒ Attributes:”h]”hŒ Attributes:”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´K›hj¥ ubhù)�”}”(hhh]”j )�”}”(hŒ!EQ descriptor identifier (64-bit)”h]”hŒ!EQ descriptor identifier (64-bit)”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K›hj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´K›hj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjž ubj )�”}”(hŒaddr. -EIO Configuration of the underlying HW failed ======= ========================================= ”h]”jv)�”}”(hhh]”j{)�”}”(hhh]”(j€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhj ubj€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K)uh1jhj ubj–)�”}”(hhh]”(j›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENOENT”h]”hŒ-ENOENT”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kºhj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj* ubj )�”}”(hhh]”j )�”}”(hŒInvalid CPU number”h]”hŒInvalid CPU number”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KºhjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj* ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K»hjd ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhja ubj )�”}”(hhh]”j )�”}”(hŒInvalid priority”h]”hŒInvalid priority”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K»hj{ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¼hj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj˜ ubj )�”}”(hhh]”j )�”}”(hŒ Invalid flags”h]”hŒ Invalid flags”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¼hj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj˜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K½hjÒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÏ ubj )�”}”(hhh]”j )�”}”(hŒInvalid queue size”h]”hŒInvalid queue size”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K½hjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÏ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¾hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubj )�”}”(hhh]”j )�”}”(hŒInvalid queue address”h]”hŒInvalid queue address”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¾hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EFAULT”h]”hŒ-EFAULT”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¿hj@ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj= ubj )�”}”(hhh]”j )�”}”(hŒ$Invalid user pointer for attr->addr.”h]”hŒ$Invalid user pointer for attr->addr.”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K¿hjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj= ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EIO”h]”hŒ-EIO”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÀhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjt ubj )�”}”(hhh]”j )�”}”(hŒ)Configuration of the underlying HW failed”h]”hŒ)Configuration of the underlying HW failed”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÀhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjt ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj' ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jzhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´K¹hjž ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KšhhÊh²hubjx)�”}”(hhh]”j)�”}”(hŒ`KVM_DEV_XIVE_GRP_SOURCE_SYNC (write only) Synchronize the source to flush event notifications ”h]”hÞ)�”}”(hhh]”hã)�”}”(hŒ^KVM_DEV_XIVE_GRP_SOURCE_SYNC (write only) Synchronize the source to flush event notifications ”h]”(hé)�”}”(hŒ)KVM_DEV_XIVE_GRP_SOURCE_SYNC (write only)”h]”hŒ)KVM_DEV_XIVE_GRP_SOURCE_SYNC (write only)”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´KÄhjÔ ubhù)�”}”(hhh]”j )�”}”(hŒ3Synchronize the source to flush event notifications”h]”hŒ3Synchronize the source to flush event notifications”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÄhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´KÄhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjÍ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžj7Kuh1jwhhÊh²hh³hÇh´KÃubj®)�”}”(hŒÖAttributes: Interrupt source number (64-bit) Errors: ======= ============================= -ENOENT Unknown source number -EINVAL Not initialized source number ======= ============================= ”h]”(hÞ)�”}”(hhh]”hã)�”}”(hŒ.Attributes: Interrupt source number (64-bit) ”h]”(hé)�”}”(hŒ Attributes:”h]”hŒ Attributes:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hèh³hÇh´KÇhj ubhù)�”}”(hhh]”j )�”}”(hŒ!Interrupt source number (64-bit)”h]”hŒ!Interrupt source number (64-bit)”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÇhj. ubah}”(h]”h ]”h"]”h$]”h&]”uh1høhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´KÇhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj ubj )�”}”(hŒErrors:”h]”hŒErrors:”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÉhj ubj®)�”}”(hŒ”======= ============================= -ENOENT Unknown source number -EINVAL Not initialized source number ======= ============================= ”h]”jv)�”}”(hhh]”j{)�”}”(hhh]”(j€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhjf ubj€)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jhjf ubj–)�”}”(hhh]”(j›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-ENOENT”h]”hŒ-ENOENT”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÌhjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj€ ubj )�”}”(hhh]”j )�”}”(hŒUnknown source number”h]”hŒUnknown source number”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÌhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšhj} ubj›)�”}”(hhh]”(j )�”}”(hhh]”j )�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÍhjº ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj· ubj )�”}”(hhh]”j )�”}”(hŒNot initialized source number”h]”hŒNot initialized source number”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³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•hjf ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jzhjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1juhj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KËhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j­h³hÇh´KÆhhÊh²hubhþ)�”}”(hhh]”(j)�”}”(hX�VCPU state The XIVE IC maintains VP interrupt state in an internal structure called the NVT. When a VP is not dispatched on a HW processor thread, this structure can be updated by HW if the VP is the target of an event notification. It is important for migration to capture the cached IPB from the NVT as it synthesizes the priorities of the pending interrupts. We capture a bit more to report debug information. KVM_REG_PPC_VP_STATE (2 * 64bits):: bits: | 63 .... 32 | 31 .... 0 | values: | TIMA word0 | TIMA word1 | bits: | 127 .......... 64 | values: | unused | ”h]”(j )�”}”(hŒ VCPU state”h]”hŒ VCPU state”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÐhjubj )�”}”(hŒÝThe XIVE IC maintains VP interrupt state in an internal structure called the NVT. When a VP is not dispatched on a HW processor thread, this structure can be updated by HW if the VP is the target of an event notification.”h]”hŒÝThe XIVE IC maintains VP interrupt state in an internal structure called the NVT. When a VP is not dispatched on a HW processor thread, this structure can be updated by HW if the VP is the target of an event notification.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÒhjubj )�”}”(hŒ³It is important for migration to capture the cached IPB from the NVT as it synthesizes the priorities of the pending interrupts. We capture a bit more to report debug information.”h]”hŒ³It is important for migration to capture the cached IPB from the NVT as it synthesizes the priorities of the pending interrupts. We capture a bit more to report debug information.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K×hjubj )�”}”(hŒ#KVM_REG_PPC_VP_STATE (2 * 64bits)::”h]”hŒ"KVM_REG_PPC_VP_STATE (2 * 64bits):”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÛhjubj )�”}”(hŒ³bits: | 63 .... 32 | 31 .... 0 | values: | TIMA word0 | TIMA word1 | bits: | 127 .......... 64 | values: | unused |”h]”hŒ³bits: | 63 .... 32 | 31 .... 0 | values: | TIMA word0 | TIMA word1 | bits: | 127 .......... 64 | values: | unused |”…”�”}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j h³hÇh´KÝhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)�”}”(hXîMigration: Saving the state of a VM using the XIVE native exploitation mode should follow a specific sequence. When the VM is stopped : 1. Mask all sources (PQ=01) to stop the flow of events. 2. Sync the XIVE device with the KVM control KVM_DEV_XIVE_EQ_SYNC to flush any in-flight event notification and to stabilize the EQs. At this stage, the EQ pages are marked dirty to make sure they are transferred in the migration sequence. 3. Capture the state of the source targeting, the EQs configuration and the state of thread interrupt context registers. Restore is similar: 1. Restore the EQ configuration. As targeting depends on it. 2. Restore targeting 3. Restore the thread interrupt contexts 4. Restore the source states 5. Let the vCPU run”h]”(j )�”}”(hŒ Migration:”h]”hŒ Migration:”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kâhj`ubj )�”}”(hŒ|Saving the state of a VM using the XIVE native exploitation mode should follow a specific sequence. When the VM is stopped :”h]”hŒ|Saving the state of a VM using the XIVE native exploitation mode should follow a specific sequence. When the VM is stopped :”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kähj`ubjx)�”}”(hhh]”j)�”}”(hŒ5Mask all sources (PQ=01) to stop the flow of events. ”h]”j )�”}”(hŒ4Mask all sources (PQ=01) to stop the flow of events.”h]”hŒ4Mask all sources (PQ=01) to stop the flow of events.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kçhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ubah}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžuh1jwhj`ubj )�”}”(hŒï2. Sync the XIVE device with the KVM control KVM_DEV_XIVE_EQ_SYNC to flush any in-flight event notification and to stabilize the EQs. At this stage, the EQ pages are marked dirty to make sure they are transferred in the migration sequence.”h]”hŒï2. Sync the XIVE device with the KVM control KVM_DEV_XIVE_EQ_SYNC to flush any in-flight event notification and to stabilize the EQs. At this stage, the EQ pages are marked dirty to make sure they are transferred in the migration sequence.”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kéhj`ubj )�”}”(hŒx3. Capture the state of the source targeting, the EQs configuration and the state of thread interrupt context registers.”h]”hŒx3. Capture the state of the source targeting, the EQs configuration and the state of thread interrupt context registers.”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kîhj`ubj )�”}”(hŒRestore is similar:”h]”hŒRestore is similar:”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kñhj`ubjx)�”}”(hhh]”(j)�”}”(hŒ9Restore the EQ configuration. As targeting depends on it.”h]”j )�”}”(hjÐh]”hŒ9Restore the EQ configuration. As targeting depends on it.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KóhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒRestore targeting”h]”j )�”}”(hjçh]”hŒRestore targeting”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kôhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ%Restore the thread interrupt contexts”h]”j )�”}”(hjþh]”hŒ%Restore the thread interrupt contexts”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Kõhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒRestore the source states”h]”j )�”}”(hjh]”hŒRestore the source states”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Köhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒLet the vCPU run”h]”j )�”}”(hj,h]”hŒLet the vCPU run”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K÷hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubeh}”(h]”h ]”h"]”h$]”h&]”jšj›jœhj�jžuh1jwhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j$jµuh1hýh³hÇh´KÐhhÊh²hubeh}”(h]”Œ9power9-external-interrupt-virtualization-engine-xive-gen1”ah ]”h"]”Œ;power9 external interrupt virtualization engine (xive gen1)”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”}”Œnameids”}”jXjUsŒ nametypes”}”jX‰sh}”jUhÊsŒ 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]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jßhjWubjà)�”}”(hhh]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "3" (ordinal 3)”h]”hŒ>Enumerated list start value not ordinal-1: “3â€� (ordinal 3)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Kuh1jßhjWubjà)�”}”(hhh]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Kuh1jßhhÊh²hh³hÇh´Kcubjà)�”}”(hhh]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "3" (ordinal 3)”h]”hŒ>Enumerated list start value not ordinal-1: “3â€� (ordinal 3)”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Kuh1jßhhÊh²hh³hÇh´Kzubjà)�”}”(hhh]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "4" (ordinal 4)”h]”hŒ>Enumerated list start value not ordinal-1: “4â€� (ordinal 4)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Kuh1jßhhÊh²hh³hÇh´K—ubjà)�”}”(hhh]”j )�”}”(hŒ:Enumerated list start value not ordinal-1: "5" (ordinal 5)”h]”hŒ>Enumerated list start value not ordinal-1: “5â€� (ordinal 5)”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Kuh1jßhhÊh²hh³hÇh´KÃubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.