Skip to content

Commit

Permalink
STAGING: brcm80211 fix TX Queue overflow
Browse files Browse the repository at this point in the history
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 <vrao@broadcom.com>
Signed-off-by: Grant Grundler <grundler@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Grant Grundler authored and Greg Kroah-Hartman committed Mar 9, 2011
1 parent fb44022 commit 26a71a4
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/staging/brcm80211/brcmfmac/dhd_sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -5343,7 +5343,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);
Expand Down

0 comments on commit 26a71a4

Please sign in to comment.