我正在尝试允许在非root VMX模式下运行的代码使用xAPIC将IPI从一个核心发送到另一个核心 . 我正在VMM和来宾操作系统中实现此功能 . 我很难让这个工作,并花了几个小时阅读文档后,我想伸出手来看看是否有人可以指出任何明显的缺陷或帮助巩固一些有用的信息 .

这是我的理解:

在EPT中,我应该将对存储器映射的APIC寄存器的所有客户物理地址访问映射到存储器映射的APIC寄存器的主机物理基地址 . 因此,当我尝试写入来宾操作系统中的APIC寄存器时,它们将转到APIC寄存器 . 据我所知,由于CPU发生这种情况时CPU处于非root VMX模式,因此APIC知道虚拟化这些中断 .

接下来,当收到IPI时,将退出VM退出原因 EXIT_REASON_EXTERNAL_INTERRUPT . 然后,VMM应通过ISR查找与接收到的中断对应的位集 . 接下来,我将中断注入客户操作系统 .

我想我接收IPI有困难 . 当我查看ISR时,没有设置位 . 有没有人有什么建议?我使用的是Intel Xeon CPU E5-2630,但我通过设置 nox2apic 内核参数将x2APIC设置为使用xAPIC接口 .