Re: timer_bh behaviour incorrect for 2.2.13?

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Thu, 9 Dec 1999 17:57:30 +0100 (CET)


On Thu, 9 Dec 1999, Andrea Arcangeli wrote:

> >could you try making run_bottom_halves do something like this:
> >
> > while ((active = get_active_bhs()) {
> > clear_active_bhs(active);
> > ...

++ __cli();

> > }
> >
> >does this solve your problem?
>
> That's the easy part and I just did it yesterday but I didn't posted it

well i guess we agree that the hard part is to find the problem that
causes the missed bh :-) fixing it sufficiently is a different matter.

> because it's not enough. You have also to clear irqs while reading the
> active_bhs and to take them cleared until you return from the irq (this in
> UP and UP is the simple case).
>
> In SMP you also need a spinlock in the middle of do_bottom_half().

(William isnt using SMP and i was suggesting a quick hack for him to try
out.)

> I was doing the complete patch now.

you have missed the _real_ reason why the above 'bug' was there. It's a
feature and prevents denial of service attacks. Especially wrt. networking
it's very easy to flood a box with bh traffic, and if we are not careful
then slower systems (routers) can effectively be locked up just by
bombarding them with small/tricky packets. So we were always intentionally
trying to guarantee that bhs do not get rerun infinitely.

-- mingo

-
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/