All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH 1/3] DMA: shdma: Fix warnings due to improper casts and printk formats
Date: Wed, 27 Nov 2013 16:03:25 +0000	[thread overview]
Message-ID: <2028164.izn6i5W5EG@avalon> (raw)
In-Reply-To: <1385512192-10303-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com>

Hi Andy,

On Wednesday 27 November 2013 12:27:41 Shevchenko, Andriy wrote:
> On Wed, 2013-11-27 at 01:29 +0100, Laurent Pinchart wrote:
> 
> > Use the %zu printk specifier to print size_t variables, and cast
> > pointers to unsigned long instead of unsigned int where applicable. This
> > fixes warnings on platforms where pointers and/or dma_addr_t have a
> > different size than int.
> 
> Few comments below.
> 
> > diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
> > index 2e7b394..b37d584 100644
> > --- a/drivers/dma/sh/shdma-base.c
> > +++ b/drivers/dma/sh/shdma-base.c
> > @@ -227,7 +227,7 @@ bool shdma_chan_filter(struct dma_chan *chan, void
> > *arg)
> >  	struct shdma_chan *schan = to_shdma_chan(chan);
> >  	struct shdma_dev *sdev = to_shdma_dev(schan->dma_chan.device);
> >  	const struct shdma_ops *ops = sdev->ops;
> > -	int match = (int)arg;
> > +	int match = (long)arg;
> 
> As far as I understand this will lose data on 64bit platforms.
> Are you aware of it? Otherwise I don't see the advantage of such
> conversion. As far as I understand you may cast void * easily to long
> and back, otherwise you lost data.

That's correct, but shouldn't be an issue here. The match value is a small 
integer. The reason why I cast it to long is to avoid compilation warnings

> >  	int ret;
> >  
> >  	if (match < 0)
> > @@ -491,9 +491,9 @@ static struct shdma_desc *shdma_add_desc(struct
> > shdma_chan *schan,
> >  	}
> >  
> >  	dev_dbg(schan->dev,
> > -		"chaining (%u/%u)@%x -> %x with %p, cookie %d\n",
> > -		copy_size, *len, *src, *dst, &new->async_tx,
> > -		new->async_tx.cookie);
> > +		"chaining (%zu/%zu)@%lx -> %lx with %p, cookie %d\n",
> > +		copy_size, *len, (unsigned long)*src, (unsigned long)*dst,
> > +		&new->async_tx, new->async_tx.cookie);
> 
> Instead of dancing with casting (actually for dma_addr_t it should be
> ULL type), we can extend %pa to do this job for us:

That sounds good to me. Do you plan to submit a patch ? I'd like to get this 
series upstream in v3.14.

> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 10909c5..0806bf0 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -1354,10 +1354,17 @@ char *pointer(const char *fmt, char *buf, char
> *end, void *ptr,
>  		break;
>  	case 'a':
>  		spec.flags |= SPECIAL | SMALL | ZEROPAD;
> -		spec.field_width = sizeof(phys_addr_t) * 2 + 2;
>  		spec.base = 16;
> -		return number(buf, end,
> -			      (unsigned long long) *((phys_addr_t *)ptr), spec);
> +		switch (fmt[1]) {
> +		case 'D':
> +			spec.field_width = sizeof(dma_addr_t) * 2 + 2;
> +			return number(buf, end,
> +				(unsigned long long)*((dma_addr_t *)ptr), spec);
> +		default:
> +			spec.field_width = sizeof(phys_addr_t) * 2 + 2;
> +			return number(buf, end,
> +				(unsigned long long)*((phys_addr_t *)ptr), spec);
> +		}
>  	case 'd':
>  		return dentry_name(buf, end, ptr, spec, fmt);
>  	case 'D':
> 
> Thus, use %paD.
> 
> 
> >  	new->mark = DESC_PREPARED;
> >  	new->async_tx.flags = flags;
> > 
> > @@ -555,7 +555,7 @@ static struct dma_async_tx_descriptor
> > *shdma_prep_sg(struct shdma_chan *schan,
> >  			goto err_get_desc;
> >  
> >  		do {
> > -			dev_dbg(schan->dev, "Add SG #%d@%p[%d], dma %llx\n",
> > +			dev_dbg(schan->dev, "Add SG #%d@%p[%zu], dma %llx\n",
> >  				i, sg, len, (unsigned long long)sg_addr);
> >  
> >  			if (direction = DMA_DEV_TO_MEM)
> > diff --git a/drivers/dma/sh/shdma-of.c b/drivers/dma/sh/shdma-of.c
> > index 06473a0..7fdb67b 100644
> > --- a/drivers/dma/sh/shdma-of.c
> > +++ b/drivers/dma/sh/shdma-of.c
> > @@ -33,7 +33,8 @@ static struct dma_chan *shdma_of_xlate(struct
> > of_phandle_args *dma_spec,
> >  	/* Only slave DMA channels can be allocated via DT */
> >  	dma_cap_set(DMA_SLAVE, mask);
> >  
> > -	chan = dma_request_channel(mask, shdma_chan_filter, (void *)id);
> > +	chan = dma_request_channel(mask, shdma_chan_filter,
> > +				   (void *)(unsigned long)id);
> >  	if (chan)
> >  		to_shdma_chan(chan)->hw_req = id;
> >  
> > diff --git a/drivers/dma/sh/sudmac.c b/drivers/dma/sh/sudmac.c
> > index c7e9cdf..2112ed2 100644
> > --- a/drivers/dma/sh/sudmac.c
> > +++ b/drivers/dma/sh/sudmac.c
> > @@ -178,8 +178,8 @@ static int sudmac_desc_setup(struct shdma_chan
> > *schan,
> >  	struct sudmac_chan *sc = to_chan(schan);
> >  	struct sudmac_desc *sd = to_desc(sdesc);
> > 
> > -	dev_dbg(sc->shdma_chan.dev, "%s: src=%x, dst=%x, len=%d\n",
> > -		__func__, src, dst, *len);
> > +	dev_dbg(sc->shdma_chan.dev, "%s: src=%lx, dst=%lx, len=%zu\n",
> > +		__func__, (unsigned long)src, (unsigned long)dst, *len);
> >  
> >  	if (*len > schan->max_xfer_len)
> >  		*len = schan->max_xfer_len;
-- 
Regards,

Laurent Pinchart


  parent reply	other threads:[~2013-11-27 16:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-27  0:29 [PATCH 1/3] DMA: shdma: Fix warnings due to improper casts and printk formats Laurent Pinchart
2013-11-27 12:27 ` Shevchenko, Andriy
2013-11-27 16:03 ` Laurent Pinchart [this message]
2013-11-27 16:24 ` Laurent Pinchart
2013-11-28  9:25 ` Andy Shevchenko

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=2028164.izn6i5W5EG@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-sh@vger.kernel.org \
    /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.