On Fri, 2006-04-08 at 00:02 +1000, Herbert Xu wrote:

> Even if we get it wrong and wake up something that we shouldn't have,
> the xmit function will simply bail out and stop the queue for us.
> 

Infact thats close to what i was seeing. setup is:
eth0 tied to cpu 0
eth1 tied to cpu1

--> eth0 -- forward --> eth1
--> eth1 -- forward --> eth0

Take the example of eth1:
* It is actually being fed packets by cpu0 but is tied to cpu1.

The stop happens in cpu0 (99.99999% of the time) and the wake happens in
cpu1 (100% of the time)[1]. The wakes on most occasions dont even get to
run tx softirq on cpu1 since there is constant activity already
happening on cpu0. So that lock being grabbed was causing a collision on
the tx path which caused a requeue which caused a reschedule on cpu0 -
all this unnecessarily.

> Since this is exceedingly unlikely we should drop the locks rather
> than bother about it.

I should say that the fact that e1000 does its pruning of descriptors
only on the tx path makes the locking unnecessary when stopped.

cheers,
jamal

[1] As you may know this comes from testing your qdisc_is_running
change. I was hoping to induce a DOS attack such that a cpuX is busy
processing packets from another CPU (eg eth1 on cpu1) so that it forgets
to process its own receive path ;-> This is a theoretical possibility
with that change ;-> Clearly i failed given the % above ;->

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to