diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-07-14 14:55:49 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-07-22 11:24:53 +0200 |
commit | 64ed0bb3072282265885689e1fe7e8baf3bb20c3 (patch) | |
tree | 473c417ee7fdf044ca63507b9ae9d932aab5b935 /cpukit/score/include/rtems/score/smplockseq.h | |
parent | score: Add debug support to chains (diff) | |
download | rtems-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.h | 3 |
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 */ |