On Fri, 07 Feb 2020 17:02:27 +0100, Amadeusz SX2awiX4ski wrote:
On 2/7/2020 4:17 PM, Takashi Iwai wrote:
On Fri, 07 Feb 2020 17:15:33 +0100, Amadeusz Sławiński wrote:
Userspace doesn't know what __packed is, change it to __attribute__((packed)), like in the rest of a header.
Fixes: 348f48220b97 (ASoC: topology: Move v4 manifest header data structures to uapi)
Signed-off-by: Amadeusz Sławiński amadeuszx.slawinski@linux.intel.com
Is it a general consensus that we have to replace that?
Well, it aligns the packed structs definition with the rest of the file and the program I tried compiling built fine after this adjustment.
It's a different reason from "userspace doesn't know what __packed is" :)
I'm not against the change, but rather wondering about the rationale behind the changes.
As I understand, uapi files are usually installed by scripts/headers_install.pl, which takes care of replacing __packed with __attribute((packed)). However if I do 'make install' in alsa-lib it seems to install this one header containing __packed.
This was rather an oversight and we should have converted at copying over the alsa-lib repo. It's not an issue in the kernel header, per se.
thanks,
Takashi
In theory alsa-lib also installs /usr/include/alsa/sound/type_compat.h but to me it seems more like a workaround if I can have working header without additional includes. Also while there is a few more headers in kernel with __packed, this one is the only one included in alsa-lib and being installed by it:
$ pwd .../alsa-lib $ grep -RI __packed * include/sound/type_compat.h:#ifndef __packed include/sound/type_compat.h:#define __packed __attribute__((packed)) include/sound/uapi/asoc.h:} __packed; include/sound/uapi/asoc.h:} __packed; include/sound/uapi/asoc.h:} __packed; include/sound/uapi/asoc.h:} __packed; $ pwd .../linux $ grep -RI __packed include/uapi/sound include/uapi/sound/asoc.h:} __packed; include/uapi/sound/asoc.h:} __packed; include/uapi/sound/asoc.h:} __packed; include/uapi/sound/asoc.h:} __packed; include/uapi/sound/sof/fw.h:} __packed; include/uapi/sound/sof/fw.h:} __packed; include/uapi/sound/sof/fw.h:} __packed; include/uapi/sound/sof/header.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; include/uapi/sound/skl-tplg-interface.h:} __packed; $ grep -RI __packed include/uapi/sound | wc -l 14 $ grep -RI __attribute__((packed include/uapi/sound | wc -l 40
I would say it is better to be consistent.
Userspace doesn't know of __u16 unless it's defined, either, for example.
The header itself has <linux/types.h> include which seems to be enough to take care of integer type definitions.
Amadeusz
thanks,
Takashi
include/uapi/sound/asoc.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 6048553c119d..1ae8b06691cb 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -586,7 +586,7 @@ struct snd_soc_tplg_manifest_v4 { __le32 pcm_elems; /* number of PCM elements */ __le32 dai_link_elems; /* number of DAI link elements */ struct snd_soc_tplg_private priv; -} __packed; +} __attribute((packed)); /* Stream Capabilities v4 */ struct snd_soc_tplg_stream_caps_v4 { @@ -604,7 +604,7 @@ struct snd_soc_tplg_stream_caps_v4 { __le32 period_size_max; /* max period size bytes */ __le32 buffer_size_min; /* min buffer size bytes */ __le32 buffer_size_max; /* max buffer size bytes */ -} __packed; +} __attribute((packed)); /* PCM v4 */ struct snd_soc_tplg_pcm_v4 { @@ -619,7 +619,7 @@ struct snd_soc_tplg_pcm_v4 { struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ __le32 num_streams; /* number of streams */ struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */ -} __packed; +} __attribute((packed)); /* Physical link config v4 */ struct snd_soc_tplg_link_config_v4 { @@ -627,6 +627,6 @@ struct snd_soc_tplg_link_config_v4 { __le32 id; /* unique ID - used to match */ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */ __le32 num_streams; /* number of streams */ -} __packed; +} __attribute((packed)); #endif -- 2.17.1
Alsa-devel mailing list Alsa-devel@alsa-project.org https://mailman.alsa-project.org/mailman/listinfo/alsa-devel