Commit 26a71a40 authored by Grant Grundler's avatar Grant Grundler Committed by Greg Kroah-Hartman
Browse files

STAGING: brcm80211 fix TX Queue overflow



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: default avatarVenkat Rao <vrao@broadcom.com>
Signed-off-by: default avatarGrant Grundler <grundler@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fb44022f
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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);