aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/elision-trylock.c11
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/htm.h12
3 files changed, 23 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 12cfb98..a5440e2 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 440939c..6f61eba 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 57d5cd6..5127b4b 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