public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 00/18] More y2038 fixes
@ 2021-06-17 11:50 Adhemerval Zanella
  2021-06-17 11:50 ` [PATCH 01/18] Use 64 bit time_t stat internally Adhemerval Zanella
                   ` (18 more replies)
  0 siblings, 19 replies; 48+ messages in thread
From: Adhemerval Zanella @ 2021-06-17 11:50 UTC (permalink / raw)
  To: libc-alpha, Lukasz Majewski, Carlos O'Donell

Hi Carlos and Lukasz,

This patchset adds more y2038 fixes that I would like to push for 2.34.
The first two patches enable more internal y2038 usage on glibc and
also for the installed programs.  Making glibc the first consumer of
these newer interfaces should improve coverage.

The next 6 patches removes an optimization I added on some specific
syscall, where a global variable it atomically set once glibc detects
that kernel supports 64-bit time.  The problem with this approach
breaks the usage case of live migration like CRIU or similar.  Also for
some interfaces that do not query information from kernel, most usages
can be optimized away by either building glibc with a minimum 5.1 kernel
or by using the 32-bit syscall for the common case.

So the following patch implement this optimization for the interfaces
that allows it.  If the provided timeout can be fit in old 32-bit
time_t, the old syscall is used instead.  This optimization is only used
for !__ASSUME_TIME64_SYSCALLS, otherwise the newer 64-bit syscall are
used.

I checked this with 3 different configation which should cover most
usages:

  - i686-linux-gnu on a 4.15 kernel and default --enable-kernel=3.2.
    This uses the 32-bit optimization to avoid calling the newer
    64-bit syscall when possible.  It also triggers and EOVERFLOW
    when 64-bit inputs are used without proper kernel support.
  - i686-linux-gnu on a 5.11 kernel and default --enable-kernel=3.2.
    This will also use the 32-bit optimization, but it will always
    succeded due proper kernel support.
  - i686-linux-gnu on a 5.11 kernel and with --enable-kernel=5.1.
    This enables __ASSUME_TIME64_SYSCALLS and only uses 64-bit
    time_t syscalls.

