Wen Gong <wgong@xxxxxxxxxxxxxx> writes: > The transmission utilization ratio for sdio bus for small packet is > slow, because the space and time cost for sdio bus is same for large > length packet and small length packet. So the speed of data for large > length packet is higher than small length. > > Test result of different length of data: > > data packet(byte) cost time(us) calculated rate(Mbps) > 256 28 73 > 512 33 124 > 1024 35 234 > 1792 45 318 > 14336 168 682 > 28672 333 688 > 57344 660 695 > > This patch change the TX packet from single packet to a large length > bundle packet, max size is 32, it results in significant performance > improvement on TX path. > > This patch only effect sdio chip, it will not effect PCI, SNOC etc. > It only enable bundle for sdio chip. > > Tested with QCA6174 SDIO with firmware > WLAN.RMH.4.4.1-00017-QCARMSWP-1. > > Signed-off-by: Wen Gong <wgong@xxxxxxxxxxxxxx> [...] > --- a/drivers/net/wireless/ath/ath10k/core.c > +++ b/drivers/net/wireless/ath/ath10k/core.c > @@ -3208,6 +3208,11 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev, > if (!ar->workqueue_aux) > goto err_free_wq; > > + ar->workqueue_tx_complete = > + create_singlethread_workqueue("ath10k_tx_complete_wq"); > + if (!ar->workqueue_tx_complete) > + goto err_free_aux_wq; We already have three threads: ath/ath10k/core.c: ar->workqueue = create_singlethread_workqueue("ath10k_wq"); ath/ath10k/core.c: ar->workqueue_aux = create_singlethread_workqueue("ath10k_aux_wq"); ath/ath10k/sdio.c: ar_sdio->workqueue = create_singlethread_workqueue("ath10k_sdio_wq"); Do we really need a fourth one? For example, why can't we use ar->workqueue_aux? -- https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches