[PATCH 07/50] wifi: ath12k: add dbring.c
Jeff Johnson
quic_jjohnson at quicinc.com
Mon Aug 15 12:55:57 PDT 2022
On 8/12/2022 9:09 AM, Kalle Valo wrote:
> From: Kalle Valo <quic_kvalo at quicinc.com>
>
> (Patches split into one patch per file for easier review, but the final
> commit will be one big patch. See the cover letter for more info.)
>
> Signed-off-by: Kalle Valo <quic_kvalo at quicinc.com>
> ---
> drivers/net/wireless/ath/ath12k/dbring.c | 356 +++++++++++++++++++++++++++++++
> 1 file changed, 356 insertions(+)
>
> diff --git a/drivers/net/wireless/ath/ath12k/dbring.c b/drivers/net/wireless/ath/ath12k/dbring.c
> new file mode 100644
> index 000000000000..92824c0f245e
> --- /dev/null
> +++ b/drivers/net/wireless/ath/ath12k/dbring.c
snip
> +static int ath12k_dbring_fill_bufs(struct ath12k *ar,
> + struct ath12k_dbring *ring,
> + gfp_t gfp)
> +{
> + struct ath12k_dbring_element *buff;
> + struct hal_srng *srng;
> + int num_remain, req_entries, num_free;
> + u32 align;
> + int size, ret;
> +
> + srng = &ar->ab->hal.srng_list[ring->refill_srng.ring_id];
there are several references to ar->ab in this function.
suggest being consistent with ath12k_dbring_bufs_replenish() and define:
struct ath12k_base *ab = ar->ab;
and then s/ar->ab/ab/ in those accesses
this suggestion applies to other functions below since there are
multiple functions which have multiple ar->ab dereferences
> +
> + spin_lock_bh(&srng->lock);
> +
> + num_free = ath12k_hal_srng_src_num_free(ar->ab, srng, true);
> + req_entries = min(num_free, ring->bufs_max);
> + num_remain = req_entries;
> + align = ring->buf_align;
> + size = sizeof(*buff) + ring->buf_sz + align - 1;
> +
> + while (num_remain > 0) {
> + buff = kzalloc(size, gfp);
> + if (!buff)
> + break;
> +
> + ret = ath12k_dbring_bufs_replenish(ar, ring, buff, gfp);
> + if (ret) {
> + ath12k_warn(ar->ab, "failed to replenish db ring num_remain %d req_ent %d\n",
> + num_remain, req_entries);
> + kfree(buff);
> + break;
> + }
> + num_remain--;
> + }
> +
> + spin_unlock_bh(&srng->lock);
> +
> + return num_remain;
> +}
> +
snip
> +int ath12k_dbring_buf_setup(struct ath12k *ar,
> + struct ath12k_dbring *ring,
> + struct ath12k_dbring_cap *db_cap)
> +{
> + struct ath12k_base *ab = ar->ab;
> + struct hal_srng *srng;
> + int ret;
> +
> + srng = &ab->hal.srng_list[ring->refill_srng.ring_id];
> + ring->bufs_max = ring->refill_srng.size /
> + ath12k_hal_srng_get_entrysize(ab, HAL_RXDMA_DIR_BUF);
> +
> + ring->buf_sz = db_cap->min_buf_sz;
> + ring->buf_align = db_cap->min_buf_align;
> + ring->pdev_id = db_cap->pdev_id;
> + ring->hp_addr = ath12k_hal_srng_get_hp_addr(ar->ab, srng);
> + ring->tp_addr = ath12k_hal_srng_get_tp_addr(ar->ab, srng);
s/ar->ab/ab/ in both of the above since you already have ab = ar->ab
> +
> + ret = ath12k_dbring_fill_bufs(ar, ring, GFP_KERNEL);
> +
> + return ret;
> +}
More information about the ath12k
mailing list