linux内核中断处理程序的返回值

时间:2011-01-19 07:03:02

标签: linux linux-kernel

中断处理程序异步发生,因此无法被其他函数调用。那么,为什么linux内核中的中断处理程序返回一个值?如何将输入参数传递给它?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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内核源代码

答案 2 :(得分:0)

中断向量代码与多个连接的中断处理程序(特定于操作系统)到 中断处理程序可以返回一个值(通常进入x86上的EAX等寄存器),因此向量代码可以管理一系列处理程序。