linux-kernel – do_IRQ中的中断向量和irq映射
我正在使用 Linux 3.6.0的x86系统.对于某些实验,我需要知道IRQ如何映射到矢量.我从很多书中学到说,向量0x0到0x20用于陷阱和异常,从向量0x20开始用于外部器件中断.这也在源代码Linux / arch / x86 / include / asm / irq_vectors.h中定义 但是,令我困惑的是,当我检查do_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.谁能给我一些关于为什么这是映射的想法?制作这种映射的规则是什么? 谢谢. 解决方法irq编号(在软件中使用的编号)与矢量编号(中断控制器实际使用的编号)不同.x86 I / OAPIC中断控制器以16个为一组分配中断优先级,因此向量编号间隔开以防止它们相互干扰 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |