Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dma: dw_dmac: check direction properly in dw_dma_cyclic_prep

dma_transfer_direction is a normal enum. It means we can't usually use the
values as bit fields. Let's adjust this check and move it above the usage of
the direction parameter, due to the nature of the following usage of it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>

authored by

Andy Shevchenko and committed by
Vinod Koul
f44b92f4 0e7264cc

+3 -2
+3 -2
drivers/dma/dw_dmac.c
··· 1355 1355 1356 1356 retval = ERR_PTR(-EINVAL); 1357 1357 1358 + if (unlikely(!is_slave_direction(direction))) 1359 + goto out_err; 1360 + 1358 1361 if (direction == DMA_MEM_TO_DEV) 1359 1362 reg_width = __ffs(sconfig->dst_addr_width); 1360 1363 else ··· 1371 1368 if (unlikely(period_len & ((1 << reg_width) - 1))) 1372 1369 goto out_err; 1373 1370 if (unlikely(buf_addr & ((1 << reg_width) - 1))) 1374 - goto out_err; 1375 - if (unlikely(!(direction & (DMA_MEM_TO_DEV | DMA_DEV_TO_MEM)))) 1376 1371 goto out_err; 1377 1372 1378 1373 retval = ERR_PTR(-ENOMEM);