Messages in this thread | | | Date | Tue, 29 Feb 2000 00:10:57 +0100 (CET) | From | Andrea Arcangeli <> | Subject | Re: new IRQ scalability changes in 2.3.48 |
| |
On Tue, 29 Feb 2000, Linus Torvalds wrote:
>> - IRQ_PENDING: If I interpret the comment there correctly, the check is >> only necessary for faulty SMP hardware? > >It's only necessary for hardware that doesn't work the way we want it to >work.
More precisely it's necessary only with edge triggered irqs. That's why in the alpha port I added underlined check to improve performance:
for (;;) { handle_IRQ_event(irq, regs, action); spin_lock(&irq_controller_lock); if (!(desc->status & IRQ_PENDING) || (desc->status & IRQ_LEVEL)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ break; desc->status &= ~IRQ_PENDING; spin_unlock(&irq_controller_lock); }
On IA32 setting the status to IRQ_LEVEL during initialization is not necesary because IA32 can enforce by design that with level triggered irq that the same irq can't recurse in any way or run at the same time in parallel cpus. But the above makes much difference on alpha since it ensures we don't run the irq->handler a second time for no good reason.
Andrea
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |