This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.22-538-g86b4939


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  86b4939846caf2bb072bba6057e1dc3ad187c2c2 (commit)
      from  79adcb58f6ca687c61939bbe695ffc8c54558d5f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=86b4939846caf2bb072bba6057e1dc3ad187c2c2

commit 86b4939846caf2bb072bba6057e1dc3ad187c2c2
Author: Paul Murphy <murphyp@linux.vnet.ibm.com>
Date:   Wed Oct 28 17:34:31 2015 -0500

    powerpc: More elision improvements
    
    __lll_trylock_elision sets the adapt_count variable too
    aggressively, and incorrectly on persistent aborts.  Taking
    a cue from s390, adapt_count is only updated if the lock
    is locked, or a persistent failure occurs.
    
    In addition, the abort codes have been renumbered and
    refactored for clarity.  As it stands, glibc only cares
    if the abort is persistent or not.
    
    All aborts are now persistent, excepting a busy lock.  This
    includes changing _ABORT_NESTED_TRYLOCK into a persistent
    abort.
    
    	* 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.

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

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                         |   10 ++++++++++
 sysdeps/unix/sysv/linux/powerpc/elision-trylock.c |   11 ++++++-----
 sysdeps/unix/sysv/linux/powerpc/htm.h             |   12 +++++++-----
 3 files changed, 23 insertions(+), 10 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]