Adhemerval Zanella (18):
  Use 64 bit time_t stat internally
  Use LFS and 64 bit time for installed programs
  support: Add support_create_timer
  linux: Only use 64-bit syscall if required for ppoll
  linux: Only use 64-bit syscall if required for pselect
  linux: Only use 64-bit syscall if required for select
  linux: Remove supports_time64 () from clock_getres
  linux: Remove supports_time64 () from clock_gettime
  linux: Remove time64-support
  linux: timerfd_gettime minor cleanup
  linux: Only use 64-bit syscall if required for semtimedop
  linux: Only use 64-bit syscall if required for timerfd_settime
  linux: Only use 64-bit syscall if required for mq_timedreceive
  linux: Only use 64-bit syscall if required for mq_timedsend
  linux: Only use 64-bit syscall if required for sigtimedwait
  linux: Only use 64-bit syscall if required for utimensat family
  linux: Only use 64-bit syscall if required for internal futex
  linux: Only use 64-bit syscall if required for clock_nanosleep

 Makeconfig                                    |   8 +-
 Makerules                                     |  12 +-
 csu/check_fds.c                               |   8 +-
 elf/dl-load.c                                 |   8 +-
 elf/dl-misc.c                                 |   4 +-
 elf/dl-profile.c                              |   4 +-
 iconv/gconv_cache.c                           |   4 +-
 include/dirent.h                              |   2 +-
 include/file_change_detection.h               |   6 +-
 include/sys/select.h                          |   5 +
 inet/rcmd.c                                   |   6 +-
 intl/loadmsgcat.c                             |   4 +-
 io/Makefile                                   |   4 +-
 io/file_change_detection.c                    |  16 ++-
 io/getdirname.c                               |   6 +-
 libio/filedoalloc.c                           |   2 +-
 libio/fileops.c                               |   8 +-
 libio/oldfileops.c                            |   2 +-
 libio/wfileops.c                              |   2 +-
 locale/loadarchive.c                          |   8 +-
 locale/loadlocale.c                           |   6 +-
 locale/localeinfo.h                           |   2 +-
 misc/Makefile                                 |  11 ++
 misc/tst-pselect.c                            | 120 ++++++++----------
 misc/tst-select.c                             |  39 +++---
 nptl/futex-internal.c                         |  52 +++++---
 nscd/nscd_helper.c                            |   4 +-
 nss/nss_database.c                            |   4 +-
 rt/Makefile                                   |   4 +-
 rt/tst-mqueue10-time64.c                      |   1 +
 rt/tst-mqueue10.c                             |  72 +++++++++++
 support/Makefile                              |   1 +
 support/support.h                             |  11 ++
 support/support_create_timer.c                |  69 ++++++++++
 sysdeps/nptl/futex-internal.h                 |  24 ++--
 sysdeps/posix/dl-fileid.h                     |   4 +-
 sysdeps/posix/euidaccess.c                    |   4 +-
 sysdeps/posix/getaddrinfo.c                   |  21 +--
 sysdeps/posix/getcwd.c                        |  15 ++-
 sysdeps/posix/pathconf.c                      |   4 +-
 sysdeps/posix/sysconf.c                       |   4 +-
 sysdeps/posix/tempname.c                      |   8 +-
 sysdeps/unix/sysv/linux/Makefile              |  15 ++-
 sysdeps/unix/sysv/linux/clock_getres.c        |  16 +--
 sysdeps/unix/sysv/linux/clock_gettime.c       |  14 +-
 sysdeps/unix/sysv/linux/clock_nanosleep.c     |  47 ++++---
 sysdeps/unix/sysv/linux/fdopendir.c           |   4 +-
 sysdeps/unix/sysv/linux/fexecve.c             |   4 +-
 .../unix/sysv/linux/microblaze/pselect32.c    |   3 +-
 sysdeps/unix/sysv/linux/mq_timedreceive.c     |  35 ++---
 sysdeps/unix/sysv/linux/mq_timedsend.c        |  35 ++---
 sysdeps/unix/sysv/linux/opendir.c             |   7 +-
 sysdeps/unix/sysv/linux/pathconf.c            |   5 +-
 sysdeps/unix/sysv/linux/ppoll.c               |  41 +++---
 sysdeps/unix/sysv/linux/pselect.c             |  47 ++++---
 sysdeps/unix/sysv/linux/pselect32.c           |   6 -
 sysdeps/unix/sysv/linux/select.c              |  60 +++------
 sysdeps/unix/sysv/linux/select32.c            |  58 +++++++++
 sysdeps/unix/sysv/linux/semtimedop.c          |  54 ++++----
 sysdeps/unix/sysv/linux/sigtimedwait.c        |  26 ++--
 sysdeps/unix/sysv/linux/time64-support.c      |  23 ----
 sysdeps/unix/sysv/linux/time64-support.h      |  70 ----------
 sysdeps/unix/sysv/linux/timerfd_gettime.c     |  10 +-
 sysdeps/unix/sysv/linux/timerfd_settime.c     |  25 ++--
 sysdeps/unix/sysv/linux/tst-ppoll.c           |  15 +++
 sysdeps/unix/sysv/linux/tst-sigtimedwait.c    |  18 +++
 sysdeps/unix/sysv/linux/tst-timerfd.c         |  29 ++++-
 sysdeps/unix/sysv/linux/ttyname.h             |  10 +-
 sysdeps/unix/sysv/linux/ttyname_r.c           |  16 +--
 sysdeps/unix/sysv/linux/utimensat.c           |  35 +++--
 sysvipc/Makefile                              |   9 ++
 sysvipc/ftok.c                                |   4 +-
 sysvipc/test-sysvsem.c                        |  22 +++-
 time/Makefile                                 |   9 ++
 time/tst-clock_nanosleep.c                    |  40 +++---
 time/tzfile.c                                 |   6 +-
 76 files changed, 851 insertions(+), 566 deletions(-)
 create mode 100644 rt/tst-mqueue10-time64.c
 create mode 100644 rt/tst-mqueue10.c
 create mode 100644 support/support_create_timer.c
 create mode 100644 sysdeps/unix/sysv/linux/select32.c
 delete mode 100644 sysdeps/unix/sysv/linux/time64-support.c
 delete mode 100644 sysdeps/unix/sysv/linux/time64-support.h

