XICS 中断控制器

支持的设备类型:KVM_DEV_TYPE_XICS

  1. KVM_DEV_XICS_GRP_SOURCES

    属性

    每个中断源一个,按源编号索引。

  2. 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 实例。