Message ID | 20200813070017.89023-1-wright.feng@cypress.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9a2a0862d973c9eab6a1f3efa0d4d18dcedbaf1a |
Delegated to: | Kalle Valo |
Headers | show |
Series | brcmfmac: reserve tx credit only when txctl is ready to send | expand |
Wright Feng <wright.feng@cypress.com> writes: > The 4329 throughput drops from 40.2 Mbits/sec to 190 Kbits/sec in 2G > 11n mode because the commit b41c232d33666 ("brcmfmac: reserve 2 credits > for host tx control path"). To fix the issue, host driver only reserves > tx control credit when there is a txctl frame is pending to send. And > we also check available credit by using "not equal to 0" instead of > "greater than 0" because tx_max and tx_seq are circled positive numbers. > > Reported-by: Dmitry Osipenko <digetx@gmail.com> > Fixes: b41c232d33666 ("brcmfmac: reserve 2 credits for host tx control > path") Fixes tag should be in one line, but I can fix it. > Signed-off-by: Wright Feng <wright.feng@cypress.com> > Tested-by: Dmitry Osipenko <digetx@gmail.com> And I'll queue this to v5.9.
Wright Feng <wright.feng@cypress.com> wrote: > The 4329 throughput drops from 40.2 Mbits/sec to 190 Kbits/sec in 2G > 11n mode because the commit b41c232d33666 ("brcmfmac: reserve 2 credits > for host tx control path"). To fix the issue, host driver only reserves > tx control credit when there is a txctl frame is pending to send. And > we also check available credit by using "not equal to 0" instead of > "greater than 0" because tx_max and tx_seq are circled positive numbers. > > Reported-by: Dmitry Osipenko <digetx@gmail.com> > Fixes: b41c232d33666 ("brcmfmac: reserve 2 credits for host tx control path") > Signed-off-by: Wright Feng <wright.feng@cypress.com> > Tested-by: Dmitry Osipenko <digetx@gmail.com> Patch applied to wireless-drivers.git, thanks. 9a2a0862d973 brcmfmac: reserve tx credit only when txctl is ready to send
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index e8712ad3ac45..3c07d1bbe1c6 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -664,9 +664,15 @@ static void pkt_align(struct sk_buff *p, int len, int align) /* To check if there's window offered */ static bool data_ok(struct brcmf_sdio *bus) { - /* Reserve TXCTL_CREDITS credits for txctl */ - return (bus->tx_max - bus->tx_seq) > TXCTL_CREDITS && - ((bus->tx_max - bus->tx_seq) & 0x80) == 0; + u8 tx_rsv = 0; + + /* Reserve TXCTL_CREDITS credits for txctl when it is ready to send */ + if (bus->ctrl_frame_stat) + tx_rsv = TXCTL_CREDITS; + + return (bus->tx_max - bus->tx_seq - tx_rsv) != 0 && + ((bus->tx_max - bus->tx_seq - tx_rsv) & 0x80) == 0; + } /* To check if there's window offered */