All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Shengjiu Wang' <shengjiu.wang@gmail.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"Xiubo.Lee@gmail.com" <Xiubo.Lee@gmail.com>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	Shengjiu Wang <shengjiu.wang@nxp.com>,
	"tiwai@suse.com" <tiwai@suse.com>,
	"lgirdwood@gmail.com" <lgirdwood@gmail.com>,
	"nicoleotsuka@gmail.com" <nicoleotsuka@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	"festevam@gmail.com" <festevam@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH -next 2/5] ASoC: fsl_asrc: force cast the asrc_format type
Date: Tue, 19 Jul 2022 12:39:42 +0000	[thread overview]
Message-ID: <c9231becb2cd4e2999ec631f9d2171c3@AcuMS.aculab.com> (raw)
In-Reply-To: <CAA+D8AO6P2AcOJ+E97Y1=P72Qa1wjtMGMneWnsP+VcdnCzzYuw@mail.gmail.com>

grrr... top-posting because outluck is really stupid :-(

The definition seems to be:
typedef int __bitwise<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__bitwise> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>;
#define SNDRV_PCM_FORMAT_S8<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_S8>    ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 0)
#define SNDRV_PCM_FORMAT_U8<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_U8>    ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 1)
#define SNDRV_PCM_FORMAT_S16_LE<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_S16_LE>        ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 2)
...
(goes away and looks up __bitwIse)

I think I’d add:
#define snd_pcm_format(val) ((__force snd_pcm_format_t)(val))
and use that to remove most of the casts.
But the ones where you have (u32 *)&xxx are only valid because u32 and int are the same size.
That does sort of happen to be true, but someone might look at all the values and
decide that u8 is big enough.
After which the code will still compile, but the data areas get corrupted.
So you really need to use a u32 ‘temp’ variable.

It would all be slightly less problematic if the ‘force’ casts could be sparse only
(ie not seen by the compiler) – so the compiler would do the type checking.

                David

From: Shengjiu Wang <shengjiu.wang@gmail.com>
Sent: 19 July 2022 12:07
To: David Laight <David.Laight@ACULAB.COM>
Cc: Mark Brown <broonie@kernel.org>; Shengjiu Wang <shengjiu.wang@nxp.com>; Xiubo.Lee@gmail.com; festevam@gmail.com; nicoleotsuka@gmail.com; lgirdwood@gmail.com; perex@perex.cz; tiwai@suse.com; alsa-devel@alsa-project.org; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org
Subject: Re: [PATCH -next 2/5] ASoC: fsl_asrc: force cast the asrc_format type



On Tue, Jul 19, 2022 at 6:34 PM David Laight <David.Laight@aculab.com<mailto:David.Laight@aculab.com>> wrote:
From: Mark Brown
> Sent: 19 July 2022 11:17
>
> On Tue, Jul 19, 2022 at 10:01:54AM +0000, David Laight wrote:
> > From: Shengjiu Wang
>
> > > - ret = of_property_read_u32(np, "fsl,asrc-format", &asrc->asrc_format);
> > > + ret = of_property_read_u32(np, "fsl,asrc-format", (u32 *)&asrc->asrc_format);
>
> > Ugg, you really shouldn't need to do that.
> > It means that something is badly wrong somewhere.
> > Casting pointers to integer types is just asking for a bug.
>
> That's casting one pointer type to another pointer type.

It is casting the address of some type to a 'u32 *'.
This will then be dereferenced by the called function.
So the original type better be 32 bits.

I'm also guessing that sparse was complaining about endianness?
It isn't at all clear that these casts actually fix it.
The sparse is complaining about the snd_pcm_format_t cast to u32/int type.

The code in include/sound/pcm.h also does such __force cast.
#define _SNDRV_PCM_FMTBIT(fmt)          (1ULL << (__force int)SNDRV_PCM_FORMAT_##fmt)

The change I have made does not cause an issue.

Best regards
Wang shengjiu

(Mark: You'll be glad to hear that the office aircon is
broken again - two weeks lead time on the spare part.)

        David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

WARNING: multiple messages have this Message-ID (diff)
From: David Laight <David.Laight@ACULAB.COM>
To: 'Shengjiu Wang' <shengjiu.wang@gmail.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"Xiubo.Lee@gmail.com" <Xiubo.Lee@gmail.com>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	Shengjiu Wang <shengjiu.wang@nxp.com>,
	"tiwai@suse.com" <tiwai@suse.com>,
	"lgirdwood@gmail.com" <lgirdwood@gmail.com>,
	"perex@perex.cz" <perex@perex.cz>,
	"nicoleotsuka@gmail.com" <nicoleotsuka@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	"festevam@gmail.com" <festevam@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH -next 2/5] ASoC: fsl_asrc: force cast the asrc_format type
Date: Tue, 19 Jul 2022 12:39:42 +0000	[thread overview]
Message-ID: <c9231becb2cd4e2999ec631f9d2171c3@AcuMS.aculab.com> (raw)
In-Reply-To: <CAA+D8AO6P2AcOJ+E97Y1=P72Qa1wjtMGMneWnsP+VcdnCzzYuw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3873 bytes --]

