Linux kernel Linux中断处理

Linux kernel Linux中断处理,linux-kernel,linux-device-driver,embedded-linux,Linux Kernel,Linux Device Driver,Embedded Linux,我试图理解Linux中断处理机制。我试着用谷歌搜索一下,但找不到这个问题的答案。有人能给我解释一下为什么handle_IRQ_事件需要在最后调用local_IRQ_disable吗?在此之后,控件返回do_irq,最终返回入口点。那么谁将使中断恢复。?这是中断处理程序的责任吗?如果是,为什么是这样 编辑 参考代码 asmlinkage int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, struct irqaction *ac

我试图理解Linux中断处理机制。我试着用谷歌搜索一下,但找不到这个问题的答案。有人能给我解释一下为什么handle_IRQ_事件需要在最后调用local_IRQ_disable吗?在此之后,控件返回do_irq,最终返回入口点。那么谁将使中断恢复。?这是中断处理程序的责任吗?如果是,为什么是这样

编辑 参考代码

asmlinkage int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, struct irqaction *action) 
{ 
    int status = 1; 
    int retval = 0; 

    if (!(action->flags & SA_INTERRUPT)) 
        local_irq_enable(); 
    do 
    { 
       status |= action->flags; 
       retval |= action->handler(irq, action->dev_id, regs); 
       action = action->next; 
    } 
    while (action); 

    if (status & SA_SAMPLE_RANDOM) 
        add_interrupt_randomness(irq);

    local_irq_disable(); 

    return retval; 
}

LDD3中的
handle\u IRQ\u event
版本似乎来自2.6.8内核,或者可能更早。假设我们处理的是x86,处理器在调用中断处理程序之前会清除EFLAGS寄存器中的中断标志(IF)。旧的EFLAGS寄存器将通过
iret
指令恢复

Linux的
SA_INTERRUPT
IRQ处理程序标志(现已过时)确定中断处理程序中是否允许更高优先级的中断。
SA_中断
标志是为使中断处于禁用状态的“快速”中断处理程序设置的。未为重新启用中断的“慢速”中断处理程序设置
SA_中断
标志

不管
SA_INTERRUPT
标志如何,
do_IRQ
本身在中断被禁用的情况下运行,并且在调用
handle_IRQ_event
时,中断仍然被禁用。由于
handle\u IRQ\u event
可以启用中断,因此在最后调用
local\u IRQ\u disable
可确保在返回
do\u IRQ
时再次禁用中断


i386体系结构的2.6.8内核中的相关源代码文件是
arch/i386/kernel/entry.S
,以及
arch/i386/kernel/irq.c

是否可以发布相关代码?你一直在看什么?没有任何上下文,我们无法帮助您。Antiduh,我指的是在handle_irq_事件函数的末尾使用local_irq_disable调用。?我知道。在你的问题中发布一些代码。ASMLINKING int handle_IRQ_事件(无符号int IRQ、结构pt_regs*regs、结构irqaction*action){int status=1;int retval=0;如果(!(操作->标志和SA_中断))本地IRQ_enable();do{status}=action->flags;retval}=action->handler(irq,action->dev_id,regs);action=action->next;}while(action);if(status&SA_SAMPLE_RANDOM)add_interru_randomanness(irq);local_irq_disable();return retval;}以上是LLD3中handle_IRQ_事件函数的实现。请告诉我这是否足够?Ian,感谢您的解释。