From: Sriram R <srirrama@codeaurora.org>
To: ath11k@lists.infradead.org
Subject: Re: [PATCH] ath11k: Fix skb_panic observed during msdu coalescing
Date: Wed, 14 Aug 2019 10:45:47 +0530 [thread overview]
Message-ID: <ae33c58f7d58ad01a185b40143aec5e2@codeaurora.org> (raw)
In-Reply-To: <1565755661-811-1-git-send-email-srirrama@codeaurora.org>
Please drop this patch. Will send V2 with minor changes to variable
names
On 2019-08-14 09:37, Sriram R wrote:
> skb_panic is hit during msdu coalescing whenever
> enough tailroom is not allocated based on the remaining
> msdu length which is spread across in different rx buffers.
>
> Compute the extra length for resizing the skb based on
> the total msdu length and the msdu length of the first buffer.
>
> Signed-off-by: Sriram R <srirrama@codeaurora.org>
> ---
> drivers/net/wireless/ath/ath11k/dp_rx.c | 28
> +++++++++++++++++-----------
> 1 file changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c
> b/drivers/net/wireless/ath/ath11k/dp_rx.c
> index 7d6b0c3..27d526b 100644
> --- a/drivers/net/wireless/ath/ath11k/dp_rx.c
> +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
> @@ -1362,25 +1362,32 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct
> ath11k_base *ab,
> static int ath11k_dp_rx_msdu_coalesce(struct ath11k *ar,
> struct sk_buff_head *msdu_list,
> struct sk_buff *first, struct sk_buff *last,
> - u8 l3pad_bytes, int msdu_len)
> + u8 l3pad_bytes, int msdu_total_len)
> {
> struct sk_buff *skb;
> struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(first);
> + int msdu_first_offset, msdu_first_len;
> struct hal_rx_desc *ldesc;
> int space_extra;
> int rem_len;
> int buf_len;
>
> + /* As the msdu is spread across multiple rx buffers,
> + * find the offset to the start of msdu for computing
> + * the length of the msdu in the first buffer.
> + */
> + msdu_first_offset = HAL_RX_DESC_SIZE + l3pad_bytes;
> + msdu_first_len = DP_RX_BUFFER_SIZE - msdu_first_offset;
> +
> if (!rxcb->is_continuation) {
> - skb_put(first, HAL_RX_DESC_SIZE + l3pad_bytes + msdu_len);
> - skb_pull(first, HAL_RX_DESC_SIZE + l3pad_bytes);
> + skb_put(first, msdu_first_offset + msdu_total_len);
> + skb_pull(first, msdu_first_offset);
> return 0;
> }
>
> - if (WARN_ON_ONCE(msdu_len <= (DP_RX_BUFFER_SIZE -
> - (HAL_RX_DESC_SIZE + l3pad_bytes)))) {
> - skb_put(first, HAL_RX_DESC_SIZE + l3pad_bytes + msdu_len);
> - skb_pull(first, HAL_RX_DESC_SIZE + l3pad_bytes);
> + if (WARN_ON_ONCE(msdu_total_len <= msdu_first_len)) {
> + skb_put(first, msdu_first_offset + msdu_total_len);
> + skb_pull(first, msdu_first_offset);
> return 0;
> }
>
> @@ -1393,9 +1400,9 @@ static int ath11k_dp_rx_msdu_coalesce(struct
> ath11k *ar,
> * in the first buf is of length DP_RX_BUFFER_SIZE -
> HAL_RX_DESC_SIZE.
> */
> skb_put(first, DP_RX_BUFFER_SIZE);
> - skb_pull(first, HAL_RX_DESC_SIZE + l3pad_bytes);
> + skb_pull(first, msdu_first_offset);
>
> - space_extra = msdu_len - (DP_RX_BUFFER_SIZE + skb_tailroom(first));
> + space_extra = msdu_total_len - (msdu_first_len +
> skb_tailroom(first));
> if (space_extra > 0 &&
> (pskb_expand_head(first, 0, space_extra, GFP_ATOMIC) < 0)) {
> /* Free up all buffers of the MSDU */
> @@ -1415,8 +1422,7 @@ static int ath11k_dp_rx_msdu_coalesce(struct
> ath11k *ar,
> */
> ath11k_dp_rx_desc_end_tlv_copy(rxcb->rx_desc, ldesc);
>
> - rem_len = msdu_len -
> - (DP_RX_BUFFER_SIZE - HAL_RX_DESC_SIZE - l3pad_bytes);
> + rem_len = msdu_total_len - msdu_first_len;
> while ((skb = __skb_dequeue(msdu_list)) != NULL && rem_len > 0) {
> rxcb = ATH11K_SKB_RXCB(skb);
> if (rxcb->is_continuation)
_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k
prev parent reply other threads:[~2019-08-14 5:15 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-14 4:07 [PATCH] ath11k: Fix skb_panic observed during msdu coalescing Sriram R
2019-08-14 5:15 ` Sriram R [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ae33c58f7d58ad01a185b40143aec5e2@codeaurora.org \
--to=srirrama@codeaurora.org \
--cc=ath11k@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox