All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vinod.koul@intel.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	tony@atomide.com, balbi@ti.com, Joel Fernandes <joelf@ti.com>,
	Dan Williams <dan.j.williams@intel.com>,
	dmaengine@vger.kernel.org
Subject: Re: [PATCH 1/7] dmaengine: edma: fix two faults which happen with the 8250_dma user
Date: Thu, 31 Jul 2014 17:47:02 +0530	[thread overview]
Message-ID: <20140731121702.GU8181@intel.com> (raw)
In-Reply-To: <1406660344-25307-2-git-send-email-bigeasy@linutronix.de>

On Tue, Jul 29, 2014 at 08:58:58PM +0200, Sebastian Andrzej Siewior wrote:
> The rx path of the 8250_dma user in the RX-timeout case:
> - it starts the RX transfer
> - if the rx-timeout interrupt occures, it dmaengine_pause() the transfer
> - step two is dmaengine_terminate_all() on this channel.
Okay after this whole channel needs to be reset, which means all the
descriptors are discared.
> - based on dmaengine_tx_status() it learns the number of transfered
>   bytes.
> - the rx interrupt occures,
why, channel is terminated, so existing txn needs to be aborted too

>   it does not start the RX-transfer because
>   according to dmaengine_tx_status() the status of the current transfer
>   is still DMA_IN_PROGRESS because the earlier dmaengine_terminate_all()
>   did not reset this.
there is no current transfer anymore

