drivers/dma/dw_dmac.c:1278:48: sparse: incorrect type in argument 1 (different base types)
Vinod Koul
vinod.koul at intel.com
Sun Mar 3 23:52:57 EST 2013
On Sun, Mar 03, 2013 at 08:51:28PM +0000, Arnd Bergmann wrote:
> On Sunday 03 March 2013, kbuild test robot wrote:
> > >> drivers/dma/dw_dmac.c:1278:48: sparse: incorrect type in argument 1 (different base types)
> > drivers/dma/dw_dmac.c:1278:48: expected restricted __be32 const [usertype] *p
> > drivers/dma/dw_dmac.c:1278:48: got unsigned int *
> > >> drivers/dma/dw_dmac.c:1279:48: sparse: incorrect type in argument 1 (different base types)
> > drivers/dma/dw_dmac.c:1279:48: expected restricted __be32 const [usertype] *p
> > drivers/dma/dw_dmac.c:1279:48: got unsigned int *
> > >> drivers/dma/dw_dmac.c:1280:48: sparse: incorrect type in argument 1 (different base types)
> > drivers/dma/dw_dmac.c:1280:48: expected restricted __be32 const [usertype] *p
> > drivers/dma/dw_dmac.c:1280:48: got unsigned int *
> >
>
> Cool, thanks for the notification! That is a real bug, the variables
> are already endian swapped at this point.
>
> Fortunately, nothing is using that code at this moment, so we can fix
> this with no hurry.
>
> Vinod, could you apply this patch?
Done, applied to fixes. Will send to Linus before I leave for vacation on Thu.
Updated change log with reported-by & typo fix
>
> Arnd
>
> 8<-------
> Subject: [PATCH] dmaengine: dw_dma: fix endianess for DT xlate function
>
> As reported by Wu Fengguang's build robot tracking sparse warnings, the
> dma_spec arguments in the dw_dma_xlate are already byte swapped on
> littl-endian platforms and must not get swapped again. This code is
> currently not used anywhere, but will be used in Linux 3.10 when the
> ARM SPEAr platform starts using the generic DMA DT binding.
>
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
>
> diff --git a/drivers/dma/dw_dmac.c b/drivers/dma/dw_dmac.c
> index c599558..eb81ec9 100644
> --- a/drivers/dma/dw_dmac.c
> +++ b/drivers/dma/dw_dmac.c
> @@ -1276,9 +1276,9 @@ static struct dma_chan *dw_dma_xlate(struct of_phandle_args *dma_spec,
> if (dma_spec->args_count != 3)
> return NULL;
>
> - fargs.req = be32_to_cpup(dma_spec->args+0);
> - fargs.src = be32_to_cpup(dma_spec->args+1);
> - fargs.dst = be32_to_cpup(dma_spec->args+2);
> + fargs.req = dma_spec->args[0];
> + fargs.src = dma_spec->args[1];
> + fargs.dst = dma_spec->args[2];
>
> if (WARN_ON(fargs.req >= DW_DMA_MAX_NR_REQUESTS ||
> fargs.src >= dw->nr_masters ||
More information about the linux-arm-kernel
mailing list