brcmfmac: Set SDIO workqueue as WQ_HIGHPRI
authorSean Anderson <sean.anderson@seco.com>
Mon, 2 Aug 2021 17:09:04 +0000 (13:09 -0400)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 21 Aug 2021 16:58:58 +0000 (19:58 +0300)
This puts tasks submitted to the SDIO workqueue at the head of the queue
and runs them immediately. This gets higher RX throughput with the SDIO
bus.

This was originally submitted as [1]. The original author Wright Feng
reports

> throughput result with 43455(11ac) on 1 core 1.6 Ghz platform is
>     Without WQ_HIGGPRI TX/RX: 293/301 (mbps)
>     With    WQ_HIGHPRI TX/RX: 293/321 (mbps)

I tested this with a 43364(11bgn) on a 1 core 800 MHz platform and got
    Without WQ_HIGHPRI TX/RX: 16/19 (Mbits/sec)
    With    WQ_HIGHPRI TX/RX: 24/20 (MBits/sec)

[1] https://lore.kernel.org/linux-wireless/1584604406-15452-4-git-send-email-wright.feng@cypress.com/

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Arend van Spriel <aspriel@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210802170904.3116223-1-sean.anderson@seco.com
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c

index 232ba3e5622b24e60872f66a0d19ab3b15843f8f..baf36d79ed43741324d3149315bc6dbb0ef78a82 100644 (file)
@@ -4451,7 +4451,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
        bus->tx_seq = SDPCM_SEQ_WRAP - 1;
 
        /* single-threaded workqueue */
-       wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM,
+       wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM | WQ_HIGHPRI,
                                     dev_name(&sdiodev->func1->dev));
        if (!wq) {
                brcmf_err("insufficient memory to create txworkqueue\n");