diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/elision-trylock.c | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/htm.h | 12 |
3 files changed, 23 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index 12cfb98fac..a5440e2a74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2015-11-19 Paul E. Murphy <murphyp@linux.vnet.ibm.com> + * sysdeps/unix/sysv/linux/powerpc/elision-trylock.c + (__lll_trylock_elision): Fix setting of adapt_count. + * sysdeps/unix/sysv/linux/powerpc/htm.h + (_ABORT_PERSISTENT): Define to clarify persistent aborts. + (_ABORT_NESTED_TRYLOCK): Renumber, and make persistent. + (_ABORT_SYSCALL): Renumber, and clarify definition. + (_ABORT_LOCK_BUSY): Renumber, make non-persistent. + +2015-11-19 Paul E. Murphy <murphyp@linux.vnet.ibm.com> + * sysdeps/ieee754/ldbl-128ibm/mpn2ldl.c: Include gmp headers after system headers to prevent MIN/MAX redefinition. Define HAVE_ALLOCA to preserve builtin alloca usage. diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c index 440939cda1..6f61eba48e 100644 --- a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c +++ b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c @@ -44,8 +44,12 @@ __lll_trylock_elision (int *futex, short *adapt_count) if (*futex == 0) return 0; - /* Lock was busy. Fall back to normal locking. */ - __builtin_tabort (_ABORT_LOCK_BUSY); + /* Lock was busy. This is never a nested transaction. + End it, and set the adapt count. */ + __builtin_tend (0); + + if (aconf.skip_lock_busy > 0) + *adapt_count = aconf.skip_lock_busy; } else { @@ -57,9 +61,6 @@ __lll_trylock_elision (int *futex, short *adapt_count) if (aconf.skip_trylock_internal_abort > 0) *adapt_count = aconf.skip_trylock_internal_abort; } - - if (aconf.skip_lock_busy > 0) - *adapt_count = aconf.skip_lock_busy; } use_lock: diff --git a/sysdeps/unix/sysv/linux/powerpc/htm.h b/sysdeps/unix/sysv/linux/powerpc/htm.h index 57d5cd6262..5127b4bf0a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/htm.h +++ b/sysdeps/unix/sysv/linux/powerpc/htm.h @@ -129,10 +129,12 @@ #endif /* __ASSEMBLER__ */ -/* Definitions used for TEXASR Failure code (bits 0:6), they need to be even - because tabort. always sets the first bit. */ -#define _ABORT_LOCK_BUSY 0x3f /* Lock already used. */ -#define _ABORT_NESTED_TRYLOCK 0x3e /* Write operation in trylock. */ -#define _ABORT_SYSCALL 0x3d /* Syscall issued. */ +/* Definitions used for TEXASR Failure code (bits 0:7). If the failure + should be persistent, the abort code must be odd. 0xd0 through 0xff + are reserved for the kernel and potential hypervisor. */ +#define _ABORT_PERSISTENT 0x01 /* An unspecified persistent abort. */ +#define _ABORT_LOCK_BUSY 0x34 /* Busy lock, not persistent. */ +#define _ABORT_NESTED_TRYLOCK (0x32 | _ABORT_PERSISTENT) +#define _ABORT_SYSCALL (0x30 | _ABORT_PERSISTENT) #endif |