> - on rx-timeout it invokes dmaengine_pause() again. This time, it
>   segfaults because the channel has no descriptor yet.
> 
> To make the upper case work better, this patch adds dma_cookie_complete()
> to complete the cookie. Also it adds is an additional check for echan->edesc
> in case the channel has no descriptor assigned.
I think we are fixing the behvaiour rather than cause. terminate_all(()
needs to do a proper cleanup of the channel

And this looks a series, without cover letter sent to all. Which makes it a
bit hard to see what is getting done

-- 
~Vinod
> 
> Cc: Joel Fernandes <joelf@ti.com>
> Cc: Vinod Koul <vinod.koul@intel.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: dmaengine@vger.kernel.org
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
>  drivers/dma/edma.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
> index d08c4de..ff05dd4 100644
> --- a/drivers/dma/edma.c
> +++ b/drivers/dma/edma.c
> @@ -256,6 +256,7 @@ static int edma_terminate_all(struct edma_chan *echan)
>  	 * echan->edesc is NULL and exit.)
>  	 */
>  	if (echan->edesc) {
> +		dma_cookie_complete(&echan->edesc->vdesc.tx);
>  		echan->edesc = NULL;
>  		edma_stop(echan->ch_num);
>  	}
> @@ -282,7 +283,7 @@ static int edma_slave_config(struct edma_chan *echan,
>  static int edma_dma_pause(struct edma_chan *echan)
>  {
>  	/* Pause/Resume only allowed with cyclic mode */
> -	if (!echan->edesc->cyclic)
> +	if (!echan->edesc || !echan->edesc->cyclic)
>  		return -EINVAL;
>  
>  	edma_pause(echan->ch_num);
> -- 
> 2.0.1
> 

-- 

WARNING: multiple messages have this Message-ID (diff)
From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/7] dmaengine: edma: fix two faults which happen with the 8250_dma user
Date: Thu, 31 Jul 2014 17:47:02 +0530	[thread overview]
Message-ID: <20140731121702.GU8181@intel.com> (raw)
In-Reply-To: <1406660344-25307-2-git-send-email-bigeasy@linutronix.de>

On Tue, Jul 29, 2014 at 08:58:58PM +0200, Sebastian Andrzej Siewior wrote:
> The rx path of the 8250_dma user in the RX-timeout case:
> - it starts the RX transfer
> - if the rx-timeout interrupt occures, it dmaengine_pause() the transfer
> - step two is dmaengine_terminate_all() on this channel.
Okay after this whole channel needs to be reset, which means all the
descriptors are discared.
> - based on dmaengine_tx_status() it learns the number of transfered
>   bytes.
> - the rx interrupt occures,
why, channel is terminated, so existing txn needs to be aborted too

>   it does not start the RX-transfer because
>   according to dmaengine_tx_status() the status of the current transfer
>   is still DMA_IN_PROGRESS because the earlier dmaengine_terminate_all()
>   did not reset this.
there is no current transfer anymore

> - on rx-timeout it invokes dmaengine_pause() again. This time, it
>   segfaults because the channel has no descriptor yet.
> 
> To make the upper case work better, this patch adds dma_cookie_complete()
> to complete the cookie. Also it adds is an additional check for echan->edesc
> in case the channel has no descriptor assigned.
I think we are fixing the behvaiour rather than cause. terminate_all(()
needs to do a proper cleanup of the channel

And this looks a series, without cover letter sent to all. Which makes it a
bit hard to see what is getting done

-- 
~Vinod
> 
> Cc: Joel Fernandes <joelf@ti.com>
> Cc: Vinod Koul <vinod.koul@intel.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: dmaengine at vger.kernel.org
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
>  drivers/dma/edma.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
> index d08c4de..ff05dd4 100644
> --- a/drivers/dma/edma.c
> +++ b/drivers/dma/edma.c
> @@ -256,6 +256,7 @@ static int edma_terminate_all(struct edma_chan *echan)
>  	 * echan->edesc is NULL and exit.)
>  	 */
>  	if (echan->edesc) {
> +		dma_cookie_complete(&echan->edesc->vdesc.tx);
>  		echan->edesc = NULL;
>  		edma_stop(echan->ch_num);
>  	}
> @@ -282,7 +283,7 @@ static int edma_slave_config(struct edma_chan *echan,
>  static int edma_dma_pause(struct edma_chan *echan)
>  {
>  	/* Pause/Resume only allowed with cyclic mode */
> -	if (!echan->edesc->cyclic)
> +	if (!echan->edesc || !echan->edesc->cyclic)
>  		return -EINVAL;
>  
>  	edma_pause(echan->ch_num);
> -- 
> 2.0.1
> 

-- 

  reply	other threads:[~2014-07-31 12:17 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-29 18:58 dma support for 8250-omap serial driver Sebastian Andrzej Siewior
2014-07-29 18:58 ` Sebastian Andrzej Siewior
2014-07-29 18:58 ` [PATCH 1/7] dmaengine: edma: fix two faults which happen with the 8250_dma user Sebastian Andrzej Siewior
2014-07-29 18:58   ` Sebastian Andrzej Siewior
2014-07-31 12:17   ` Vinod Koul [this message]
2014-07-31 12:17     ` Vinod Koul
2014-07-31 13:06     ` Sebastian Andrzej Siewior
2014-07-31 13:06       ` Sebastian Andrzej Siewior
2014-08-08 16:29     ` Sebastian Andrzej Siewior
2014-08-08 16:29       ` Sebastian Andrzej Siewior
2014-08-08 16:29       ` Sebastian Andrzej Siewior
2014-08-19 15:12       ` Vinod Koul
2014-08-19 15:12         ` Vinod Koul
2014-08-19 15:12         ` Vinod Koul
2014-08-21 13:09         ` Sebastian Andrzej Siewior
2014-08-21 13:09           ` Sebastian Andrzej Siewior
2014-08-21 13:09           ` Sebastian Andrzej Siewior
2014-08-28  7:06           ` Vinod Koul
2014-08-28  7:06             ` Vinod Koul
2014-08-28  9:06             ` Sebastian Andrzej Siewior
2014-08-28  9:06               ` Sebastian Andrzej Siewior
2014-08-28  9:06               ` Sebastian Andrzej Siewior
2014-07-29 18:58 ` [PATCH 2/7] dmaengine: omap-dma: complete the transfer on terminate_all Sebastian Andrzej Siewior
2014-07-29 18:58   ` Sebastian Andrzej Siewior
2014-07-29 19:06   ` Sebastian Andrzej Siewior
2014-07-29 19:06     ` Sebastian Andrzej Siewior
2014-07-29 18:59 ` [PATCH 3/7] serial: 8250_dma: continue TX dma on dma error Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59 ` [RFC PATCH 4/7] serial: 8250_dma: enqueue RX dma again on completion Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59 ` [RFC PATCH 5/7] arm: dts: am33xx: add DMA properties for UART Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59 ` [RFC PATCH 6/7] arm: dts: dra7: " Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior
2014-07-29 18:59 ` [RFC PATCH 7/7] tty: serial: 8250: omap: add dma support Sebastian Andrzej Siewior
2014-07-29 18:59   ` Sebastian Andrzej Siewior

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=20140731121702.GU8181@intel.com \
    --to=vinod.koul@intel.com \
    --cc=balbi@ti.com \
    --cc=bigeasy@linutronix.de \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=joelf@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=tony@atomide.com \
    /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.