History

ALSA: core: fix 64-bit SNDRV_PCM_IOCTL_STATUS ABI breakage

Commit 4eeaaeaea (ALSA: core: add hooks for audio timestamps) added the new audio_tstamp field to struct snd_pcm_status. However, struct timespec requires 64-bit alignment, so the 64-bit compiler would insert 32 bits of padding before this field, which broke SNDRV_PCM_IOCTL_STATUS with error messages like this: kernel: unknown ioctl = 0x80984120 To solve this, insert the padding explicitly so that it can be taken into account when calculating the ABI structure size.

Clemens Ladisch committed 14 years ago

Commit 9c7066a1 parent 7dd7a2f2 files · +4 −2Browse files

Showing the changes to include/uapi (1 of 2 files). Show all

Unified · Split

include/uapi/sound/asound.h+2−1
@@ -407,8 +407,9 @@ struct snd_pcm_status { · 406 unmodified lines
407 snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */407 snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */
408 snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */408 snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */
409 snd_pcm_state_t suspended_state; /* suspended stream state */409 snd_pcm_state_t suspended_state; /* suspended stream state */
410 __u32 reserved_alignment; /* must be filled with zero */
410 struct timespec audio_tstamp; /* from sample counter or wall clock */411 struct timespec audio_tstamp; /* from sample counter or wall clock */
411 unsigned char reserved[60-sizeof(struct timespec)]; /* must be filled with zero */412 unsigned char reserved[56-sizeof(struct timespec)]; /* must be filled with zero */
412};413};
413 414
414struct snd_pcm_mmap_status {415struct snd_pcm_mmap_status {