6ca6e8
commit 6bcfbee7277e4faa4b693bd965931f0d1883005d
6ca6e8
Author: H.J. Lu <hjl.tools@gmail.com>
6ca6e8
Date:   Fri Nov 12 11:47:42 2021 -0800
6ca6e8
6ca6e8
    Move assignment out of the CAS condition
6ca6e8
    
6ca6e8
    Update
6ca6e8
    
6ca6e8
    commit 49302b8fdf9103b6fc0a398678668a22fa19574c
6ca6e8
    Author: H.J. Lu <hjl.tools@gmail.com>
6ca6e8
    Date:   Thu Nov 11 06:54:01 2021 -0800
6ca6e8
    
6ca6e8
        Avoid extra load with CAS in __pthread_mutex_clocklock_common [BZ #28537]
6ca6e8
    
6ca6e8
        Replace boolean CAS with value CAS to avoid the extra load.
6ca6e8
    
6ca6e8
    and
6ca6e8
    
6ca6e8
    commit 0b82747dc48d5bf0871bdc6da8cb6eec1256355f
6ca6e8
    Author: H.J. Lu <hjl.tools@gmail.com>
6ca6e8
    Date:   Thu Nov 11 06:31:51 2021 -0800
6ca6e8
    
6ca6e8
        Avoid extra load with CAS in __pthread_mutex_lock_full [BZ #28537]
6ca6e8
    
6ca6e8
        Replace boolean CAS with value CAS to avoid the extra load.
6ca6e8
    
6ca6e8
    by moving assignment out of the CAS condition.
6ca6e8
    
6ca6e8
    (cherry picked from commit 120ac6d238825452e8024e2f627da33b2508dfd3)
6ca6e8
6ca6e8
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
6ca6e8
index 9f40928cc6b9a067..49901ffa0a96d659 100644
6ca6e8
--- a/nptl/pthread_mutex_lock.c
6ca6e8
+++ b/nptl/pthread_mutex_lock.c
6ca6e8
@@ -305,10 +305,9 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
6ca6e8
 	     meantime.  */
6ca6e8
 	  if ((oldval & FUTEX_WAITERS) == 0)
6ca6e8
 	    {
6ca6e8
-	      int val;
6ca6e8
-	      if ((val = atomic_compare_and_exchange_val_acq
6ca6e8
-		   (&mutex->__data.__lock, oldval | FUTEX_WAITERS,
6ca6e8
-		    oldval)) != oldval)
6ca6e8
+	      int val = atomic_compare_and_exchange_val_acq
6ca6e8
+		(&mutex->__data.__lock, oldval | FUTEX_WAITERS, oldval);
6ca6e8
+	      if (val != oldval)
6ca6e8
 		{
6ca6e8
 		  oldval = val;
6ca6e8
 		  continue;
6ca6e8
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
6ca6e8
index 90cede9446e33fcf..2e5506db06ccb1ec 100644
6ca6e8
--- a/nptl/pthread_mutex_timedlock.c
6ca6e8
+++ b/nptl/pthread_mutex_timedlock.c
6ca6e8
@@ -234,10 +234,9 @@ __pthread_mutex_clocklock_common (pthread_mutex_t *mutex,
6ca6e8
 	     meantime.  */
6ca6e8
 	  if ((oldval & FUTEX_WAITERS) == 0)
6ca6e8
 	    {
6ca6e8
-	      int val;
6ca6e8
-	      if ((val = atomic_compare_and_exchange_val_acq
6ca6e8
-		   (&mutex->__data.__lock, oldval | FUTEX_WAITERS,
6ca6e8
-		    oldval)) != oldval)
6ca6e8
+	      int val = atomic_compare_and_exchange_val_acq
6ca6e8
+		(&mutex->__data.__lock, oldval | FUTEX_WAITERS, oldval);
6ca6e8
+	      if (val != oldval)
6ca6e8
 		{
6ca6e8
 		  oldval = val;
6ca6e8
 		  continue;