All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vkoul@kernel.org>
To: Lubomir Rintel <lkundrak@v3.sk>
Cc: Dan Williams <dan.j.williams@intel.com>,
	dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/7] dmaengine: mmp_tdma: Validate the transfer direction
Date: Thu, 23 Apr 2020 12:36:57 +0530	[thread overview]
Message-ID: <20200423070657.GW72691@vkoul-mobl> (raw)
In-Reply-To: <20200419164912.670973-4-lkundrak@v3.sk>

On 19-04-20, 18:49, Lubomir Rintel wrote:
> We only support DMA_DEV_TO_MEM and DMA_MEM_TO_DEV. Let's not do
> undefined things with other values and reject them.
> 
> Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
> ---
>  drivers/dma/mmp_tdma.c | 37 ++++++++++++++++++++++++++++---------
>  1 file changed, 28 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
> index d559bb4d6a31d..d574641791598 100644
> --- a/drivers/dma/mmp_tdma.c
> +++ b/drivers/dma/mmp_tdma.c
> @@ -207,10 +207,17 @@ static int mmp_tdma_config_chan(struct dma_chan *chan)
>  
>  	mmp_tdma_disable_chan(chan);
>  
> -	if (tdmac->dir == DMA_MEM_TO_DEV)
> -		tdcr = TDCR_DSTDIR_ADDR_HOLD | TDCR_SRCDIR_ADDR_INC;
> -	else if (tdmac->dir == DMA_DEV_TO_MEM)
> +	switch (tdmac->dir) {
> +	case DMA_DEV_TO_MEM:
>  		tdcr = TDCR_SRCDIR_ADDR_HOLD | TDCR_DSTDIR_ADDR_INC;
> +		break;
> +	case DMA_MEM_TO_DEV:
> +		tdcr = TDCR_DSTDIR_ADDR_HOLD | TDCR_SRCDIR_ADDR_INC;
> +		break;
> +	default:
> +		dev_err(tdmac->dev, "invalid transfer direction\n");
> +		return -EINVAL;
> +	}

You can use macros is_slave_direction() to validate

>  	if (tdmac->type == MMP_AUD_TDMA) {
>  		tdcr |= TDCR_PACKMOD;
> @@ -455,12 +462,18 @@ static struct dma_async_tx_descriptor *mmp_tdma_prep_dma_cyclic(
>  			desc->nxt_desc = tdmac->desc_arr_phys +
>  				sizeof(*desc) * (i + 1);
>  

It would make more sense to use is_slave_direction() and reject up early
in the function and proceed only when good :)

> -		if (direction == DMA_MEM_TO_DEV) {
> -			desc->src_addr = dma_addr;
> -			desc->dst_addr = tdmac->dev_addr;
> -		} else {
> +		switch (direction) {
> +		case DMA_DEV_TO_MEM:
>  			desc->src_addr = tdmac->dev_addr;
>  			desc->dst_addr = dma_addr;
> +			break;
> +		case DMA_MEM_TO_DEV:
> +			desc->src_addr = dma_addr;
> +			desc->dst_addr = tdmac->dev_addr;
> +			break;
> +		default:
> +			dev_err(tdmac->dev, "invalid transfer direction\n");
> +			goto err_out;
>  		}
>  		desc->byte_cnt = period_len;
>  		dma_addr += period_len;
> @@ -510,14 +523,20 @@ static int mmp_tdma_config_write(struct dma_chan *chan,
>  {
>  	struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
>  
> -	if (dir == DMA_DEV_TO_MEM) {
> +	switch (dir) {
> +	case DMA_DEV_TO_MEM:
>  		tdmac->dev_addr = dmaengine_cfg->src_addr;
>  		tdmac->burst_sz = dmaengine_cfg->src_maxburst;
>  		tdmac->buswidth = dmaengine_cfg->src_addr_width;
> -	} else {
> +		break;
> +	case DMA_MEM_TO_DEV:
>  		tdmac->dev_addr = dmaengine_cfg->dst_addr;
>  		tdmac->burst_sz = dmaengine_cfg->dst_maxburst;
>  		tdmac->buswidth = dmaengine_cfg->dst_addr_width;
> +		break;
> +	default:
> +		dev_err(tdmac->dev, "invalid transfer direction\n");
> +		return -EINVAL;

is this required, if you have checked in all _prep() fns then you are
guaranteed that this will never hit, right?

-- 
~Vinod

  reply	other threads:[~2020-04-23  7:07 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-19 16:49 [PATCH 0/7] dmaengine: mmp_tdma: Make the driver actually work Lubomir Rintel
2020-04-19 16:49 ` [PATCH 1/7] dmaengine: mmp_tdma: Do not ignore slave config validation errors Lubomir Rintel
2020-04-23  7:13   ` Vinod Koul
2020-04-19 16:49 ` [PATCH 2/7] dmaengine: mmp_tdma: Drop "mmp_tdma: from error messages Lubomir Rintel
2020-04-23  7:13   ` Vinod Koul
2020-04-19 16:49 ` [PATCH 3/7] dmaengine: mmp_tdma: Validate the transfer direction Lubomir Rintel
2020-04-23  7:06   ` Vinod Koul [this message]
2020-04-19 16:49 ` [PATCH 4/7] dmaengine: mmp_tdma: Reset channel error on release Lubomir Rintel
2020-04-23  7:14   ` Vinod Koul
2020-04-19 16:49 ` [PATCH 5/7] dmaengine: mmp_tdma: Log an error if channel is in wrong state Lubomir Rintel
2020-04-23  7:15   ` Vinod Koul
2020-04-19 16:49 ` [PATCH 6/7] dmaengine: mmp_tdma: Fill in slave capabilities Lubomir Rintel
2020-04-23  7:16   ` Vinod Koul
2020-04-19 16:49 ` [PATCH 7/7] dmaengine: mmp_tdma: Remove the MMP_SRAM dependency Lubomir Rintel
2020-04-23  7:16   ` Vinod Koul

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=20200423070657.GW72691@vkoul-mobl \
    --to=vkoul@kernel.org \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkundrak@v3.sk \
    /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.