AR6000 netif_queue_stop non stop, Bug?

Werner Almesberger werner at openmoko.org
Fri Mar 27 15:04:56 CET 2009


Ivan Petrov wrote:
> Changed: prevent rescheduling network queue at interface opened/connected.

Why is this a problem ?

> Removed: wake network queue at transmit complete.
> Added: wake network queue at packet queue limit not reached.

Thanks a lot ! The logic of your patch looks quite good and I like
it that you eliminated the redundant arNetQueueStopped mechanism.
What I haven't quite understood yet is why the old logic didn't work.
Or was the problem you hit a race condition ?

Also,

+static void ar6000_tx_queue_avail(void *Context, HTC_ENDPOINT_ID Endpoint)
[...]
+        if (((ar->arConnected == TRUE) || (bypasswmi))
+         && netif_queue_stopped (ar->arNetDev)) {
+            netif_wake_queue (ar->arNetDev);
+        }

Why not simply

	if ((ar->arConnected == TRUE) || (bypasswmi))
		netif_wake_queue(ar->arNetDev);

? (Minus the Pascalian parentheses, of course.)

> I have transfer speed limit, from Dev board APP to network, 
> 760-800kbytes/sec (6.0 - 6.4 mbit/sec) on AT91SAM9260, and can't  
> understand - it limit of card, driver, or it limit of AT91SAM9260...

That's roughly what I got as well. My test framework is described
here:

http://lists.openmoko.org/pipermail/openmoko-kernel/2009-March/009549.html

Does your SDIO driver support the SDIO interrupt or does it fall back
to polling ? The latter may limit performance. (However, let me add
that also Samuel's driver for the original Atheros SDIO stack that
does SDIO interrupts and even DMA is only marginally faster than what
we have now.)

- Werner



More information about the openmoko-kernel mailing list