All of lore.kernel.org
 help / color / mirror / Atom feed
From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] dmaengine: at_hdmac: fix race condition in atc_advance_work()
Date: Tue, 16 Apr 2013 18:45:19 +0530	[thread overview]
Message-ID: <20130416131519.GL12436@intel.com> (raw)
In-Reply-To: <1366112974-32043-1-git-send-email-nicolas.ferre@atmel.com>

On Tue, Apr 16, 2013 at 01:49:34PM +0200, Nicolas Ferre wrote:
> From: Ludovic Desroches <ludovic.desroches@atmel.com>
> 
> The BUG_ON() directive is triggered probably due to a latency modification
> following inclusion of c10d736 (softirq: reduce latencies).
> This condition has not been met before 3.9-rc1 and doesn't trigger without
> this patch.
> 
> We now make sure that DMA channel is idle before calling atc_complete_all()
> which makes the BUG_ON() "protection" useless.
> 
> Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
> ---
> Linus,
> 
> We have identified a race condition on the Atmel ARM-based AT91 DMA controller
> driver that leads to hitting a BUG_ON() directive.
> This error, only triggered after the inclusion of a patch that reduces the
> softirq latency, is affecting several AT91 SoCs and can be seen
> as a regression by people using the dmaengine driver (on NAND flash
> accesses for instance).
> 
> I know that it is late in the development cycle but can you please consider
> including it in your tree before 3.9-final?
> 
> This patch can also go through dmaengine tree (Vinod Koul) but I do not know if
> there is enough time remaining.
> 
> Thanks a lot, best regards,
> 
> Nicolas Ferre
> 
> 
>  drivers/dma/at_hdmac.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
> index 6e13f26..88cfc61 100644
> --- a/drivers/dma/at_hdmac.c
> +++ b/drivers/dma/at_hdmac.c
> @@ -310,8 +310,6 @@ static void atc_complete_all(struct at_dma_chan *atchan)
>  
>  	dev_vdbg(chan2dev(&atchan->chan_common), "complete all\n");
>  
> -	BUG_ON(atc_chan_is_enabled(atchan));
> -
>  	/*
>  	 * Submit queued descriptors ASAP, i.e. before we go through
>  	 * the completed ones.
> @@ -368,6 +366,9 @@ static void atc_advance_work(struct at_dma_chan *atchan)
>  {
>  	dev_vdbg(chan2dev(&atchan->chan_common), "advance_work\n");
>  
> +	if (atc_chan_is_enabled(atchan))
> +		return;
> +
>  	if (list_empty(&atchan->active_list) ||
>  	    list_is_singular(&atchan->active_list)) {
>  		atc_complete_all(atchan);
> @@ -1078,9 +1079,7 @@ static void atc_issue_pending(struct dma_chan *chan)
>  		return;
>  
>  	spin_lock_irqsave(&atchan->lock, flags);
> -	if (!atc_chan_is_enabled(atchan)) {
> -		atc_advance_work(atchan);
> -	}
> +	atc_advance_work(atchan);
>  	spin_unlock_irqrestore(&atchan->lock, flags);
>  }
>  
> -- 
> 1.8.0
> 

WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vinod.koul@intel.com>
To: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: torvalds@linux-foundation.org,
	Ludovic Desroches <ludovic.desroches@atmel.com>,
	Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] dmaengine: at_hdmac: fix race condition in atc_advance_work()
Date: Tue, 16 Apr 2013 18:45:19 +0530	[thread overview]
Message-ID: <20130416131519.GL12436@intel.com> (raw)
In-Reply-To: <1366112974-32043-1-git-send-email-nicolas.ferre@atmel.com>

On Tue, Apr 16, 2013 at 01:49:34PM +0200, Nicolas Ferre wrote:
> From: Ludovic Desroches <ludovic.desroches@atmel.com>
> 
> The BUG_ON() directive is triggered probably due to a latency modification
> following inclusion of c10d736 (softirq: reduce latencies).
> This condition has not been met before 3.9-rc1 and doesn't trigger without
> this patch.
> 
> We now make sure that DMA channel is idle before calling atc_complete_all()
> which makes the BUG_ON() "protection" useless.
> 
> Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
> ---
> Linus,
> 
> We have identified a race condition on the Atmel ARM-based AT91 DMA controller
> driver that leads to hitting a BUG_ON() directive.
> This error, only triggered after the inclusion of a patch that reduces the
> softirq latency, is affecting several AT91 SoCs and can be seen
> as a regression by people using the dmaengine driver (on NAND flash
> accesses for instance).
> 
> I know that it is late in the development cycle but can you please consider
> including it in your tree before 3.9-final?
> 
> This patch can also go through dmaengine tree (Vinod Koul) but I do not know if
> there is enough time remaining.
> 
> Thanks a lot, best regards,
> 
> Nicolas Ferre
> 
> 
>  drivers/dma/at_hdmac.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
> index 6e13f26..88cfc61 100644
> --- a/drivers/dma/at_hdmac.c
> +++ b/drivers/dma/at_hdmac.c
> @@ -310,8 +310,6 @@ static void atc_complete_all(struct at_dma_chan *atchan)
>  
>  	dev_vdbg(chan2dev(&atchan->chan_common), "complete all\n");
>  
> -	BUG_ON(atc_chan_is_enabled(atchan));
> -
>  	/*
>  	 * Submit queued descriptors ASAP, i.e. before we go through
>  	 * the completed ones.
> @@ -368,6 +366,9 @@ static void atc_advance_work(struct at_dma_chan *atchan)
>  {
>  	dev_vdbg(chan2dev(&atchan->chan_common), "advance_work\n");
>  
> +	if (atc_chan_is_enabled(atchan))
> +		return;
> +
>  	if (list_empty(&atchan->active_list) ||
>  	    list_is_singular(&atchan->active_list)) {
>  		atc_complete_all(atchan);
> @@ -1078,9 +1079,7 @@ static void atc_issue_pending(struct dma_chan *chan)
>  		return;
>  
>  	spin_lock_irqsave(&atchan->lock, flags);
> -	if (!atc_chan_is_enabled(atchan)) {
> -		atc_advance_work(atchan);
> -	}
> +	atc_advance_work(atchan);
>  	spin_unlock_irqrestore(&atchan->lock, flags);
>  }
>  
> -- 
> 1.8.0
> 

  reply	other threads:[~2013-04-16 13:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-16 11:49 [PATCH] dmaengine: at_hdmac: fix race condition in atc_advance_work() Nicolas Ferre
2013-04-16 11:49 ` Nicolas Ferre
2013-04-16 13:15 ` Vinod Koul [this message]
2013-04-16 13:15   ` Vinod Koul
2013-04-18  7:52 ` [PATCH for 3.9-final] " Nicolas Ferre
2013-04-18  7:52   ` Nicolas Ferre

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=20130416131519.GL12436@intel.com \
    --to=vinod.koul@intel.com \
    --cc=linux-arm-kernel@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 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.