All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislaw Gruszka <sgruszka@redhat.com>
To: Lorenzo Bianconi <lorenzo@kernel.org>
Cc: kvalo@codeaurora.org, linux-wireless@vger.kernel.org,
	nbd@nbd.name, lorenzo.bianconi@redhat.com,
	oleksandr@natalenko.name, netdev@vger.kernel.org
Subject: Re: [PATCH wireless-drivers 2/2] mt76: dma: fix buffer unmap with non-linear skbs
Date: Thu, 24 Oct 2019 10:18:16 +0200	[thread overview]
Message-ID: <20191024081816.GA2440@redhat.com> (raw)
In-Reply-To: <1f7560e10edd517bfd9d3c0dd9820e6f420726b6.1571868221.git.lorenzo@kernel.org>

On Thu, Oct 24, 2019 at 12:23:16AM +0200, Lorenzo Bianconi wrote:
> mt76 dma layer is supposed to unmap skb data buffers while keep txwi
> mapped on hw dma ring. At the moment mt76 wrongly unmap txwi or does
> not unmap data fragments in even positions for non-linear skbs. This
> issue may result in hw hangs with A-MSDU if the system relies on IOMMU
> or SWIOTLB. Fix this behaviour properly unmapping data fragments on
> non-linear skbs.

If we have to keep txwi mapped, before unmap fragments, when then
txwi is unmaped ?

Stanislaw

> Fixes: 17f1de56df05 ("mt76: add common code shared between multiple chipsets")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
>  drivers/net/wireless/mediatek/mt76/dma.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index c747eb24581c..8c27956875e7 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -93,11 +93,14 @@ static void
>  mt76_dma_tx_cleanup_idx(struct mt76_dev *dev, struct mt76_queue *q, int idx,
>  			struct mt76_queue_entry *prev_e)
>  {
> -	struct mt76_queue_entry *e = &q->entry[idx];
>  	__le32 __ctrl = READ_ONCE(q->desc[idx].ctrl);
> +	struct mt76_queue_entry *e = &q->entry[idx];
>  	u32 ctrl = le32_to_cpu(__ctrl);
> +	bool mcu = e->skb && !e->txwi;
> +	bool first = e->skb == DMA_DUMMY_DATA || e->txwi == DMA_DUMMY_DATA ||
> +		     (e->skb && !skb_is_nonlinear(e->skb));
>  
> -	if (!e->txwi || !e->skb) {
> +	if (!first || mcu) {
>  		__le32 addr = READ_ONCE(q->desc[idx].buf0);
>  		u32 len = FIELD_GET(MT_DMA_CTL_SD_LEN0, ctrl);
>  
> @@ -105,7 +108,8 @@ mt76_dma_tx_cleanup_idx(struct mt76_dev *dev, struct mt76_queue *q, int idx,
>  				 DMA_TO_DEVICE);
>  	}
>  
> -	if (!(ctrl & MT_DMA_CTL_LAST_SEC0)) {
> +	if (!(ctrl & MT_DMA_CTL_LAST_SEC0) ||
> +	    e->txwi == DMA_DUMMY_DATA) {
>  		__le32 addr = READ_ONCE(q->desc[idx].buf1);
>  		u32 len = FIELD_GET(MT_DMA_CTL_SD_LEN1, ctrl);
>  
> -- 
> 2.21.0
> 


  parent reply	other threads:[~2019-10-24  8:18 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-23 22:23 [PATCH wireless-drivers 0/2] fix mt76x2e hangs on U7612E mini-pcie Lorenzo Bianconi
2019-10-23 22:23 ` [PATCH wireless-drivers 1/2] mt76: mt76x2e: disable pcie_aspm by default Lorenzo Bianconi
2019-10-24  5:03   ` Kalle Valo
2019-10-24  8:08     ` Lorenzo Bianconi
2019-10-24 19:41   ` Heiner Kallweit
2019-10-24 21:54     ` Lorenzo Bianconi
2019-10-24 22:19       ` Heiner Kallweit
2019-10-24 23:07         ` Lorenzo Bianconi
2019-10-25 10:56           ` Heiner Kallweit
2019-10-25 11:46             ` Lorenzo Bianconi
2019-10-25 17:00               ` Heiner Kallweit
2019-10-25 17:35                 ` Lorenzo Bianconi
2019-10-26  1:38   ` kbuild test robot
2019-10-26  1:38     ` kbuild test robot
2019-10-23 22:23 ` [PATCH wireless-drivers 2/2] mt76: dma: fix buffer unmap with non-linear skbs Lorenzo Bianconi
2019-10-24  6:30   ` Felix Fietkau
2019-10-24  8:57     ` Lorenzo Bianconi
2019-10-24  8:18   ` Stanislaw Gruszka [this message]
2019-10-24  9:01     ` Lorenzo Bianconi
2019-10-25  9:02       ` Stanislaw Gruszka
2019-10-24  6:19 ` [PATCH wireless-drivers 0/2] fix mt76x2e hangs on U7612E mini-pcie Oleksandr Natalenko

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=20191024081816.GA2440@redhat.com \
    --to=sgruszka@redhat.com \
    --cc=kvalo@codeaurora.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=lorenzo.bianconi@redhat.com \
    --cc=lorenzo@kernel.org \
    --cc=nbd@nbd.name \
    --cc=netdev@vger.kernel.org \
    --cc=oleksandr@natalenko.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.