我正在尝试实施某种中断例程。
它与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?
这是我的问题。如果正确与否,请告诉我。我需要更多背景。感谢您之前的重播。
答案 0 :(得分:1)
最简单的方法是将FIQ中断分配给安全世界,将IRQ分配给正常世界。有一个信任区域寄存器( SCR 或安全配置寄存器)可以将IRQ / FIQ路由到监视器或直接路由到当前 world 中的OS。 GIC本身允许所有中断为FIQ或IRQ(我认为文档称之为类型0 和类型1 )。您始终可以路由到监视器,也可以动态切换(在世界交换机上)中断路由的位置。
World | Normal | Secure
------+--------+--------
FIQ | Monitor| Through
IRQ | Through| Monitor
监视器陷阱需要保存大量寄存器(世界开关用于保存寄存器)。您可以在某种程度上信任安全中断处理程序,但所有投注都应该关闭正常世界。
可能有其他方法来处理它,但这是最不复杂的。例如,您可以随时拥有一个固定的中断源所有者表(他们所属的世界)。我想还有很多其他方法。大多数人总是会陷入监控模式,这在某种程度上是出于性能原因所不希望的。
对于您的虚拟机管理程序案例,您必须禁止来宾操作系统中的FIQ中断。可能它们不能很好地工作,因为它们被认为是快速的,虚拟化将会干扰这一点。如果是这种情况,您可以将SCR留在 Normal 列中(因此SCR是常量)。