1

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

它与具有 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?

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

4

1 回答 1

1

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

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

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

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

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

于 2016-02-29T05:02:47.730 回答