alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: "Lin, Mengdong" <mengdong.lin@intel.com>
Cc: "Koul, Vinod" <vinod.koul@intel.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"mengdong.lin@linux.intel.com" <mengdong.lin@linux.intel.com>,
	"Prusty, Subhransu S" <subhransu.s.prusty@intel.com>,
	"Girdwood, Liam R" <liam.r.girdwood@intel.com>
Subject: Re: [PATCH 2/4] topology: Change variable type to fix gcc warning
Date: Wed, 18 Nov 2015 09:19:17 +0100	[thread overview]
Message-ID: <s5hio4zk9dm.wl-tiwai@suse.de> (raw)
In-Reply-To: <F46914AEC2663F4A9BB62374E5EEF8F84B8905C3@shsmsx102.ccr.corp.intel.com>

On Wed, 18 Nov 2015 08:28:09 +0100,
Lin, Mengdong wrote:
> 
> > -----Original Message-----
> > From: Takashi Iwai [mailto:tiwai@suse.de]
> > Sent: Wednesday, November 18, 2015 3:16 PM
> > To: mengdong.lin@linux.intel.com
> 
> > On Wed, 18 Nov 2015 08:23:07 +0100,
> > mengdong.lin@linux.intel.com wrote:
> > >
> > > From: Mengdong Lin <mengdong.lin@linux.intel.com>
> > >
> > > Fix warning: comparison between signed and unsigned integer
> > > expressions [-Wsign-compare]
> > >
> > > ABI objects use type _le32, which is converted to host unsigned integer.
> > > So the iterator 'i' in a loop as below should also be unsigned.
> > > for (i = 0; i < pcm->num_streams; i++)
> > >                 ^
> > 
> > Using an unsigned int for the generic loop count like i is strange.
> 
> Yes.
> 
> > Rather compare with the original value in the template, which is actually int.
> 
> Are you suggesting not change the code?

No.

> The "pcm->num_streams" here is __le32 defined in ABI:
> struct snd_soc_tplg_pcm {
> 	...
> 	__le32 num_streams;	/* number of streams */
> 	...
> } __attribute__((packed));
> 
> It seems gcc takes it as unsigned integer and so I get the warning.

The problem isn't only about the endianess.
Conceptually, it's wrong to refer directly to le32 data, as it's not
being CPU endian.  It should have always an endian conversion.  Of
course, we support only LE32, so it's no big issue, so far.

What you need to refer to is the value in the template instead.  It's
guaranteed to be CPU endianess, and it's even int.
So, the code would look like:

	for (i = 0; i < pcm_tpl->num_streams; i++)


BTW, I haven't checked whether topology API would "work" on big-endian
architecture; does it return an error properly? 


Takashi


> 
> Thanks
> Mengdong
> 
> > 
> > 
> > Takashi
> > 
> > > Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
> > >
> > > diff --git a/src/topology/ctl.c b/src/topology/ctl.c index
> > > 7d8787f..6dc3b3d 100644
> > > --- a/src/topology/ctl.c
> > > +++ b/src/topology/ctl.c
> > > @@ -676,7 +676,8 @@ int tplg_add_mixer(snd_tplg_t *tplg, struct
> > snd_tplg_mixer_template *mixer,
> > >  	struct snd_soc_tplg_private *priv = mixer->priv;
> > >  	struct snd_soc_tplg_mixer_control *mc;
> > >  	struct tplg_elem *elem;
> > > -	int ret, i;
> > > +	int ret;
> > > +	unsigned int i;
> > >
> > >  	tplg_dbg(" Control Mixer: %s\n", mixer->hdr.name);
> > >
> > > @@ -743,7 +744,8 @@ int tplg_add_enum(snd_tplg_t *tplg, struct
> > > snd_tplg_enum_template *enum_ctl,  {
> > >  	struct snd_soc_tplg_enum_control *ec;
> > >  	struct tplg_elem *elem;
> > > -	int ret, i;
> > > +	int ret;
> > > +	unsigned int i;
> > >
> > >  	tplg_dbg(" Control Enum: %s\n", enum_ctl->hdr.name);
> > >
> > > diff --git a/src/topology/pcm.c b/src/topology/pcm.c index
> > > 9b7e402..4b7c058 100644
> > > --- a/src/topology/pcm.c
> > > +++ b/src/topology/pcm.c
> > > @@ -522,7 +522,7 @@ int tplg_add_pcm_object(snd_tplg_t *tplg,
> > snd_tplg_obj_template_t *t)
> > >  	struct snd_tplg_pcm_template *pcm_tpl = t->pcm;
> > >  	struct snd_soc_tplg_pcm *pcm;
> > >  	struct tplg_elem *elem;
> > > -	int i;
> > > +	unsigned int i;
> > >
> > >  	tplg_dbg("PCM: %s, DAI %s\n", pcm_tpl->pcm_name,
> > pcm_tpl->dai_name);
> > >
> > > @@ -564,7 +564,7 @@ int tplg_add_link_object(snd_tplg_t *tplg,
> > snd_tplg_obj_template_t *t)
> > >  	struct snd_tplg_link_template *link = t->link;
> > >  	struct snd_soc_tplg_link_config *lk;
> > >  	struct tplg_elem *elem;
> > > -	int i;
> > > +	unsigned int i;
> > >
> > >  	if (t->type != SND_TPLG_TYPE_BE && t->type != SND_TPLG_TYPE_CC)
> > >  		return -EINVAL;
> > > --
> > > 2.5.0
> > >
> 

  reply	other threads:[~2015-11-18  8:19 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-18  7:21 [PATCH 0/4] topology: fix some gcc warnings mengdong.lin
2015-11-18  7:22 ` [PATCH 1/4] topology: Remove unused function write_data_block() mengdong.lin
2015-11-18 13:58   ` Takashi Iwai
2015-11-18  7:23 ` [PATCH 2/4] topology: Change variable type to fix gcc warning mengdong.lin
2015-11-18  7:15   ` Takashi Iwai
2015-11-18  7:28     ` Lin, Mengdong
2015-11-18  8:19       ` Takashi Iwai [this message]
2015-11-18 15:14         ` Lin, Mengdong
2015-11-18 15:26           ` Takashi Iwai
2015-11-18  7:23 ` [PATCH 3/4] topology: Remove unused variables mengdong.lin
2015-11-18 13:58   ` Takashi Iwai
2015-11-18  7:23 ` [PATCH 4/4] topology: Fix comparison of unsigned expression < 0 mengdong.lin
2015-11-18 13:59   ` Takashi Iwai

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=s5hio4zk9dm.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=liam.r.girdwood@intel.com \
    --cc=mengdong.lin@intel.com \
    --cc=mengdong.lin@linux.intel.com \
    --cc=subhransu.s.prusty@intel.com \
    --cc=vinod.koul@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).