Hi Werner,
----- Original Message -----
From: "Werner Almesberger"
To: "Ivan Petrov"
Cc: <[email protected]>
Sent: Friday, March 27, 2009 5:04 PM
Subject: Re: AR6000 netif_queue_stop non stop, Bug?
Ivan Petrov wrote:
Changed: prevent rescheduling network queue at interface
opened/connected.
Why is this a problem ?
This is no problem, simle i think it not right start Queue and call
rescheduling, when Queue not have actual data. If I not right, always
posible remove it.
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 ?
http://lists.openmoko.org/pipermail/openmoko-kernel/2009-March/009643.html
I put this post yesterday, why it not in thread, i not know.
On old logic I have problems, netif_queue_stop realy not stop tx_queue. I
make stress test for transmit, multiply UDP packets 32k size.
Btw, on my original sources, queue length reducted to 1, and all load lay on
Kerner queue. But I remove it from patch, becouse not know how it will work
on control endpoint.
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.)
Soryy, not fully read Kernel source :) of course rescheduling not will call
on waked queue, you are right
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.)
Driver stop interrupt retriving after multi-block transfer :-(
I alpply patch for AT91 host contorller, now it depended at clockwork.
==================
diff -urN linux-2.6.28.8.orig/drivers/mmc/host/at91_mci.c
linux-2.6.28.8/drivers/mmc/host/at91_mci.c
--- linux-2.6.28.8.orig/drivers/mmc/host/at91_mci.c 2009-03-17
03:50:03.000000000 +0300
+++ linux-2.6.28.8/drivers/mmc/host/at91_mci.c 2009-03-22 01:08:53.000000000
+0300
@@ -1007,7 +1007,7 @@
mmc->f_min = 375000;
mmc->f_max = 25000000;
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
- mmc->caps = MMC_CAP_SDIO_IRQ;
+ mmc->caps = 0; // MMC_CAP_SDIO_IRQ;
mmc->max_blk_size = 4095;
mmc->max_blk_count = mmc->max_req_size;
==================
--
Regards, Ivan.