mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
S390: Adjust lock elision code after review.
This patch adjusts s390 specific lock elision code after review of the following patches: -S390: Use own tbegin macro instead of __builtin_tbegin. (8bfc4a2ab4
) -S390: Use new __libc_tbegin_retry macro in elision-lock.c. (53c5c3d5ac
) -S390: Optimize lock-elision by decrementing adapt_count at unlock. (dd037fb3df
) The futex value is not tested before starting a transaction, __glibc_likely is used instead of __builtin_expect and comments are adjusted. ChangeLog: * sysdeps/unix/sysv/linux/s390/htm.h: Adjust comments. * sysdeps/unix/sysv/linux/s390/elision-unlock.c: Likewise. * sysdeps/unix/sysv/linux/s390/elision-lock.c: Adjust comments. (__lll_lock_elision): Do not test futex before starting a transaction. Use __glibc_likely instead of __builtin_expect. * sysdeps/unix/sysv/linux/s390/elision-trylock.c: Adjust comments. (__lll_trylock_elision): Do not test futex before starting a transaction. Use __glibc_likely instead of __builtin_expect.
This commit is contained in:
@ -119,11 +119,16 @@
|
||||
ar modification and fp operations. Some \
|
||||
program-interruptions (e.g. a null \
|
||||
pointer access) are filtered and the \
|
||||
trancsaction will abort. In this case \
|
||||
transaction will abort. In this case \
|
||||
the normal lock path will execute it \
|
||||
again and result in a core dump wich does \
|
||||
now show at tbegin but the real executed \
|
||||
instruction. */ \
|
||||
instruction. \
|
||||
However it is not guaranteed that this \
|
||||
retry operate on the same data and thus \
|
||||
may not end in an program-interruption. \
|
||||
Note: This could also be used to probe \
|
||||
memory for being accessible! */ \
|
||||
"2: tbegin 0, 0xFF0E\n\t" \
|
||||
/* Branch away in abort case (this is the \
|
||||
prefered sequence. See PoP in chapter 5 \
|
||||
@ -152,7 +157,8 @@
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* These builtins are correct. Use them. */
|
||||
/* These builtins are usable in context of glibc lock elision code without any
|
||||
changes. Use them. */
|
||||
#define __libc_tend() \
|
||||
({ __asm__ __volatile__ (".machine push\n\t" \
|
||||
".machinemode \"zarch_nohighgprs\"\n\t" \
|
||||
|
Reference in New Issue
Block a user