我想了解在Linux中x86_64有哪些不同类型的IPI可用。特别是,我想找出IPI中断的不同中断处理程序。
在Daniel P. Bovet和Marco Cesati的《理解Linux内核》第3版中,https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch04s06.html列出了三种IPI:
然而在最新的内核中,我发现在arch/x86/include/asm/entry_arch.h中有以下评论。
在Daniel P. Bovet和Marco Cesati的《理解Linux内核》第3版中,https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch04s06.html列出了三种IPI:
CALL_FUNCTION_VECTOR
RESCHEDULE_VECTOR
INVALIDATE_TLB_VECTOR
然而在最新的内核中,我发现在arch/x86/include/asm/entry_arch.h中有以下评论。
* This file is designed to contain the BUILD_INTERRUPT specifications for
* all of the extra named interrupt vectors used by the architecture.
* Usually this is the Inter Process Interrupts (IPIs)
*/
/*
* The following vectors are part of the Linux architecture, there
* is no hardware IRQ pin equivalent for them, they are triggered
* through the ICC by us (IPIs)
请问这个文件中列出的所有向量都是 x86_64 的不同种类的 IPI 吗?对于 ARM,我找到了一个统一的处理程序 - handle_IPI() 来处理所有的 IPI。使用 switch case 语句来确定哪个 IPI。