2011-01-19 48 views

回答

3

由于几个原因,中断处理程序具有返回值。

  1. 中断向量可以在多个设备之间共享。通过返回IRQ_NONE/IRQ_HANDLED,中断处理程序可以指示中断是否来自它特别感兴趣的设备。如果返回IRQ_NONE,则应该调用列表中的下一个处理程序。
  2. 即使不共享IRQ,中断处理程序也可以向中断子系统指出处理中断时出现了问题,并且应该禁用它以防止系统从irq循环挂起。
+0

`IRQ_WAKE_THREAD`也可用于延迟处理更新的Linux内核。也就是说,它表示当前进程可能被中断以执行中断的一个*慢*部分。 – 2014-11-19 20:57:27

1

中断处理程序不是中断向量。中断向量是触发中断时处理器跳转到的代码。这是一个粗略的简化,但这里是它的外观:

interrupt_vector { 
    num = check_interrupt_number() 
    f = get_interrupt_handler_func(num); 
    d = get_interrupt_handler_data(num); 
    /* call interrupt handler */ 
    ret = f(d); 
    } 

所以处理程序和数据一起登记,并中断向量代码调用registererd处理程序,通过注册数据,并检查返回值。 当然,这里我们只有一级处理程序,但是您可以有多个处理程序,例如所有PCI Irq的处理程序,它们轮流检查特定PCI irq的注册处理程序,并最终调用它以传递注册数据等。 ..

当然,真正的代码往往要复杂得多。您可以尝试使用lxr link来浏览Linux内核源代码。

0

中断矢量代码与多个附接的中断处理程序(OS特定的)到一个中断处理程序—可以返回一个值(其通常进入像EAX在x86的寄存器),因此,矢量码可以管理一连串的处理程序。

相关问题