如何知道哪个内核发送了处理器间中断?

Posted

技术标签:

【中文标题】如何知道哪个内核发送了处理器间中断?【英文标题】:How to know which core that send the inter-processor interrupt? 【发布时间】:2019-10-28 03:19:54 【问题描述】:

我正在研究 ARM64。我在void handle_IPI(int ipinr, struct pt_regs *regs) 中的linux/arch/arm64/kernel/smp.c 中添加了一个处理器间中断(IPI)处理程序。

当我得到一个 IPI 时,我想知道哪个内核发送这个 IPI。比如core 3发送一个IPI给core 0,然后core 0得到这个IPI,我想知道这个IPI是来自core 3的IPI handler。

有办法吗?

非常感谢。

【问题讨论】:

【参考方案1】:

我最近正在研究 cortex-A9 平台上的 IPI,它使用 ARM GIC 作为中断控制器。经过一些代码阅读,我发现核心信息丢失在irq-gic.c中。也许您应该修改handle_IPI 原型或在handle_IPI 之前调用您的特定IPI 处理程序。两者都是使用触发器信息添加自定义 IPI 处理程序的丑陋方式。

【讨论】:

以上是关于如何知道哪个内核发送了处理器间中断?的主要内容,如果未能解决你的问题,请参考以下文章

中断处理程序使用哪个堆栈 - Linux

进程间通信之-信号signal--linux内核剖析

linux信号-------初涉

对于共享中断线,如何找到要使用的中断处理程序?

Linux内核17-硬件如何处理中断和异常

Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?