summaryrefslogtreecommitdiffstats
path: root/openmp
diff options
context:
space:
mode:
authorJonathan Peyton <jonathan.l.peyton@intel.com>2016-06-28 19:37:24 +0000
committerJonathan Peyton <jonathan.l.peyton@intel.com>2016-06-28 19:37:24 +0000
commitac7ba406edca6d17ce41bc25cef36b649a71e1d2 (patch)
tree55895243a317366142fd9d718f52738b10fba452 /openmp
parentcceebeef1781b9b41e6d9a48f0bdfe37580f4840 (diff)
downloadbcm5719-llvm-ac7ba406edca6d17ce41bc25cef36b649a71e1d2.tar.gz
bcm5719-llvm-ac7ba406edca6d17ce41bc25cef36b649a71e1d2.zip
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 llvm-svn: 274053
Diffstat (limited to 'openmp')
-rw-r--r--openmp/runtime/src/kmp_lock.cpp6
-rw-r--r--openmp/runtime/test/lock/omp_test_lock.c2
2 files changed, 5 insertions, 3 deletions
diff --git a/openmp/runtime/src/kmp_lock.cpp b/openmp/runtime/src/kmp_lock.cpp
index e5fd601a2d9..2cca61105e3 100644
--- a/openmp/runtime/src/kmp_lock.cpp
+++ b/openmp/runtime/src/kmp_lock.cpp
@@ -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;
}
diff --git a/openmp/runtime/test/lock/omp_test_lock.c b/openmp/runtime/test/lock/omp_test_lock.c
index 40111393416..c5120552702 100644
--- a/openmp/runtime/test/lock/omp_test_lock.c
+++ b/openmp/runtime/test/lock/omp_test_lock.c
@@ -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"
OpenPOWER on IntegriCloud