linux/sound/core
Takashi Iwai df1d6ea05a ALSA: Fix year 2038 issue for sound subsystem
This is a series I worked on with Baolin in 2017 and 2018, but we
 never quite managed to finish up the last pieces. During the
 ALSA developer meetup at ELC-E 2018 in Edinburgh, a decision was
 made to go with this approach for keeping best compatibility
 with existing source code, and then I failed to follow up by
 resending the patches.
 
 Now I have patches for all remaining time_t uses in the kernel,
 so it's absolutely time to revisit them. I have done more
 review of the patches myself and found a couple of minor issues
 that I have fixed up, otherwise the series is still the same as
 before.
 
 Conceptually, the idea of these patches is:
 
 - 64-bit applications should see no changes at all, neither
   compile-time nor run-time.
 
 - 32-bit code compiled with a 64-bit time_t currently
   does not work with ALSA, and requires kernel changes and/or
   sound/asound.h changes
 
 - Most 32-bit code using these interfaces will work correctly
   on a modified kernel, with or without the uapi header changes.
 
 - 32-bit code using SNDRV_TIMER_IOCTL_TREAD requires the
   updated header file for 64-bit time_t support
 
 - 32-bit i386 user space with 64-bit time_t is broken for
   SNDRV_PCM_IOCTL_STATUS, SNDRV_RAWMIDI_IOCTL_STATUS and
   SNDRV_PCM_IOCTL_SYNC_PTR because of i386 alignment. This is also
   addressed by the updated uapi header.
 
 - PCM mmap is currently supported on native x86 kernels
   (both 32-bit and 64-bit) but not for compat mode. This series breaks
   the 32-bit native mmap support for 32-bit time_t, but instead allows
   it for 64-bit time_t on both native and compat kernels. This seems to
   be the best trade-off, as mmap support is optional already, and most
   32-bit code runs in compat mode anyway.
 
 - I've tried to avoid breaking compilation of 32-bit code
   as much as possible. Anything that does break however is likely code
   that is already broken on 64-bit time_t and needs source changes to
   fix them.
 
 [1] https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git y2038-alsa-v8
 [2] https://lore.kernel.org/lkml/CAK8P3a2Os66+iwQYf97qh05W2JP8rmWao8zmKoHiXqVHvyYAJA@mail.gmail.com/T/#m6519cb07cfda08adf1dedea6596bb98892b4d5dc
 
 Signed-off-by: Arnd Bergmann <arnd@arndb.de>
 
 Changes since v7: (Arnd):
  - Fix a typo found by Ben Hutchings
 
 Changes since v6: (Arnd):
  - Add a patch to update the API versions
  - Hide a timespec reference in #ifndef __KERNEL__ to remove the
    last reference to time_t
  - Use a more readable way to do padding and describe it in the
    changelog
  - Rebase to linux-5.5-rc1, changing include/sound/soc-component.h
    and sound/drivers/aloop.c as needed.
 
 Changes since v5 (Arnd):
  - Rebased to linux-5.4-rc4
  - Updated to completely remove timespec and time_t references from alsa
  - found and fixed a few bugs
 
 Changes since v4 (Baolin):
  - Add patch 5 to change trigger_tstamp member of struct snd_pcm_runtime.
  - Add patch 8 to change internal timespec.
  - Add more explanation in commit message.
  - Use ktime_get_real_ts64() in patch 6.
  - Split common code out into a separate function in patch 6.
  - Fix tu->tread bug in patch 6 and remove #if __BITS_PER_LONG == 64 macro.
 
 Changes since v3:
  - Move struct snd_pcm_status32 to pcm.h file.
  - Modify comments and commit message.
  - Add new patch2 ~ patch6.
 
 Changes since v2:
  - Renamed all structures to make clear.
  - Remove CONFIG_X86_X32 macro and introduced new compat_snd_pcm_status64_x86_32.
 
 Changes since v1:
  - Add one macro for struct snd_pcm_status_32 which only active in 32bits kernel.
  - Convert pcm_compat.c to use struct snd_pcm_status_64.
  - Convert pcm_native.c to use struct snd_pcm_status_64.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJd+URTAAoJEGCrR//JCVIn4FwQAJlo8vLvc/bZc58cw5KBdsal
 /lgYiCoT2Q7IMC3FHr28jVd+R3vAzfSMJFmwawCtV0iNXOsAHv2yyE9+whqH0ljg
 oz1o7X+oDBBa9Fed1WIxrAjFWzI7u+4lz29qvkenP6x2h9tvvMq0cdxRMz4qSVPk
 u7c7Yui/yEtBHmcWoQFNhIpeTFg8QCPZnR9SkyZ4O/q1GS9n+Ep5kLioFl3PQGGi
 KndZ+gMBgIj4l7sRV0l2KFzP/N2dXowUlP+AW9V80LgSI4VyQ7jgMG+QalgzAXwH
 ey1apJ38m51EglAi4TTglcTpe/TyTKLHs9JBAI+7QNa90EwJTrmjmXwXtfnBVlAS
 d0uK7ISFNyK/PujYsUD7FQrDeubgSeAYHyKtAh3YGVKFUEOBsGywSVyuCIoRJsmR
 2mJFHrsZnvKyooGJY9gwMmttoanwcXnGXloTjFQF7qEzFoi2BdoBsjWrDiN+3olc
 WVbW3rWSjVeKzD9cEylchTxkxFP1j2NDQEPD4epq+ncm0feq9mC7rrt5G9gXKMmu
 qf2pMEUKFE7Tn3LllT4iUY7z4FybgEuKADH5/5zQjsVvBZ5BCvi1BDUJaYRQozxh
 hC6ovFG7uTRL6wOw/7GGx9/lgX2GQ91z6IJeuqZSLj+tdlzVKoScfRgnrbZS8ZOy
 W4RfCyuo5PedyqfTeTEX
 =58V0
 -----END PGP SIGNATURE-----

