[alsa-lib][PATCH] ASoC: hdmi-codec: use unsigned type to structure members with bit-field instead of signed type

Arnaud Pouliquen arnaud.pouliquen at st.com
Fri Dec 16 10:27:22 UTC 2016


Hi Takashi,

Reviewed and tested for sti machine.

Acked-by: Arnaud Pouliquen <arnaud.pouliquen at st.com>

Regards
Arnaud

On 12/16/2016 10:26 AM, Takashi Sakamoto wrote:
> This is a fix for Linux 4.10-rc1.
> 
> In C language specification, a bit-field is interpreted as a signed or
> unsigned integer type consisting of the specified number of bits.
> 
> In GCC manual, the range of a signed bit field of N bits is from
> -(2^N) / 2 to ((2^N) / 2) - 1
> https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Bit-Fields
> 
> Therefore, when defined as 1 bit-field with signed type, variables can
> represents -1 and 0.
> 
> The snd-soc-hdmi-codec module includes a structure which has signed type
> members with bit-fields. Codes of this module assign 0 and 1 to the
> members. This seems to result in implementation-dependent behaviours.
> 
> As of v4.10-rc1 merge window, outside of sound subsystem, this structure
> is referred by below GPU modules.
>  - tda998x
>  - sti-drm
>  - mediatek-drm-hdmi
>  - msm
> 
> As long as I review their codes relevant to the structure, the structure
> members are used just for condition statements and printk formats.
> My proposal of change is a bit intrusive to the printk formats but this
> may be acceptable.
> 
> Totally, it's reasonable to use unsigned type for the structure members.
> This bug is detected by Sparse, static code analyzer with below warnings.
> 
> ./include/sound/hdmi-codec.h:39:26: error: dubious one-bit signed bitfield
> ./include/sound/hdmi-codec.h:40:28: error: dubious one-bit signed bitfield
> ./include/sound/hdmi-codec.h:41:29: error: dubious one-bit signed bitfield
> ./include/sound/hdmi-codec.h:42:31: error: dubious one-bit signed bitfield
> 
> CC: Jyri Sarha <jsarha at ti.com>
> CC: Jie Qiu <jie.qiu at mediatek.com>
> CC: Arnaud Pouliquen <arnaud.pouliquen at st.com>
> CC: Srinivas Kandagatla <srinivas.kandagatla at linaro.org>
> CC: dri-devel at lists.freedesktop.org
> CC: stable at vger.kernel.org
> Fixes: 09184118a8ab ("ASoC: hdmi-codec: Add hdmi-codec for external HDMI-encoders")
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
> ---
>  include/sound/hdmi-codec.h | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h
> index 530c57b..915c435 100644
> --- a/include/sound/hdmi-codec.h
> +++ b/include/sound/hdmi-codec.h
> @@ -36,10 +36,10 @@ struct hdmi_codec_daifmt {
>  		HDMI_AC97,
>  		HDMI_SPDIF,
>  	} fmt;
> -	int bit_clk_inv:1;
> -	int frame_clk_inv:1;
> -	int bit_clk_master:1;
> -	int frame_clk_master:1;
> +	unsigned int bit_clk_inv:1;
> +	unsigned int frame_clk_inv:1;
> +	unsigned int bit_clk_master:1;
> +	unsigned int frame_clk_master:1;
>  };
>  
>  /*
> 


More information about the dri-devel mailing list