mbox

[v2,0/8] Extensible rseq integration

Message ID cover.1638880888.git.fweimer@redhat.com
Headers

Message

Florian Weimer Dec. 7, 2021, 12:59 p.m. UTC
  This series integrates the previous posted v2 for <thread_pointer.h>.

It incorporates Mathieu's and Paul E. McKenney suggestion to use a
volatile read for rseq_abi.cpu_id access, using a new
THREAD_GETMEM_VOLATILE macro.

The last patch in the series makes rseq registration consistent across
threads.

Florian Weimer (8):
  nptl: Add <thread_pointer.h> for defining __thread_pointer
  nptl: Introduce <tcb-access.h> for THREAD_* accessors
  nptl: Introduce THREAD_GETMEM_VOLATILE
  nptl: Add rseq registration
  Linux: Use rseq to accelerate sched_getcpu
  nptl: Add glibc.pthread.rseq tunable to control rseq registration
  nptl: Add public rseq symbols and <sys/rseq.h>
  nptl: rseq failure after registration on main thread is fatal

 NEWS                                          |  11 +
 manual/threads.texi                           |  81 ++++++
 manual/tunables.texi                          |  10 +
 nptl/descr.h                                  |   4 +
 nptl/pthread_create.c                         |  22 ++
 sysdeps/aarch64/nptl/tls.h                    |  10 +-
 sysdeps/alpha/nptl/tls.h                      |  10 +-
 sysdeps/arc/nptl/tls.h                        |  10 +-
 sysdeps/arm/nptl/tls.h                        |  10 +-
 sysdeps/csky/nptl/tls.h                       |  10 +-
 sysdeps/hppa/nptl/tls.h                       |  10 +-
 sysdeps/i386/nptl/tcb-access.h                | 125 +++++++++
 sysdeps/i386/nptl/tls.h                       | 108 +-------
 sysdeps/ia64/nptl/tls.h                       |  10 +-
 sysdeps/m68k/nptl/tls.h                       |  10 +-
 sysdeps/microblaze/nptl/tls.h                 |  15 +-
 sysdeps/mips/nptl/tls.h                       |   9 +-
 sysdeps/nios2/nptl/tls.h                      |  10 +-
 sysdeps/nptl/dl-tls_init_tp.c                 |  38 ++-
 sysdeps/nptl/dl-tunables.list                 |   6 +
 sysdeps/nptl/internaltypes.h                  |   1 +
 sysdeps/nptl/tcb-access.h                     |  32 +++
 sysdeps/nptl/thread_pointer.h                 |  28 ++
 sysdeps/powerpc/nptl/thread_pointer.h         |  33 +++
 sysdeps/powerpc/nptl/tls.h                    |  15 +-
 sysdeps/riscv/nptl/tls.h                      |   9 +-
 sysdeps/s390/nptl/tls.h                       |  10 +-
 sysdeps/sh/nptl/tls.h                         |  14 +-
 sysdeps/sparc/nptl/tls.h                      |  10 +-
 sysdeps/unix/sysv/linux/Makefile              |  20 +-
 sysdeps/unix/sysv/linux/Versions              |   5 +
 sysdeps/unix/sysv/linux/aarch64/bits/rseq.h   |  43 +++
 sysdeps/unix/sysv/linux/aarch64/ld.abilist    |   3 +
 sysdeps/unix/sysv/linux/alpha/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/arc/ld.abilist        |   3 +
 sysdeps/unix/sysv/linux/arm/be/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/arm/bits/rseq.h       |  83 ++++++
 sysdeps/unix/sysv/linux/arm/le/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/bits/rseq.h           |  29 ++
 sysdeps/unix/sysv/linux/csky/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/hppa/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/i386/ld.abilist       |   3 +
 sysdeps/unix/sysv/linux/ia64/ld.abilist       |   3 +
 .../unix/sysv/linux/m68k/coldfire/ld.abilist  |   3 +
 .../unix/sysv/linux/m68k/m680x0/ld.abilist    |   3 +
 sysdeps/unix/sysv/linux/microblaze/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/mips/bits/rseq.h      |  62 +++++
 .../unix/sysv/linux/mips/mips32/ld.abilist    |   3 +
 .../sysv/linux/mips/mips64/n32/ld.abilist     |   3 +
 .../sysv/linux/mips/mips64/n64/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/nios2/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/powerpc/bits/rseq.h   |  37 +++
 .../sysv/linux/powerpc/powerpc32/ld.abilist   |   3 +
 .../linux/powerpc/powerpc64/be/ld.abilist     |   3 +
 .../linux/powerpc/powerpc64/le/ld.abilist     |   3 +
 sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist |   3 +
 sysdeps/unix/sysv/linux/rseq-internal.h       |  52 ++++
 sysdeps/unix/sysv/linux/s390/bits/rseq.h      |  37 +++
 .../unix/sysv/linux/s390/s390-32/ld.abilist   |   3 +
 .../unix/sysv/linux/s390/s390-64/ld.abilist   |   3 +
 sysdeps/unix/sysv/linux/sched_getcpu.c        |  19 +-
 sysdeps/unix/sysv/linux/sh/be/ld.abilist      |   3 +
 sysdeps/unix/sysv/linux/sh/le/ld.abilist      |   3 +
 .../unix/sysv/linux/sparc/sparc32/ld.abilist  |   3 +
 .../unix/sysv/linux/sparc/sparc64/ld.abilist  |   3 +
 sysdeps/unix/sysv/linux/sys/rseq.h            | 184 +++++++++++++
 sysdeps/unix/sysv/linux/tst-rseq-disable.c    |  95 +++++++
 sysdeps/unix/sysv/linux/tst-rseq-nptl.c       | 260 ++++++++++++++++++
 sysdeps/unix/sysv/linux/tst-rseq.c            |  72 +++++
 sysdeps/unix/sysv/linux/tst-rseq.h            |  57 ++++
 sysdeps/unix/sysv/linux/x86/bits/rseq.h       |  30 ++
 sysdeps/unix/sysv/linux/x86_64/64/ld.abilist  |   3 +
 sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist |   3 +
 sysdeps/x86/nptl/thread_pointer.h             |  38 +++
 sysdeps/x86_64/nptl/tcb-access.h              | 132 +++++++++
 sysdeps/x86_64/nptl/tls.h                     | 114 +-------
 77 files changed, 1745 insertions(+), 382 deletions(-)
 create mode 100644 sysdeps/i386/nptl/tcb-access.h
 create mode 100644 sysdeps/nptl/tcb-access.h
 create mode 100644 sysdeps/nptl/thread_pointer.h
 create mode 100644 sysdeps/powerpc/nptl/thread_pointer.h
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/arm/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/mips/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/rseq-internal.h
 create mode 100644 sysdeps/unix/sysv/linux/s390/bits/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/sys/rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-disable.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq-nptl.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.c
 create mode 100644 sysdeps/unix/sysv/linux/tst-rseq.h
 create mode 100644 sysdeps/unix/sysv/linux/x86/bits/rseq.h
 create mode 100644 sysdeps/x86/nptl/thread_pointer.h
 create mode 100644 sysdeps/x86_64/nptl/tcb-access.h


base-commit: 68007900beef12000ed90f38c251eaf32fbc0490