Increase QLEN to avoid TX Queue overflow.
iperf testing results in poor throughput and massive reporting of:
        dhd_bus_txdata: out of bus->txq !!!
    
Also renamed QLEN/et al to reflect usage as TX queue parameters.
Tested with "dhd_doflow = true".
    
    Signed-off-by: Venkat Rao <[email protected]>
    Signed-off-by: Grant Grundler <[email protected]>
---
I'll submit another patch shortly to remove dhd_doflow since performance
is unusable without flow control.
 
diff --git a/drivers/staging/brcm80211/brcmfmac/dhd_sdio.c 
b/drivers/staging/brcm80211/brcmfmac/dhd_sdio.c
index 971d406..aaaf593 100644
--- a/drivers/staging/brcm80211/brcmfmac/dhd_sdio.c
+++ b/drivers/staging/brcm80211/brcmfmac/dhd_sdio.c
@@ -57,9 +57,9 @@
 #define DHDSDIO_MEM_DUMP_FNAME         "mem_dump"
 #endif
 
-#define QLEN           256     /* bulk rx and tx queue lengths */
-#define FCHI           (QLEN - 10)
-#define FCLOW          (FCHI / 2)
+#define TXQLEN         2048    /* bulk tx queue length */
+#define TXHI           (TXQLEN - 256)  /* turn on flow control above TXHI */
+#define TXLOW          (TXHI - 256)    /* turn off flow control below TXLOW */
 #define PRIOMASK       7
 
 #define TXRETRIES      2       /* # of retries for tx frames */
@@ -1119,7 +1119,7 @@ int dhd_bus_txdata(struct dhd_bus *bus, struct sk_buff 
*pkt)
                }
                dhd_os_sdunlock_txq(bus->dhd);
 
-               if ((pktq_len(&bus->txq) >= FCHI) && dhd_doflow)
+               if ((pktq_len(&bus->txq) >= TXHI) && dhd_doflow)
                        dhd_txflowcontrol(bus->dhd, 0, ON);
 
 #ifdef DHD_DEBUG
@@ -1218,7 +1218,7 @@ static uint dhdsdio_sendfromq(dhd_bus_t *bus, uint 
maxframes)
 
        /* Deflow-control stack if needed */
        if (dhd_doflow && dhd->up && (dhd->busstate == DHD_BUS_DATA) &&
-           dhd->txoff && (pktq_len(&bus->txq) < FCLOW))
+           dhd->txoff && (pktq_len(&bus->txq) < TXLOW))
                dhd_txflowcontrol(dhd, 0, OFF);
 
        return cnt;
@@ -5345,7 +5345,7 @@ dhdsdio_probe_attach(struct dhd_bus *bus, void *sdh, void 
*regsva, u16 devid)
        /* Set core control so an SDIO reset does a backplane reset */
        OR_REG(&bus->regs->corecontrol, CC_BPRESEN);
 
-       pktq_init(&bus->txq, (PRIOMASK + 1), QLEN);
+       pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
 
        /* Locate an appropriately-aligned portion of hdrbuf */
        bus->rxhdr = (u8 *) roundup((unsigned long)&bus->hdrbuf[0], 
DHD_SDALIGN);
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to