Stephen Hemminger wrote:
On Wed, 13 Sep 2006 21:04:02 -0500
Larry Finger <[EMAIL PROTECTED]> wrote:

Stephen Hemminger wrote:
On Wed, 13 Sep 2006 15:49:23 +0200
Michael Buesch <[EMAIL PROTECTED]> wrote:
Simple. Reading the code of synchronize_net() and
netif_stop_queue() and thinking about why it breaks, instead
of committing bugfixes that only substitute one bug by another. ;)
I'll take a look, too.
Why are you doing the synchronize_net()? it is meant for RCU.
We know and it no longer is in the code. We have known for a couple of days that it was the synchronize_net() step that led to the netdev timeouts, but we were afraid that a bare netif_stop_queue would not be SMP safe. The current structure has

mutex_lock
netif_tx_disable(dev)   (equivalent to  netif_tx_lock_bh(dev);
                                        netif_stop_queue(dev);
                                        netif_tx_unlock_bh(dev);
spin_lock_irqsafe

I see you listed as a maintainer in several network-related parts of the system, so AFAIK, you are a network guru. Do you think this will work? I have tested code with just a netif_stop_queue (without the lock_bh/unlock_bh parts) on a UP system and have gotten no errors, but I do not have access to SMP hardware.

Thanks,


I haven't done a careful review of the broadcom driver. What you
are proposing looks fine. But most network devices just use spin_lock's
rather than mutexs because there is little need for holding the lock
for a long length of time.

I didn't code this section, but I know that the processing that we are about to do after the mutex can be quite lengthy - perhaps as long as 200 ms. Prior to 2.6.18, it was protected with a spin_lock; however, there were complaints about the effect on latency, so the mutex approach was taken to allow this long section to be preemptible. At appropriate points in the processing, the program calls cond_resched() if the kernel has preemption configured. This change resulted in the timeouts of the subject, which we are now trying to fix.

Larry



-
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