Notes:HW interrupt ID->IRQ number->中断描述符->中断处理handler 在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们称之中断描述符(struct irq_desc)。linux kernel中会有一个数据结构保存了关于所有IRQ的中断描述符信息,我们称之中断描述符DB(上图中红色框图内)。当发生中断后,首先获取触发...
2、machine driver对应的中断处理handler中会根据硬件的信息获取HW interrupt ID,并且通过irq domain模块翻译成IRQ number 3、调用该IRQ number对应的high level irq event handler,在这个high level的handler中,会通过和interupt controller交互,进行中断处理的flow control(处理中断的嵌套、抢占等),当然最终会遍历该中断...
这是因为要考虑中断嵌套的问题,一旦流控层或驱动程序主动通过local_irq_enable打开了IRQ,而此时该中断还没处理完成,新的irq请求到达,这时代码会再次进入irq_enter,在本次嵌套中断返回时,内核不希望进行抢占调度,而是要等到最外层的中断处理完成后才做出调度动作,所以才有了禁止抢占这一处理 再调用generic_handle_irq ...
以收包软中断为例, IRQ handler 并不执行 NAPI,只是触发它,在里面会执行到 raise NET_RX_SOFTIRQ;真正的执行在 softirq,里面会调用网卡的 poll() 方法收包。IRQ handler 中会调用napi_schedule(),然后启动 NAPI poll(), 这里需要注意,虽然 IRQ handler 做的事情非常少,但是接下来处理这个包的 softirq 和 IRQ...
* low byte and the number of interrupts received since * the last read in the remainder of rtc_irq_data. */spin_lock(&rtc_lock);rtc_irq_data+=0x100;rtc_irq_data&=~0xff;if(is_hpet_enabled()){/* * In this case it is HPET RTC interrupt handler ...
handle_domain_irq->generic_handle_irq进入中断通用层处理 generic_handle_irq->irq_to_desc通过IRQ Number获取对应的中断描述符 generic_handle_irq->generic_handle_irq_desc->__handle_irq_event_percpu:遍历中断描述符中的action链表,依次执行每个action中回调函数action->handler,对应e1000网卡驱动,执行e1000_intr...
对于一个使用Device tree的普通驱动程序(我们推荐这样做),基本上初始化需要调用irq_of_parse_and_map获取IRQ number,然后调用request_threaded_irq申请中断handler。 (4)irq_create_direct_mapping。这是给no map那种类型的interrupt controller使用的,这里不再赘述。
对于ARM64,irq_handler将调用gic_handle_irq gic_handle_irq首先读取中断寄存器得到硬件中断号,调用handle_domain_irq函数 handle_domain_irq->irq_enter进入中断上下文 handle_domain_irq->irq_find_mapping通过硬件中断号获取IRQ Number handle_domain_irq->generic_handle_irq进入中断通用层处理 ...
irq_handler #ifdef CONFIG_PREEMPT ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count cbnz x24, 1f // preempt count != 0 bl el1_preempt .macro irq_handler ldr_l x1, handle_arch_irq mov x0, sp irq_stack_entry blr x1
I cannot find what IRQ number to use in order to actually install the interrupt handler for EPIT... Does anybody know how to find the appropriate IRQ number? Thanks in advance, PS: my system runs Debian Linux 8 ("Jessie"), and thus the version 4.1.15 of the Linux kerne...