X86 是否存在VMM无法在中断窗口退出时向来宾注入中断的情况?

X86 是否存在VMM无法在中断窗口退出时向来宾注入中断的情况?,x86,interrupt,virtualization,kvm,hypervisor,X86,Interrupt,Virtualization,Kvm,Hypervisor,我正在开发一个定制的Type2虚拟机监控程序。我的问题与来宾系统中模拟设备的中断注入有关 情景: 来宾执行了一些vmexit,然后下一个vmresumeVMM发现模拟中断控制器中存在挂起的中断。VMM请求在随后的vmresume上退出中断窗口(IWE)。 一旦我们得到一个IWEVMM将中断信息写入VM条目中断信息字段4016H,并恢复来宾执行 问题: 是否保证将中断注入来宾系统并通过来宾IDT处理? 是否存在中断注入可能失败的情况 我看到了一个场景,在这个场景中,来宾不再进入相应的来宾IDT条目

我正在开发一个定制的Type2虚拟机监控程序。我的问题与来宾系统中模拟设备的中断注入有关

情景: 来宾执行了一些
vmexit
,然后下一个
vmresume
VMM发现模拟中断控制器中存在挂起的中断。VMM请求在随后的
vmresume
上退出中断窗口(IWE)。 一旦我们得到一个
IWE
VMM将中断信息写入
VM条目中断信息字段4016H
,并恢复来宾执行

问题: 是否保证将中断注入来宾系统并通过来宾
IDT
处理? 是否存在中断注入可能失败的情况

我看到了一个场景,在这个场景中,来宾不再进入相应的来宾IDT条目,而是继续并开始在来宾内核中执行其他内容

详情:
Windows 64位来宾,英特尔VTx

中断无法注入的原因有很多,但它们会导致vm进入失败;它永远不会忽略注入的中断。例如,如果if是清除的,或者如果前一条指令加载了SS,那么中断会被一条指令阻塞。然而,当这些情况适用时,您不会得到中断窗口退出


可能中断没有被注入。我认为可能发生这种情况的一个原因是,如果vm entry interrupt information字段被设置为传递故障,则无法同时传递中断。

我删除了
[kvm]
标记,因为我认为添加
[x86]
更重要。如果您的自定义虚拟机监控程序实际上是基于
kvm
,是否可以重新添加它并删除
[intel]
标记?(使用[x86]标签的人比使用[code>[intel]的人多,而且您已经在问题文本中指定了VT-X而不是AMD Hyper-V。)@PeterCordes它与KVM类似,因为它也是类型2。我只是想让这个问题有一个合适的受众。我在
[virtualization]
[hypervisor]
中离开了。我不知道@prl后面是什么标签,但我假设它包括x86,所以希望他能看到这一点。有一些熟悉x86硬件虚拟化的SO
[x86]
/asm常客;我假设它们中的大多数遵循
x86
标记,但IDK是关于虚拟化标记的。IDK有多少人关注
[kvm]
,但没有任何通用标记,谁有兴趣回答一个与kvm无关的问题。@PeterCordes谢谢Peter。我不确定如果插入的中断是发布的中断通知向量会发生什么。我会尽力弄清楚的。我们不使用Vt-d。在插入中断之前和之后,我还打印vm入口中断信息字段。我只能看到第31位被清除,这是出口上的预期。向量在字段中仍然是相同的。这就是让我如此困惑的原因。