Re: new IRQ scalability changes in 2.3.48

From: Andrea Arcangeli (andrea@suse.de)
Date: Mon Feb 28 2000 - 18:10:57 EST


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/



This archive was generated by hypermail 2b29 : Tue Mar 07 2000 - 21:00:09 EST