Fix bugs in TAS and futex lock

* Incorrect lock value written in __kmp_test_futex_lock
* Incorrect lock value check in tas/futex lock with USE_LOCK_PROFILE on

Patch by Hansang Bae


git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@274053 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jonathan Peyton
2016-06-28 19:37:24 +00:00
parent 1a885988bf
commit f01e27f138
2 changed files with 5 additions and 3 deletions
+3 -3
View File
@@ -91,7 +91,7 @@ __kmp_acquire_tas_lock_timed_template( kmp_tas_lock_t *lck, kmp_int32 gtid )
KMP_MB();
#ifdef USE_LOCK_PROFILE
kmp_uint32 curr = TCR_4( lck->lk.poll );
kmp_uint32 curr = KMP_LOCK_STRIP( TCR_4( lck->lk.poll ) );
if ( ( curr != 0 ) && ( curr != gtid + 1 ) )
__kmp_printf( "LOCK CONTENTION: %p\n", lck );
/* else __kmp_printf( "." );*/
@@ -393,7 +393,7 @@ __kmp_acquire_futex_lock_timed_template( kmp_futex_lock_t *lck, kmp_int32 gtid )
KMP_MB();
#ifdef USE_LOCK_PROFILE
kmp_uint32 curr = TCR_4( lck->lk.poll );
kmp_uint32 curr = KMP_LOCK_STRIP( TCR_4( lck->lk.poll ) );
if ( ( curr != 0 ) && ( curr != gtid_code ) )
__kmp_printf( "LOCK CONTENTION: %p\n", lck );
/* else __kmp_printf( "." );*/
@@ -487,7 +487,7 @@ __kmp_acquire_futex_lock_with_checks( kmp_futex_lock_t *lck, kmp_int32 gtid )
int
__kmp_test_futex_lock( kmp_futex_lock_t *lck, kmp_int32 gtid )
{
if ( KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(futex), KMP_LOCK_BUSY(gtid+1, futex) << 1 ) ) {
if ( KMP_COMPARE_AND_STORE_ACQ32( & ( lck->lk.poll ), KMP_LOCK_FREE(futex), KMP_LOCK_BUSY((gtid+1) << 1, futex) ) ) {
KMP_FSYNC_ACQUIRED( lck );
return TRUE;
}
+2
View File
@@ -1,4 +1,6 @@
// RUN: %libomp-compile-and-run
// RUN: env KMP_LOCK_KIND=tas %libomp-run
// RUN: env KMP_LOCK_KIND=futex %libomp-run
#include <stdio.h>
#include "omp_testsuite.h"