今天主要学习第三部分。core是怎样路由的
中断的标记
产生的中断是FIQ还是IQR由两件事情决定
1.当前所处的异常等级
2.中断在gic中被配置成了哪一个组
(只要在EL3产生的中断都是FIQ,只要在Group0配置的中断都是FIQ,其他简单记为:想给自己处理的中断就是IRQ,想给别人处理的中断就是FIQ)
FIQ和IRQ的区别
例如 一个中断不小心跳到了OS kernel 并且硬件希望该操作系统处理,这就是IRQ。如果硬件不希望该操作系统处理。这就是FIQ,需要将中断路由到其他操作系统中。(FIQ和IRQ具有同样的优先级)
Routing和Mask
当EL3实现El2没有实现时
路由
纵坐标指配置,横坐标指异常发生前CPU在哪个等级,
当不看EA和FIQ时
如果SCR_EL3=0,当发生的中断的异常等级在EL0,则被路由到EL1;当发生的中断的异常等级在EL1,则被路由到EL2;当发生的中断的异常等级在EL3,则保持pending。
如果SCR_EL3=1,无论发生的中断的异常等级在哪,都被路由到EL3;
Mask
A中断taken时,不用管PSTATE{A、I、F、ALLINT、SP}(就是不用看Mask)
B中断taken时,不用管PSTATE{A、I、F、ALLINT、SP}
A/B FIQ时为A,IRQ时为B
C中断不会被taken,不用管PSTATE{A、I、F、ALLINT、SP}
n/a 不存在
当EL3没有实现EL2实现时
路由
TGE=0表示是Guest VM
TGE=1表示是Host VM
AMO、IMO、FMO表示是否强制路由到EL2
当是Host VM时,不论是否强制路由到EL2,都路由到EL2
当是Guest VM时,当不强制路由到EL2时,就路由到EL2一下;当强制路由到EL2是,就路由到EL2.
Mask
A中断taken时,不用管PSTATE{A、I、F、ALLINT、SP}(就是不用看Mask)
B中断taken时,不用管PSTATE{A、I、F、ALLINT、SP}
A/B FIQ时为A,IRQ时为B
C中断不会被taken,不用管PSTATE{A、I、F、ALLINT、SP}
n/a 不存在
El2和EL3都实现时
路由
Mask
路由总结
assert 断言