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(外部中断控制器规范)。XICS 拥有一组中断源,每个中断源由一个 20 位源编号标识;以及一组中断控制呈现 (ICP) 实体,也称为“服务器”,每个实体都与一个虚拟 CPU 相关联。
ICP 实体是通过为每个 vcpu 启用 KVM_CAP_IRQ_ARCH 功能来创建的,其中在 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。
每个 VM 只能创建一个 XICS 实例。