XICS 中断控制器¶
支持的设备类型:KVM_DEV_TYPE_XICS
- 组
- KVM_DEV_XICS_GRP_SOURCES
属性
每个中断源一个,由源编号索引。
- KVM_DEV_XICS_GRP_CTRL
属性
2.1 KVM_DEV_XICS_NR_SERVERS (只写)
kvm_device_attr.addr 指向一个 __u32 值,该值是中断服务器编号的数量(即,最高可能的 vcpu id 加一)。
错误
-EINVAL
值大于 KVM_MAX_VCPU_IDS。
-EFAULT
attr->addr 的用户指针无效。
-EBUSY
一个 vcpu 已经连接到该设备。
此设备模拟 PAPR 中定义的 XICS (eXternal Interrupt Controller Specification)。XICS 有一组中断源,每个中断源由一个 20 位源编号标识,以及一组中断控制呈现 (ICP) 实体,也称为“服务器”,每个实体与一个虚拟 CPU 相关联。
通过为每个 vcpu 启用 KVM_CAP_IRQ_ARCH 功能来创建 ICP 实体,在 kvm_enable_cap 结构的 args[0] 中指定 KVM_CAP_IRQ_XICS,并在 args[1] 中指定中断服务器编号(即,从 XICS 的角度来看的 vcpu 编号)。每个 ICP 都有 64 位状态,可以使用 vcpu 上的 KVM_GET_ONE_REG 和 KVM_SET_ONE_REG ioctl 读取和写入。64 位状态字具有以下位域,从字的最低有效端开始
未使用,16 位
待处理中断优先级,8 位。零是最高优先级,255 表示没有待处理的中断。
待处理 IPI(处理器间中断)优先级,8 位。零是最高优先级,255 表示没有待处理的 IPI。
待处理中断源编号,24 位。零表示没有待处理的中断,2 表示有 IPI 待处理
当前处理器优先级,8 位。零是最高优先级,表示不能传递中断,255 是最低优先级。
每个源都有 64 位状态,可以使用 KVM_GET_DEVICE_ATTR 和 KVM_SET_DEVICE_ATTR ioctl 读取和写入,指定 KVM_DEV_XICS_GRP_SOURCES 属性组,属性编号为中断源编号。64 位状态字具有以下位域,从字的最低有效端开始
目标(服务器编号),32 位
这指定了应该将中断发送到哪里,并且是为目标 vcpu 指定的中断服务器编号。
优先级,8 位
这是为此中断源指定的优先级,其中 0 是最高优先级,255 是最低优先级。优先级为 255 的中断永远不会被传递。
电平敏感标志,1 位
对于电平敏感的中断源,此位为 1,对于边沿敏感(或 MSI)的中断源,此位为 0。
屏蔽标志,1 位
如果中断被屏蔽(无论其优先级如何都无法传递),例如通过 ibm,int-off RTAS 调用,则此位设置为 1,如果未被屏蔽,则设置为 0。
挂起标志,1 位
如果源有挂起的中断,则此位为 1,否则为 0。
每个虚拟机只能创建一个 XICS 实例。