在IRQ A的中断描述符的threaded interrupt handler中进行IRQ number的映射,在IO expander irq domain上翻译出具体外设的IRQ number,并直接调用handle_nested_irq函数处理该IRQ; IRQ B、IRQ C对应的中断描述符设定IRQ_NESTED_THREAD的flag,表明这是一个nested IRQ; nested IRQ没有handle_irq,也没有primary handler,它...
以收包软中断为例, IRQ handler 并不执行 NAPI,只是触发它,在里面会执行到 raise NET_RX_SOFTIRQ;真正的执行在 softirq,里面会调用网卡的 poll() 方法收包。IRQ handler 中会调用 napi_schedule(),然后启动 NAPI poll(), 这里需要注意,虽然 IRQ handler 做的事情非常少,但是接下来处理这个包的 softirq 和 I...
struct irq_desc irq_desc[NR_IRQS]; /** * struct irq_desc - interrupt descriptor * @irq: interrupt number for this descriptor * @timer_rand_state: pointer to timer rand state struct * @kstat_irqs: irq stats per cpu * @irq_2_iommu: iommu with this irq * @handle_irq: highlevel irq...
(b) vector_und + stubs_offset W(ldr) pc, .LCvswi + stubs_offset W(b) vector_pabt + stubs_offset W(b) vector_dabt + stubs_offset W(b) vector_addrexcptn + stubs_offset W(b) vector_irq + stubs_offset W(b) vector_fiq + stubs_offset .globl __vectors_end __vectors_end: .....
当CPU接收到IRQ中断时,首先会到中断向量表处执行irq_handler: 这汇编代码意思是执行 handle_arch_irq 函数。 /* * Interrupt handling. */ .macroirq_handler #ifdef CONFIG_MULTI_IRQ_HANDLER ldrr1,=handle_arch_irq movr0,sp adrlr,BSYM(9997f) ...
进入irq模式,切换到svc模式,保存现场; 读取GIC irq chip 获取是哪个硬件中断number,这个Hw int number是SOC硬件设计确定的;对于GIC Share Peripheral Interrupt(SPI),一般是一个soc controller对应一个Hw int number; 找到这个Hw int 对应的interrupt descriptor,(struct irq_desc);call 其handle_irq(high level irq...
VMLINUX_SYMBOL(__irqchip_begin) = .; *(__irqchip_of_table) *(__irqchip_of_end) #endif 在内核启动初始化中断的函数中,of_irq_init 函数会去查找设备节点信息,该函数的传入参数就是 __irqchip_of_table 段,由于 IRQCHIP_DECLARE 已经将信息填充好了,of_irq_init 函数会根据 “arm,gic-v3” 去...
this file to instruct the kernel which CPUs it should use for handling the IRQ....
中断亲和性的设置的通用函数为 irq_set_affinity,后面会做详细介绍。 中断状态机 中断处理的状态机如下图: Inactive:无中断状态,即没有 Pending 也没有 Active。 Pending:硬件或软件触发了中断,该中断事件已经通过硬件信号通知到 GIC,等待 GIC 分配的那个 CPU 进行处理,在电平触发模式下,产生中断的同时保持 Pending...
R14_irq = 要执行的下条指令地址 + 4 //这里的下条指令是相对于被中断指令的下条。即返回地址 SPSR_irq = CPSR //保存的现场状态,r0到r12要由我们软件来保存(如果需要的话)。 CPSR[4:0] = 0b10010 //进入中断模式 CPSR[5] = 0 //在ARM模式下执行(不是Thumb下) ...