Re: 2.4, b44 transmit timeout

Pekka Pietikainen
2003-09-09T22:14:15Z

On Mon, Sep 08, 2003 at 11:34:17AM +0200, Jan De Luyck wrote:
> On Tue, Sep 02, 2003 at 09:33:53AM +0200, Norbert Preining wrote:
>
> > A-ha! Thanks, I think this should be enough to figure out what the problem
> > is... Looks like the driver doesn't even get the packets pump tries to send,
> > pump is a bit special in the way it bounces the interface up and down when
> > doing its work, that probably triggers a race in b44..
>
> I can also easily recreate this by calling dhcpcd e.g. when the cable isn't in
> the socket yet. If i attach the cable then I see the interface coming up,
> going down, and then the NETDEV watchdog message.
>
> Unfortunatly this usually means that dhcpcd goes hanging. ifconfig hangs too
> if I try to use it, and rebooting must be forced with sysrq and an oops a
> alt-sysrq-o for poweroff...
Hi

(I was quite far away from civilization for a few days, which is why
I've been quiet on this topic for a while :-) )

Culd you try the patch Jeff Garzik posted as a fix for tg3
ifconfig down/up problems, I believe it fixes the same problem since
it's a generic thing with NAP

What I believe should happen after applying this patch is that the
b44 driver shouldn't hang as a result of doing tricks like the ones
mentioned. pump might not work even with it (If I understood correctly,
(pump & tg3 don't mix well either due to pump having some wrong assumptions
on when it can send packets). dhcpcd definately should work though.

--- SNIP --
Note that people seeing "ifconfig down ... ifconfig up" problems need to
apply this patch. (to 2.4.23-pre, too)

Jeff

[-- Attachment #2: patch --]
[-- Type: text/plain, Encoding: 7bit, Size: 0.5K --]

diff -Nru a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c Mon Sep 8 18:14:36 2003
+++ b/net/core/dev.c Mon Sep 8 18:14:36 2003
@@ -851,7 +851,11 @@
* engine, but this requires more changes in devices. */

smp_mb__after_clear_bit(); /* Commit netif_running(). */
- netif_poll_disable(dev);
+ while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
+ /* No hurry. */
+ current->state = TASK_INTERRUPTIBLE;
+ schedule_timeout(1);
+ }

-- SNIP --