[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