ARMv8架构下SGI是否为同步异常?能否配置为IRQ?
ARMv8 SGI 异常类型疑问解答
为什么你看到的SGI是同步异常?
你触发SGI的方式大概率是在当前核执行写GICD_SGIR寄存器的指令,这种触发方式属于同步触发:
- 写
GICD_SGIR是一条同步执行的指令,CPU会将该指令直接引发的中断请求识别为同步异常,而非异步的IRQ/FIQ。 - 只有当SGI由其他处理器核触发(比如其他核写
GICD_SGIR指定当前核为目标)时,才会以异步IRQ或FIQ的形式送达当前核。
能否将SGI配置为IRQ?
可以,但需要满足两个关键条件:
- 配置GIC中断分组:通过
GICD_IGROUPR或GICR_IGROUPR寄存器,将目标SGI的中断号(0-15)配置到Group1(对应IRQ,Group0对应FIQ)。 - 采用异步触发方式:必须由其他核发起SGI触发操作,而非当前核自身执行写
GICD_SGIR指令。如果是当前核自触发,无论分组配置如何,都会被识别为同步异常。
额外提示:如果你的目标是在当前核触发异步IRQ,可考虑切换为其他异步中断源,或者通过核间通信机制让其他核向当前核发送SGI。
内容的提问来源于stack exchange,提问作者zoey1771
相关产品推荐
相关产品推荐

