mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-24 03:31:07 +00:00
cc25c8b4c1
This replaces the pthread rwlock with a new implementation that uses a more scalable algorithm (primarily through not using a critical section anymore to make state changes). The fast path for rdlock acquisition and release is now basically a single atomic read-modify write or CAS and a few branches. See nptl/pthread_rwlock_common.c for details. * nptl/DESIGN-rwlock.txt: Remove. * nptl/lowlevelrwlock.sym: Remove. * nptl/Makefile: Add new tests. * nptl/pthread_rwlock_common.c: New file. Contains the new rwlock. * nptl/pthreadP.h (PTHREAD_RWLOCK_PREFER_READER_P): Remove. (PTHREAD_RWLOCK_WRPHASE, PTHREAD_RWLOCK_WRLOCKED, PTHREAD_RWLOCK_RWAITING, PTHREAD_RWLOCK_READER_SHIFT, PTHREAD_RWLOCK_READER_OVERFLOW, PTHREAD_RWLOCK_WRHANDOVER, PTHREAD_RWLOCK_FUTEX_USED): New. * nptl/pthread_rwlock_init.c (__pthread_rwlock_init): Adapt to new implementation. * nptl/pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock_slow): Remove. (__pthread_rwlock_rdlock): Adapt. * nptl/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Adapt. * nptl/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Adapt. * nptl/pthread_rwlock_trywrlock.c (pthread_rwlock_trywrlock): Adapt. * nptl/pthread_rwlock_tryrdlock.c (pthread_rwlock_tryrdlock): Adapt. * nptl/pthread_rwlock_unlock.c (pthread_rwlock_unlock): Adapt. * nptl/pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock_slow): Remove. (__pthread_rwlock_wrlock): Adapt. * nptl/tst-rwlock10.c: Adapt. * nptl/tst-rwlock11.c: Adapt. * nptl/tst-rwlock17.c: New file. * nptl/tst-rwlock18.c: New file. * nptl/tst-rwlock19.c: New file. * nptl/tst-rwlock2b.c: New file. * nptl/tst-rwlock8.c: Adapt. * nptl/tst-rwlock9.c: Adapt. * sysdeps/aarch64/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/arm/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/hppa/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/ia64/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/m68k/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/microblaze/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/mips/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/nios2/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/s390/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/sh/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/sparc/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/tile/nptl/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * sysdeps/x86/bits/pthreadtypes.h (pthread_rwlock_t): Adapt. * nptl/nptl-printers.py (): Adapt. * nptl/nptl_lock_constants.pysym: Adapt. * nptl/test-rwlock-printers.py: Adapt. * nptl/test-rwlockattr-printers.c: Adapt. * nptl/test-rwlockattr-printers.py: Adapt. |
||
---|---|---|
.. | ||
alpha | ||
alphaev6/fpu | ||
alphaev67/fpu | ||
bits | ||
fpu | ||
sys | ||
____longjmp_chk.S | ||
a.out.h | ||
adjtime.c | ||
aio_cancel.c | ||
arch-fork.h | ||
brk.S | ||
c++-types.data | ||
clone.S | ||
configure | ||
configure.ac | ||
creat.c | ||
dl-auxv.h | ||
dl-brk.S | ||
dl-fxstatat64.c | ||
dl-support.c | ||
dl-sysdep.c | ||
fraiseexcpt.S | ||
fstatfs64.c | ||
fstatvfs64.c | ||
fstatvfs.c | ||
fxstat.c | ||
fxstatat.c | ||
getclktck.c | ||
getcontext.S | ||
getdents64.c | ||
getdents.c | ||
gethostname.c | ||
getsysstats.c | ||
glob.c | ||
ieee_get_fp_control.S | ||
ieee_set_fp_control.S | ||
Implies | ||
internal_statvfs64.c | ||
ioperm.c | ||
ipc_priv.h | ||
kernel_sigaction.h | ||
kernel_stat.h | ||
kernel_sysinfo.h | ||
kernel_termios.h | ||
kernel-features.h | ||
ld.abilist | ||
libanl.abilist | ||
libBrokenLocale.abilist | ||
libc.abilist | ||
libcrypt.abilist | ||
libdl.abilist | ||
libm.abilist | ||
libnsl.abilist | ||
libpthread.abilist | ||
libresolv.abilist | ||
librt.abilist | ||
libthread_db.abilist | ||
libutil.abilist | ||
localplt.data | ||
lxstat.c | ||
makecontext.S | ||
Makefile | ||
nldbl-abi.h | ||
oldglob.c | ||
pipe.S | ||
pt-vfork.S | ||
register-dump.h | ||
rt_sigaction.S | ||
setcontext.S | ||
setfpucw.c | ||
shlib-versions | ||
sigaction.c | ||
sigcontextinfo.h | ||
sigprocmask.c | ||
sigsuspend.S | ||
sizes.h | ||
statfs64.c | ||
statvfs64.c | ||
statvfs.c | ||
swapcontext.S | ||
syscall.S | ||
syscalls.list | ||
sysconf.c | ||
sysdep-cancel.h | ||
sysdep.h | ||
timer_create.c | ||
timer_delete.c | ||
timer_getoverr.c | ||
timer_gettime.c | ||
timer_settime.c | ||
ucontext-offsets.sym | ||
Versions | ||
vfork.S | ||
wordexp.c | ||
xstat.c | ||
xstatconv.c | ||
xstatconv.h |