Arm GIC v2虚拟化支持系统

Arm GIC v2虚拟化支持系统,arm,interrupt,virtualization,trust-zone,Arm,Interrupt,Virtualization,Trust Zone,我正在尝试实现某种中断例程 它与支持GIC v2 H/W的虚拟化相关 我的问题是: When catch a interrupt number, Hypervisor should distingush if it's for own itself or for guests ran on the hypervisor. But how to check it? if it's for hyp or guest? 这是我的问题。请让我知道是否正确。我需要更多的背景。感谢您之前的重播。最简单

我正在尝试实现某种中断例程

它与支持GIC v2 H/W的虚拟化相关

我的问题是:

 When catch a interrupt number, Hypervisor should distingush if it's for 
own itself or for guests ran on the hypervisor.
But how to check it? if it's for hyp or guest?

这是我的问题。请让我知道是否正确。我需要更多的背景。感谢您之前的重播。

最简单的方法是将FIQ中断分配给安全世界,将IRQ分配给正常世界。有一个信任区寄存器(SCR或安全配置寄存器),将IRQ/FIQ路由到监视器或直接路由到当前世界中的操作系统。GIC本身允许所有中断为FIQ或IRQ(我认为文档将其称为类型0和类型1)。您可以始终路由到监视器,也可以动态切换(在世界交换机上)中断路由的位置

  World | Normal | Secure
  ------+--------+--------
  FIQ   | Monitor| Through
  IRQ   | Through| Monitor
监视器陷阱需要保存大量寄存器(保存寄存器的世界开关)。您可以在某种程度上信任安全中断处理程序,但在正常情况下,所有的赌注都应该取消

也许有其他的方法来处理它,但这是最不复杂的。例如,您可以始终拥有一个固定的中断源所有者表(它们属于哪个世界)。我想还有很多其他的方法。由于性能原因,大多数情况下都会选择监视模式


对于虚拟机监控程序,您必须禁止来宾操作系统中的FIQ中断。它们可能不会像预期的那样工作得很好,虚拟化将对此产生干扰。如果是这种情况,您可以将SCR保留在Normal列中(因此SCR是常量)。

实际上,我的项目与虚拟机监控程序相关。该虚拟机监控程序应在超级模式下运行,该模式在ARM中实现,支持硬件,并且该模式仅存在于正常环境中。(非安全模式)这意味着将IRQ从安全路由到非安全路由需要相当大的开销。所以我认为你的建议很好,但不适合我的情况。但是非常感谢你的回答你需要什么样的打断?并为分发服务器执行,并让VM具有每个cpu的控制器。您可以将此方案用于多CPU。你没有说你有ARM虚拟机扩展,也没有问你是否有SMP(所以你有点浪费了我的时间)。你应该添加一些关于你希望事情如何运作的细节。虚拟机监控程序的中断是什么(或者您只是指每个VM的中断)。如果为VM分配了一个CPU,则GIC分发服务器可以为每个CPU路由。然而,如果有人告诉你答案,你可能会说‘我的架构不是这样工作的……’。与……的论文/链接。如前所述,在安全环境中运行虚拟机监控程序管理任务并使用FIQ进行中断当然是合适的;也许不是你想要的。请澄清。感谢您的详细回答,并为使您感到不安而道歉。实际上,我的虚拟机监控程序运行在ARM CortexA15上,并且运行在ARM处理器的一种模式——超模式上。正如您所猜测的,虚拟机并不是每个核心都专用的。在这种情况下,我想知道的是当irq出现时,如何确定这个irq是否属于谁。如果没有办法,那么我必须给所有映射了irq号的虚拟机提供irq。无论如何,这是我的详细问题,我再次感到抱歉。谢谢你的论文和链接。当然,你不能一次在一个CPU上运行多个操作系统?因此,当一个操作系统被安排在该CPU上时,您可以使用分发服务器来路由中断。您的虚拟机监控程序必须维护分配的中断列表?当CPU进入
WFi
模式时,您需要虚拟机监控程序监听并计划迁移吗?TZ对于非托管的虚拟机监控程序很好。你应该在问题中添加细节。单击底部附近的“编辑”。