From: Lorenzo Bianconi <lorenzo@kernel.org>
To: Felix Fietkau <nbd@nbd.name>
Cc: linux-wireless@vger.kernel.org, kvalo@kernel.org
Subject: Re: [PATCH wireless] wifi: mt76: fix crash with WED rx support enabled
Date: Fri, 8 Dec 2023 10:50:45 +0100 [thread overview]
Message-ID: <ZXLm9Xx5kBpRDwmY@lore-desk> (raw)
In-Reply-To: <20231208075004.69843-1-nbd@nbd.name>
[-- Attachment #1: Type: text/plain, Size: 2431 bytes --]
> If WED rx is enabled, rx buffers are added to a buffer pool that can be
> filled from multiple page pools. Because buffers freed from rx poll are
> not guaranteed to belong to the processed queue's page pool, lockless
> caching must not be used in this case.
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
>
> Cc: stable@vger.kernel.org
> Fixes: 2f5c3c77fc9b ("wifi: mt76: switch to page_pool allocator")
> Signed-off-by: Felix Fietkau <nbd@nbd.name>
> ---
> drivers/net/wireless/mediatek/mt76/dma.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index 511fe7e6e744..68ad915203aa 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -783,7 +783,7 @@ mt76_dma_rx_reset(struct mt76_dev *dev, enum mt76_rxq_id qid)
>
> static void
> mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,
> - int len, bool more, u32 info)
> + int len, bool more, u32 info, bool allow_direct)
> {
> struct sk_buff *skb = q->rx_head;
> struct skb_shared_info *shinfo = skb_shinfo(skb);
> @@ -795,7 +795,7 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,
>
> skb_add_rx_frag(skb, nr_frags, page, offset, len, q->buf_size);
> } else {
> - mt76_put_page_pool_buf(data, true);
> + mt76_put_page_pool_buf(data, allow_direct);
> }
>
> if (more)
> @@ -815,6 +815,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
> struct sk_buff *skb;
> unsigned char *data;
> bool check_ddone = false;
> + bool allow_direct = !mt76_queue_is_wed_rx(q);
> bool more;
>
> if (IS_ENABLED(CONFIG_NET_MEDIATEK_SOC_WED) &&
> @@ -855,7 +856,8 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
> }
>
> if (q->rx_head) {
> - mt76_add_fragment(dev, q, data, len, more, info);
> + mt76_add_fragment(dev, q, data, len, more, info,
> + allow_direct);
> continue;
> }
>
> @@ -884,7 +886,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
> continue;
>
> free_frag:
> - mt76_put_page_pool_buf(data, true);
> + mt76_put_page_pool_buf(data, allow_direct);
> }
>
> mt76_dma_rx_fill(dev, q, true);
> --
> 2.41.0
>
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2023-12-08 9:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-08 7:50 [PATCH wireless] wifi: mt76: fix crash with WED rx support enabled Felix Fietkau
2023-12-08 9:50 ` Lorenzo Bianconi [this message]
2023-12-11 13:13 ` Kalle Valo
2023-12-12 14:25 ` Kalle Valo
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=ZXLm9Xx5kBpRDwmY@lore-desk \
--to=lorenzo@kernel.org \
--cc=kvalo@kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=nbd@nbd.name \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.