VT-x中的“退出时确认中断”控制会导致CPU锁定

问题描述 投票:2回答:1

我正在努力支持我正在编写的使用Intel VT-x虚拟化的VMM中的已发布中断。文档中指定的用于启用发布中断的VM条目要求之一是“退出时确认中断”VM-exit控制必须设置为1。

当我将此控件设置为1时,我的客户操作系统会在停止响应之前运行一段时间。然后,主机OS也会停止响应,并向主机内核日志打印一条消息,指出运行客户操作系统的CPU核心已经经历了硬锁定(NMI watchdog: Watchdog detected hard LOCKUP on cpu 10)。

我正在阅读英特尔文档,并试图仔细思考,但是想知道是否有其他人知道发生了什么。我现在的一般想法是主机操作系统必须向客户操作系统正在运行的核心发送中断(即我的客户操作系统不参与发送中断),这会导致虚拟机退出。由于我将“退出时的确认中断”控制设置为1,处理器向中断控制器确认已收到中断,并将向量置于VM退出中断信息字段中。此外,由于我目前没有对我的VMM中的中断信息字段做任何事情,因此主机操作系统不会处理中断,这会导致问题。我正朝着正确的方向前进吗?

linux x86 virtual-machine virtualization apic
1个回答
5
投票

是的,不允许主机OS处理设备中断将是一个问题。您可以将其设置为0,而不是将“退出时应答中断”控制设置为0.然后,当您因硬件中断而退出VM时,应设置处理器中断启用标志以允许中断被确认和服务通常在主持人。

来自Intel 64和IA-32架构软件开发人员手册:

33.2 VMX操作中的中断处理

  • 退出时确认中断。 “退出时的确认中断”控制VMCS中的VM退出控制控制外部中断确认的处理器行为。如果控制为1,则处理器确认中断控制器在VM退出时获取中断向量,并将该向量存储在VM退出中断信息字段中。如果控件为0,则在VM退出期间不会确认外部中断。由于外部中断导致VM出口自动清除RFLAGS.IF,因此VMM重新启用中断(设置RFLAGS.IF = 1)会启动外部中断确认并通过监视器/主机IDT引导外部中断

或者,如果您有充分的理由将此位设置为此位,例如,如果需要将某些硬件中断路由到guest虚拟机,则需要调用主机OS的中断处理程序,就好像它已被CPU调用一样。

© www.soinside.com 2019 - 2024. All rights reserved.