(no subject)

2 messages, 2 authors, 2003-09-18 · open the first message on its own page

(no subject)

From: Robert Olsson <hidden>
Date: 2003-09-18 18:35:36

From: Robert Olsson <redacted>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: [off-list ref]
Date: Thu, 18 Sep 2003 20:35:36 +0200
To: Andrew Morton <redacted>
Cc: Jeff Garzik <redacted>,
    davem@redhat.com,
    netdev@oss.sgi.com
Subject: Re: netif_poll_disable() hangs
In-Reply-To: [off-list ref]
References: [off-list ref]
	[off-list ref]
	[off-list ref]
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

Re: your mail

From: Jeff Garzik <hidden>
Date: 2003-09-18 19:38:42

On Thu, Sep 18, 2003 at 08:35:36PM +0200, Robert Olsson wrote:

This issue is already fixed in 2.4 and 2.5 :)

quoted hunk
--- 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);
This patch breaks tg3 build, and operation...
tg3 wants a different operation than net/core/dev.c.

	Jeff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help