Merge tag 'y2038-alsa-v8-signed' of git://git.kernel.org:/pub/scm/linux/kernel/git/arnd/playground into for-next

ALSA: Fix year 2038 issue for sound subsystem

This is a series I worked on with Baolin in 2017 and 2018, but we
never quite managed to finish up the last pieces. During the
ALSA developer meetup at ELC-E 2018 in Edinburgh, a decision was
made to go with this approach for keeping best compatibility
with existing source code, and then I failed to follow up by
resending the patches.

Now I have patches for all remaining time_t uses in the kernel,
so it's absolutely time to revisit them. I have done more
review of the patches myself and found a couple of minor issues
that I have fixed up, otherwise the series is still the same as
before.

Conceptually, the idea of these patches is:

- 64-bit applications should see no changes at all, neither
  compile-time nor run-time.

- 32-bit code compiled with a 64-bit time_t currently
  does not work with ALSA, and requires kernel changes and/or
  sound/asound.h changes

- Most 32-bit code using these interfaces will work correctly
  on a modified kernel, with or without the uapi header changes.

- 32-bit code using SNDRV_TIMER_IOCTL_TREAD requires the
  updated header file for 64-bit time_t support

- 32-bit i386 user space with 64-bit time_t is broken for
  SNDRV_PCM_IOCTL_STATUS, SNDRV_RAWMIDI_IOCTL_STATUS and
  SNDRV_PCM_IOCTL_SYNC_PTR because of i386 alignment. This is also
  addressed by the updated uapi header.

- PCM mmap is currently supported on native x86 kernels
  (both 32-bit and 64-bit) but not for compat mode. This series breaks
  the 32-bit native mmap support for 32-bit time_t, but instead allows
  it for 64-bit time_t on both native and compat kernels. This seems to
  be the best trade-off, as mmap support is optional already, and most
  32-bit code runs in compat mode anyway.

- I've tried to avoid breaking compilation of 32-bit code
  as much as possible. Anything that does break however is likely code
  that is already broken on 64-bit time_t and needs source changes to
  fix them.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git y2038-alsa-v8
[2] https://lore.kernel.org/lkml/CAK8P3a2Os66+iwQYf97qh05W2JP8rmWao8zmKoHiXqVHvyYAJA@mail.gmail.com/T/#m6519cb07cfda08adf1dedea6596bb98892b4d5dc

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Changes since v7: (Arnd):
 - Fix a typo found by Ben Hutchings

