【发布时间】:2018-10-27 20:24:25
【问题描述】:
我正在阅读 ARM 内核源代码以更好地理解并发现一些有趣的东西。
在arch/arm/kernel/entry-armv.S 内部有一个名为vector_stub 的宏,它生成一小块程序集,然后是各种ARM 模式的跳转表。例如,对vector_stub irq, IRQ_MODE, 4 的调用导致宏扩展为带有标签vector_irq 的主体; vector_dabt、vector_pabt、vector_und 和 vector_fiq 也是如此。
在这些 vector_* 跳转表中的每一个中,恰好有 1 个DWORD,其地址为带有_usr 后缀的标签。
我想确认我的理解是准确的,请见下文。
- 这是否意味着带有
_usr后缀的标签仅在该CPU 上执行的内核线程处于用户空间上下文时出现中断时才被执行?例如,irq_usr在内核线程处于用户空间上下文时发生中断时执行,dabt_usr在内核线程处于用户空间上下文时发生中断时执行,依此类推。 - 如果 [1] 为真,那么哪些内核线程负责处理,比如 irqs,具有不同的后缀,例如
irq_svc。我假设这是在 SVC 模式下发生的中断请求的处理程序。如果是这样,哪个内核线程处理这个?当前处于 SVC 模式的内核线程,在哪个 CPU 上接收中断? - 如果 [2] 为真,那么内核线程在什么时候完成对第二个中断的处理,并返回到它停止的位置(也在 SVC 模式下)?是
ret_from_intr吗?
【问题讨论】:
标签: linux linux-kernel arm interrupt