但是,令我困惑的是,当我检查do_IRQ函数时,
http://lxr.linux.no/linux+v3.6/arch/x86/kernel/irq.c#L181
我发现通过查找“vector_irq”数组来获取IRQ:
unsigned int __irq_entry do_IRQ(struct pt_regs *regs){ struct pt_regs *old_regs = set_irq_regs(regs); /* high bit used in ret_from_ code */ unsigned vector = ~regs->orig_ax; unsigned irq; ... irq = __this_cpu_read(vector_irq[vector]); // get the IRQ from the vector_irq // print out the vector_irq prink("cpu-ID:%d,vector: 0x%x - irq: %d",smp_processor_ID(),vector,irq); }
通过使用printk检测代码,我得到的vector-irq映射如下所示,我不知道为什么这是映射.我虽然映射应该是(irq 0x20 = vector),但似乎并非如此.
from: linux/arch/x86/include/asm/irq_vector.h* Vectors 0 ... 31 : system traps and exceptions - hardcoded events* Vectors 32 ... 127 : device interrupts = 0x20 – 0x7F
但我的输出是:
cpu-ID=0.Vector=0x56 (irq=58)cpu-ID=0.Vector=0x66 (irq=59)cpu-ID=0.Vector=0x76 (irq=60)cpu-ID=0.Vector=0x86 (irq=61)cpu-ID=0.Vector=0x96 (irq=62)cpu-ID=0.Vector=0xa6 (irq=63)cpu-ID=0.Vector=0xb6 (irq=64)
顺便说一下,这些irq是我的10GB以太网卡,启用了MSIX.谁能给我一些关于为什么这是映射的想法?制作这种映射的规则是什么?
谢谢.
威廉
x86 I / OAPIC中断控制器以16个为一组分配中断优先级,因此向量编号间隔开以防止它们相互干扰
(参见arch/x86/kernel/apic/io_apic.c中的函数__assign_irq_vector).
以上是内存溢出为你收集整理的linux-kernel – do_IRQ中的中断向量和irq映射全部内容,希望文章能够帮你解决linux-kernel – do_IRQ中的中断向量和irq映射所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)