summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/smplockseq.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-07-14 14:55:49 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-07-22 11:24:53 +0200
commit64ed0bb3072282265885689e1fe7e8baf3bb20c3 (patch)
tree473c417ee7fdf044ca63507b9ae9d932aab5b935 /cpukit/score/include/rtems/score/smplockseq.h
parentscore: Add debug support to chains (diff)
downloadrtems-64ed0bb3072282265885689e1fe7e8baf3bb20c3.tar.bz2
score: Assert proper seqlock writer state
Helps to detect invalid concurrent writes.
Diffstat (limited to 'cpukit/score/include/rtems/score/smplockseq.h')
-rw-r--r--cpukit/score/include/rtems/score/smplockseq.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/smplockseq.h b/cpukit/score/include/rtems/score/smplockseq.h
index 6fe7b7afa3..5daaee9c6e 100644
--- a/cpukit/score/include/rtems/score/smplockseq.h
+++ b/cpukit/score/include/rtems/score/smplockseq.h
@@ -21,6 +21,7 @@
#if defined(RTEMS_SMP)
+#include <rtems/score/assert.h>
#include <rtems/score/atomic.h>
#ifdef __cplusplus
@@ -102,6 +103,8 @@ static inline unsigned int _SMP_sequence_lock_Write_begin(
unsigned int seq;
seq = _Atomic_Load_uint( &lock->sequence, ATOMIC_ORDER_RELAXED );
+ _Assert( seq % 2 == 0 );
+
_Atomic_Store_uint( &lock->sequence, seq + 1, ATOMIC_ORDER_RELAXED );
/* There is no atomic store with acquire/release semantics */