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
next prev parent 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.