From: Robert Olsson <robert@xxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <16233.64248.666702.679433@xxxxxxxxxxxx>
Date: Thu, 18 Sep 2003 20:35:36 +0200
To: Andrew Morton <akpm@xxxxxxxx>
Cc: Jeff Garzik <jgarzik@xxxxxxxxx>,
davem@xxxxxxxxxx,
netdev@xxxxxxxxxxx
Subject: Re: netif_poll_disable() hangs
In-Reply-To: <20030908002914.737122a9.akpm@xxxxxxxx>
References: <20030907232145.6ec197fd.akpm@xxxxxxxx>
<3F5C2D1A.5050500@xxxxxxxxx>
<20030908002914.737122a9.akpm@xxxxxxxx>
X-Mailer: VM 6.92 under Emacs 21.2.1
Andrew Morton writes:
> > >
> > > ifup eth0
> > > ifdown eth0
> > > ifup eth0
> > > ifdown eth0 <- hangs in dev_close -> netif_poll_disable()
> 2.4 does test_bit, 2.6 does test_and_set_bit.
Yeep. I noticed this too in 2.6.0-test5
--- include/linux/netdevice.h.orig 2003-09-08 21:50:31.000000000 +0200
+++ include/linux/netdevice.h 2003-09-17 17:27:58.000000000 +0200
@@ -830,9 +830,9 @@
local_irq_restore(flags);
}
-static inline void netif_poll_disable(struct net_device *dev)
+static inline void netif_poll_sync(struct net_device *dev)
{
- while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
+ while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
/* No hurry. */
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(1);
--- net/core/dev.c.orig 2003-09-08 21:50:06.000000000 +0200
+++ net/core/dev.c 2003-09-17 17:28:32.000000000 +0200
@@ -841,7 +841,7 @@
* engine, but this requires more changes in devices. */
smp_mb__after_clear_bit(); /* Commit netif_running(). */
- netif_poll_disable(dev);
+ netif_poll_sync(dev);
/*
* Call the device specific close. This cannot fail.
Cheers.
--ro
|