Changes since v6: (Arnd):
 - Add a patch to update the API versions
 - Hide a timespec reference in #ifndef __KERNEL__ to remove the
   last reference to time_t
 - Use a more readable way to do padding and describe it in the
   changelog
 - Rebase to linux-5.5-rc1, changing include/sound/soc-component.h
   and sound/drivers/aloop.c as needed.

Changes since v5 (Arnd):
 - Rebased to linux-5.4-rc4
 - Updated to completely remove timespec and time_t references from alsa
 - found and fixed a few bugs

Changes since v4 (Baolin):
 - Add patch 5 to change trigger_tstamp member of struct snd_pcm_runtime.
 - Add patch 8 to change internal timespec.
 - Add more explanation in commit message.
 - Use ktime_get_real_ts64() in patch 6.
 - Split common code out into a separate function in patch 6.
 - Fix tu->tread bug in patch 6 and remove #if __BITS_PER_LONG == 64 macro.

Changes since v3:
 - Move struct snd_pcm_status32 to pcm.h file.
 - Modify comments and commit message.
 - Add new patch2 ~ patch6.

Changes since v2:
 - Renamed all structures to make clear.
 - Remove CONFIG_X86_X32 macro and introduced new compat_snd_pcm_status64_x86_32.

Changes since v1:
 - Add one macro for struct snd_pcm_status_32 which only active in 32bits kernel.
 - Convert pcm_compat.c to use struct snd_pcm_status_64.
 - Convert pcm_native.c to use struct snd_pcm_status_64.
2019-12-17 23:12:39 +01:00
..
oss sound updates #2 for 5.5-rc1 2019-12-06 13:06:14 -08:00
seq ALSA: timer: Fix possible race at assigning a timer instance 2019-11-08 14:52:44 +01:00
compress_offload.c ASoC: Fixes for v5.4 2019-11-07 13:52:17 +01:00
control_compat.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
control.c ASoC: Updates for v5.3 2019-07-08 14:45:34 +02:00
ctljack.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
device.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
hrtimer.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
hwdep_compat.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
hwdep.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
info_oss.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
info.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
init.c ALSA: pcm: Add card sync_irq field 2019-11-20 19:39:54 +01:00
isadma.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
jack.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
Kconfig sound: Fix Kconfig indentation 2019-10-07 03:53:03 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
memalloc.c ALSA: memalloc: Add vmalloc buffer allocation support 2019-11-06 15:43:33 +01:00
memory.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
misc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
pcm_compat.c ALSA: add new 32-bit layout for snd_pcm_mmap_status/control 2019-12-13 11:25:58 +01:00
pcm_dmaengine.c ASoC: pcm_dmaengine: Extract snd_dmaengine_pcm_refine_runtime_hwparams 2019-10-01 12:18:25 +01:00
pcm_drm_eld.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
pcm_iec958.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
pcm_lib.c ALSA: Fix year 2038 issue for sound subsystem 2019-12-17 23:12:39 +01:00
pcm_local.h ALSA: pcm: Move PCM_RUNTIME_CHECK() macro into local header 2019-11-20 19:39:54 +01:00
pcm_memory.c ALSA: pcm: Move PCM_RUNTIME_CHECK() macro into local header 2019-11-20 19:39:54 +01:00
pcm_misc.c ALSA: pcm: add SNDRV_PCM_FORMAT_{S,U}20 2017-11-29 09:26:33 +01:00
pcm_native.c ALSA: add new 32-bit layout for snd_pcm_mmap_status/control 2019-12-13 11:25:58 +01:00
pcm_param_trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pcm_timer.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
pcm_trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pcm.c ALSA: Avoid using timespec for struct snd_pcm_status 2019-12-11 22:06:15 +01:00
rawmidi_compat.c ALSA: Avoid using timespec for struct snd_rawmidi_status 2019-12-11 22:06:16 +01:00
rawmidi.c ALSA: Avoid using timespec for struct snd_rawmidi_status 2019-12-11 22:06:16 +01:00
seq_device.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sgbuf.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sound_oss.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sound.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
timer_compat.c ALSA: Avoid using timespec for struct snd_timer_tread 2019-12-13 11:25:57 +01:00
timer.c ALSA: Avoid using timespec for struct snd_timer_tread 2019-12-13 11:25:57 +01:00
vmaster.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00