diff options
author | Wen Gong <wgong@codeaurora.org> | 2019-11-15 08:21:03 +0100 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2019-11-25 12:47:28 +0100 |
commit | 67654b26c903de9949202f23f4864a74a09e22d5 (patch) | |
tree | d03a143a1b987d29b31f4281bd518a8f2d3755d6 /drivers/net/wireless/ath/ath10k/sdio.h | |
parent | ath10k: change max RX bundle size from 8 to 32 for sdio (diff) | |
download | linux-67654b26c903de9949202f23f4864a74a09e22d5.tar.xz linux-67654b26c903de9949202f23f4864a74a09e22d5.zip |
ath10k: add workqueue for RX path of sdio
For RX, it has two parts, one is to read data from sdio, another
is to indicate the packets to upper stack. Recently it has only
one thread to do all RX things, it results that it is sequential
for RX and low throughout, change RX to parallel for the two parts
will increase throughout.
This patch move the indication to a workqueue, it results in
significant performance improvement on RX path.
Udp rx throughout is 200Mbps without this patch, and it arrives
400Mbps with this patch.
Tested with QCA6174 SDIO with firmware
WLAN.RMH.4.4.1-00017-QCARMSWPZ-1
Signed-off-by: Wen Gong <wgong@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/sdio.h')
-rw-r--r-- | drivers/net/wireless/ath/ath10k/sdio.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/sdio.h b/drivers/net/wireless/ath/ath10k/sdio.h index 00bd4caa7fa1..9acaf0229cf2 100644 --- a/drivers/net/wireless/ath/ath10k/sdio.h +++ b/drivers/net/wireless/ath/ath10k/sdio.h @@ -187,6 +187,9 @@ struct ath10k_sdio { struct ath10k_sdio_bus_request bus_req[ATH10K_SDIO_BUS_REQUEST_MAX_NUM]; /* free list of bus requests */ struct list_head bus_req_freeq; + + struct sk_buff_head rx_head; + /* protects access to bus_req_freeq */ spinlock_t lock; @@ -213,6 +216,8 @@ struct ath10k_sdio { struct list_head wr_asyncq; /* protects access to wr_asyncq */ spinlock_t wr_async_lock; + + struct work_struct async_work_rx; }; static inline struct ath10k_sdio *ath10k_sdio_priv(struct ath10k *ar) |