GIC v2 虚拟化支持系统

GIC v2 Virtualization Supported System

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

它与支持 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 分配给正常世界。有一个 trustzone 寄存器(SCR 或安全配置寄存器)会将 IRQ/FIQ 路由到监视器或直接路由到当前 中的 OS世界。 GIC 本身允许所有中断为 FIQ 或 IRQ(我认为文档称其为 type 0type 1)。您可以随时路由到监视器,也可以动态切换(在世界交换机上)路由中断的位置。

  World | Normal | Secure
  ------+--------+--------
  FIQ   | Monitor| Through
  IRQ   | Through| Monitor

监视陷阱需要保存大量寄存器(一个保存寄存器的世界开关)。您可以在某种程度上信任安全中断处理程序,但对于正常世界来说,所有赌注都应该关闭。

也许还有其他方法可以处理它,但这是最简单的。例如,您始终可以拥有固定的 table 中断源所有者(他们属于哪个世界)。我想还有很多其他方法。大多数人总是会陷入监控模式,出于性能原因,这在某种程度上是不受欢迎的。

对于您的管理程序案例,您必须禁止来宾中的 FIQ 中断 OS。可能它们不会很好地工作,因为它们被认为是快速的,并且虚拟化会干扰这一点。如果是这种情况,您可以将 SCR 保留在 Normal 列中(因此 SCR 保持不变)。