-- 
2.30.2


^ permalink raw reply	[flat|nested] 48+ messages in thread

end of thread, other threads:[~2021-06-22 19:51 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17 11:50 [PATCH 00/18] More y2038 fixes Adhemerval Zanella
2021-06-17 11:50 ` [PATCH 01/18] Use 64 bit time_t stat internally Adhemerval Zanella
2021-06-21  7:42   ` Lukasz Majewski
2021-06-22 19:37   ` Florian Weimer
2021-06-22 19:51     ` Adhemerval Zanella
2021-06-17 11:50 ` [PATCH 02/18] Use LFS and 64 bit time for installed programs Adhemerval Zanella
2021-06-17 12:19   ` Andreas Schwab
2021-06-18 18:50     ` Adhemerval Zanella
2021-06-17 20:49   ` Joseph Myers
2021-06-18 18:14     ` Adhemerval Zanella
2021-06-17 11:50 ` [PATCH 03/18] support: Add support_create_timer Adhemerval Zanella
2021-06-21  7:42   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 04/18] linux: Only use 64-bit syscall if required for ppoll Adhemerval Zanella
2021-06-21  7:42   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 05/18] linux: Only use 64-bit syscall if required for pselect Adhemerval Zanella
2021-06-21  7:42   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 06/18] linux: Only use 64-bit syscall if required for select Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 07/18] linux: Remove supports_time64 () from clock_getres Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 08/18] linux: Remove supports_time64 () from clock_gettime Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 09/18] linux: Remove time64-support Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 10/18] linux: timerfd_gettime minor cleanup Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 11/18] linux: Only use 64-bit syscall if required for semtimedop Adhemerval Zanella
2021-06-21  7:43   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 12/18] linux: Only use 64-bit syscall if required for timerfd_settime Adhemerval Zanella
2021-06-21  7:44   ` Lukasz Majewski
2021-06-17 11:50 ` [PATCH 13/18] linux: Only use 64-bit syscall if required for mq_timedreceive Adhemerval Zanella
2021-06-21  7:44   ` Lukasz Majewski
2021-06-17 11:51 ` [PATCH 14/18] linux: Only use 64-bit syscall if required for mq_timedsend Adhemerval Zanella
2021-06-21  7:44   ` Lukasz Majewski
2021-06-17 11:51 ` [PATCH 15/18] linux: Only use 64-bit syscall if required for sigtimedwait Adhemerval Zanella
2021-06-17 12:25   ` Andreas Schwab
2021-06-22 14:58     ` Adhemerval Zanella
2021-06-17 11:51 ` [PATCH 16/18] linux: Only use 64-bit syscall if required for utimensat family Adhemerval Zanella
2021-06-21  7:45   ` Lukasz Majewski
2021-06-17 11:51 ` [PATCH 17/18] linux: Only use 64-bit syscall if required for internal futex Adhemerval Zanella
2021-06-21  7:45   ` Lukasz Majewski
2021-06-17 11:51 ` [PATCH 18/18] linux: Only use 64-bit syscall if required for clock_nanosleep Adhemerval Zanella
2021-06-17 15:11   ` Lukasz Majewski
2021-06-17 17:45     ` Adhemerval Zanella
2021-06-21  7:46   ` Lukasz Majewski
2021-06-17 14:20 ` [PATCH 00/18] More y2038 fixes Lukasz Majewski
2021-06-17 17:41   ` Adhemerval Zanella
2021-06-17 20:58     ` Joseph Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).