Linux kernel KVM如何处理中断

Linux kernel KVM如何处理中断,linux-kernel,virtualization,qemu,kvm,Linux Kernel,Virtualization,Qemu,Kvm,我一直在做KVM的事情,有几个问题我想不通 1> 正如我们所知,通常情况下,外部中断将导致VMexit,而虚拟机监控程序将注入一个虚拟中断(如果是针对来宾的)。那么将注入哪个irq(我指的是索引来宾IDT的中断向量)?KVM如何了解这一点(将主机IRQ与来宾虚拟IRQ关联) 2> 如果为来宾分配了设备,虚拟机监控程序将向来宾交付该IRQ。通过跟踪代码,我发现主机IRQ与来宾IRQ不同(我指的是中断向量)。KVM如何配置来宾应该使用的中断向量 3> 如果我们通过在VMCS中设置一些字段来配置外部中

我一直在做KVM的事情,有几个问题我想不通

1> 正如我们所知,通常情况下,外部中断将导致VMexit,而虚拟机监控程序将注入一个虚拟中断(如果是针对来宾的)。那么将注入哪个irq(我指的是索引来宾IDT的中断向量)?KVM如何了解这一点(将主机IRQ与来宾虚拟IRQ关联)

2> 如果为来宾分配了设备,虚拟机监控程序将向来宾交付该IRQ。通过跟踪代码,我发现主机IRQ与来宾IRQ不同(我指的是中断向量)。KVM如何配置来宾应该使用的中断向量

3> 如果我们通过在VMCS中设置一些字段来配置外部中断时不退出,那么在物理中断期间会发生什么?CPU会使用来宾IDT进行响应中断吗?如果是这样,KVM是否可以重定向CPU以使用另一个用于来宾的IDT(假设修改IDTR)

4> 客人IDT在哪里?在初始化vcpu和寄存器(包括IDTR)时,是否由qemu配置

我真的希望有人能回答我的问题。我将非常感激

谢谢- 2- 代码是用irq_comm.c编写的,非常复杂。对于来宾向量,虚拟机监控程序捕获并监视来宾的PCI配置空间(这实际上是在QEMU中完成的-例如,请参阅kvm_msi_update-但是对kvm的系统调用会用数据更新它)

3-是的。要设置另一个IDT,您需要更改VMCS中的IDTR字段

4-来宾IDT由来宾代码配置。QEMU/KVM没有直接参与其中。您需要将执行控件配置为在LIDT上捕获,以便监视来宾IDTR的更改

听起来你在尝试实现ASPLOS'12中的ELI。 离线联系我(论文的第二作者-NA)