Thread (13 messages) 13 messages, 5 authors, 2012-04-23

Re: Sundance network driver (D-Link DFE-580TX) timeouts rendering interface unusable

From: Ben Hutchings <hidden>
Date: 2012-01-30 14:05:19

Possibly related (same subject, not in this thread)

On Mon, 2012-01-30 at 11:14 +0100, Eric Dumazet wrote:
Le lundi 30 janvier 2012 à 12:51 +0300, Denis Kirjanov a écrit :
quoted
I'll check this out. After kernel.org was cracked I've missed
@kernel.org mail account.

At first glance, start_tx() is racy against TX completion.

It does :

        if (np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 1 &&
            !netif_queue_stopped(dev)) {
                /* do nothing */
        } else {
                netif_stop_queue (dev);
        }

So it can call netif_stop_queue() while TX completion handler did a
cleanup of all queued packets right before.
Yes, I spotted that.  But no descriptors are pushed to the hardware
here; that's done in the driver's TX tasklet.  Although... maybe that
can run immediately when scheduled from here?  I've never had to deal
with tasklets so I really don't know their semantics.

Ben.
Note intr_handler() doesnt hold the queue spinlock when it does :

                if (netif_queue_stopped(dev) &&
                        np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 4) {
                        /* The ring is no longer full, clear busy flag. */
                        netif_wake_queue (dev);
                }

-- 
Ben Hutchings
Lowery's Law:
             If it jams, force it. If it breaks, it needed replacing anyway.

Attachments

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