Re: new IRQ scalability changes in 2.3.48

From: Linus Torvalds (torvalds@transmeta.com)
Date: Mon Mar 13 2000 - 18:15:15 EST


On Tue, 14 Mar 2000, Andrea Arcangeli wrote:

> On Mon, 13 Mar 2000, Jamie Lokier wrote:
>
> >Note: In many cases, spinlock_irqsave doesn't need to do the
> >spinlock_depth thing on UP. [..]
>
> It doesn't need that in SMP either.
>
> >[..] However, not all cases: the code in the
> >lock region might wake up another task.
>
> If you wakeup another task you don't risk to get rescheduled before you
> drop the lock.

What Jamie is referring to is:

        spin_lock_irqsave(a); /* No-op - no counter increment */
        spin_lock(b); /* count = 1 */
        wakeup_other_task()
                spin_lock_irqsave(runqueue_list); /* no-op */
                .. wakeup, current->need_resched = 1;
                spin_unlock_irqsave(runqueue_list); /* no-op */
        spin_unlock(b); /* Decrement, count = 0; !!!! BOOM !!!!! */
        spin_unlock_irqrestore(b);

so IF you check for "needs_resched" after a spin_unlock(), then you can't
do the simple and efficient optimization I was talking about, because the
counters are not really precise - they rely on interrupts not happening.

Problems like this is why I'm a big believer in NOT overdesigning things.
Keep it simple and STUPID, and you'll live a healthy long life. And let's
not mess with SMP.

                Linus

-
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 : Wed Mar 15 2000 - 21:00:26 EST