- 论坛徽章:
- 0
|
回复 5# smalloc
我看的 2.6.30版本,对__do_IRQ()与handle_edge_irq看起来差不多,代码中有这样一段说明:
503 /*
504 * Edge triggered interrupts need to remember
505 * pending events.
506 * This applies to any hw interrupts that allow a second
507 * instance of the same irq to arrive while we are in do_IRQ
508 * or in the handler. But the code here only handles the _second_
509 * instance of the irq, not the third or fourth. So it is mostly
510 * useful for irq hardware that does not mask cleanly in an
511 * SMP environment.
512 */
看来这就是答案了~level的mask是你说的防止不断中断,而edge这里设计的是用在允许两次中断嵌套的环境下,当然也可以加一个mask也没啥影响。
但还有一个问题没想明白,在mask的情况下,为何还要有对IRQ_INPROGRESS的判断?在mask的情况下PIC根本发不出同一种类型的irq |
|