[RFC v3 07/11] ath10k: various fixes for high latency devices
Kalle Valo
kvalo at qca.qualcomm.com
Fri Dec 22 07:43:55 PST 2017
Erik Stromdahl <erik.stromdahl at gmail.com> writes:
> Several DMA related functions (such as the dma_map_xxx functions)
> are not used with high latency devices and don't need to be invoked
> in this case.
>
> A few other execution paths are not applicable for high latency
> devices and can be skipped.
>
> Signed-off-by: Erik Stromdahl <erik.stromdahl at gmail.com>
This and patch 6 are somehow connected but the division is not clear. I
think at least dma map/unmap changes should be split into their own
patch.
I recommend revisiting both patches 6 and 7. The htt layer can be quite
tricky so better to have smaller logical changes to make it easier
review them.
> --- a/drivers/net/wireless/ath/ath10k/htt_tx.c
> +++ b/drivers/net/wireless/ath/ath10k/htt_tx.c
> @@ -409,6 +409,9 @@ int ath10k_htt_tx_start(struct ath10k_htt *htt)
> if (htt->tx_mem_allocated)
> return 0;
>
> + if (ar->is_high_latency)
> + return 0;
> +
> ret = ath10k_htt_tx_alloc_buf(htt);
> if (ret)
> goto free_idr_pending_tx;
> @@ -445,7 +448,8 @@ void ath10k_htt_tx_destroy(struct ath10k_htt *htt)
> return;
>
> ath10k_htt_tx_free_cont_txbuf(htt);
> - ath10k_htt_tx_free_txq(htt);
> + if (!htt->ar->is_high_latency)
> + ath10k_htt_tx_free_txq(htt);
> ath10k_htt_tx_free_cont_frag_desc(htt);
> ath10k_htt_tx_free_txdone_fifo(htt);
> htt->tx_mem_allocated = false;
These two don't look symmetric. You prevent calling these functions:
ath10k_htt_tx_alloc_cont_txbuf(htt);
ath10k_htt_tx_alloc_cont_frag_desc(htt);
ath10k_htt_tx_alloc_txq(htt);
ath10k_htt_tx_alloc_txdone_fifo(htt);
But during destroy you only prevent calling ath10k_htt_tx_free_txq(htt)
and allow these functions:
ath10k_htt_tx_free_cont_txbuf(htt);
ath10k_htt_tx_free_cont_frag_desc(htt);
ath10k_htt_tx_free_txdone_fifo(htt);
--
Kalle Valo
More information about the ath10k
mailing list