grrr... top-posting because outluck is really stupid :-(

The definition seems to be:
typedef int __bitwise<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__bitwise> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>;
#define SNDRV_PCM_FORMAT_S8<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_S8>    ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 0)
#define SNDRV_PCM_FORMAT_U8<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_U8>    ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 1)
#define SNDRV_PCM_FORMAT_S16_LE<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/SNDRV_PCM_FORMAT_S16_LE>        ((__force<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/__force> snd_pcm_format_t<https://elixir.bootlin.com/linux/v5.19-rc7/C/ident/snd_pcm_format_t>) 2)
...
(goes away and looks up __bitwIse)

I think I’d add:
#define snd_pcm_format(val) ((__force snd_pcm_format_t)(val))
and use that to remove most of the casts.
But the ones where you have (u32 *)&xxx are only valid because u32 and int are the same size.
That does sort of happen to be true, but someone might look at all the values and
decide that u8 is big enough.
After which the code will still compile, but the data areas get corrupted.
So you really need to use a u32 ‘temp’ variable.

It would all be slightly less problematic if the ‘force’ casts could be sparse only
(ie not seen by the compiler) – so the compiler would do the type checking.

                David

From: Shengjiu Wang <shengjiu.wang@gmail.com>
Sent: 19 July 2022 12:07
To: David Laight <David.Laight@ACULAB.COM>
Cc: Mark Brown <broonie@kernel.org>; Shengjiu Wang <shengjiu.wang@nxp.com>; Xiubo.Lee@gmail.com; festevam@gmail.com; nicoleotsuka@gmail.com; lgirdwood@gmail.com; perex@perex.cz; tiwai@suse.com; alsa-devel@alsa-project.org; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org
Subject: Re: [PATCH -next 2/5] ASoC: fsl_asrc: force cast the asrc_format type



On Tue, Jul 19, 2022 at 6:34 PM David Laight <David.Laight@aculab.com<mailto:David.Laight@aculab.com>> wrote:
From: Mark Brown
> Sent: 19 July 2022 11:17
>
> On Tue, Jul 19, 2022 at 10:01:54AM +0000, David Laight wrote:
> > From: Shengjiu Wang
>
> > > - ret = of_property_read_u32(np, "fsl,asrc-format", &asrc->asrc_format);
> > > + ret = of_property_read_u32(np, "fsl,asrc-format", (u32 *)&asrc->asrc_format);
>
> > Ugg, you really shouldn't need to do that.
> > It means that something is badly wrong somewhere.
> > Casting pointers to integer types is just asking for a bug.
>
> That's casting one pointer type to another pointer type.

It is casting the address of some type to a 'u32 *'.
This will then be dereferenced by the called function.
So the original type better be 32 bits.

I'm also guessing that sparse was complaining about endianness?
It isn't at all clear that these casts actually fix it.
The sparse is complaining about the snd_pcm_format_t cast to u32/int type.

The code in include/sound/pcm.h also does such __force cast.
#define _SNDRV_PCM_FMTBIT(fmt)          (1ULL << (__force int)SNDRV_PCM_FORMAT_##fmt)

The change I have made does not cause an issue.

Best regards
Wang shengjiu

(Mark: You'll be glad to hear that the office aircon is
broken again - two weeks lead time on the spare part.)

        David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

[-- Attachment #2: Type: text/html, Size: 9836 bytes --]

  reply	other threads:[~2022-07-19 12:40 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-19  9:27 [PATCH -next 0/5] ASoC: fsl: Fix sparse warning Shengjiu Wang
2022-07-19  9:27 ` [PATCH -next 1/5] ASoC: fsl_sai: Don't use plain integer as NULL pointer Shengjiu Wang
2022-07-19  9:27 ` [PATCH -next 2/5] ASoC: fsl_asrc: force cast the asrc_format type Shengjiu Wang
2022-07-19 10:01   ` David Laight
2022-07-19 10:17     ` Mark Brown
2022-07-19 10:17       ` Mark Brown
2022-07-19 10:17       ` Mark Brown
2022-07-19 10:34       ` David Laight
2022-07-19 10:34         ` David Laight
2022-07-19 10:34         ` David Laight
2022-07-19 11:07         ` Shengjiu Wang
2022-07-19 11:07           ` Shengjiu Wang
2022-07-19 12:39           ` David Laight [this message]
2022-07-19 12:39             ` David Laight
2022-07-19 13:35             ` Shengjiu Wang
2022-07-19 13:35               ` Shengjiu Wang
2022-07-20  5:42               ` Shengjiu Wang
2022-07-20  5:42                 ` Shengjiu Wang
2022-07-19  9:27 ` [PATCH -next 3/5] ASoC: fsl-asoc-card: " Shengjiu Wang
2022-07-19  9:27 ` [PATCH -next 4/5] ASoC: fsl_easrc: use snd_pcm_format_t type for sample_format Shengjiu Wang
2022-07-19  9:27 ` [PATCH -next 5/5] ASoC: imx-card: use snd_pcm_format_t type for asrc_format Shengjiu Wang

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=c9231becb2cd4e2999ec631f9d2171c3@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=Xiubo.Lee@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=festevam@gmail.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=nicoleotsuka@gmail.com \
    --cc=shengjiu.wang@gmail.com \
    --cc=shengjiu.wang@nxp.com \
    --cc=tiwai@suse.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 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.