From ad7292f26465027cb8fd5494e613f5bd63607623 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 14 Feb 2014 12:57:53 +0100 Subject: score: Add SMP barrier --- testsuites/smptests/smpatomic01/init.c | 48 ++-------------------------------- 1 file changed, 2 insertions(+), 46 deletions(-) (limited to 'testsuites/smptests/smpatomic01') diff --git a/testsuites/smptests/smpatomic01/init.c b/testsuites/smptests/smpatomic01/init.c index 2901a98e90..792a17bfaf 100644 --- a/testsuites/smptests/smpatomic01/init.c +++ b/testsuites/smptests/smpatomic01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -19,56 +19,12 @@ #endif #include +#include #include #include #include "tmacros.h" -/* FIXME: Add barrier to Score */ - -typedef struct { - Atomic_Ulong value; - Atomic_Ulong sense; -} SMP_barrier_Control; - -typedef struct { - unsigned long sense; -} SMP_barrier_State; - -#define SMP_BARRIER_CONTROL_INITIALIZER \ - { ATOMIC_INITIALIZER_ULONG( 0 ), ATOMIC_INITIALIZER_ULONG( 0 ) } - -#define SMP_BARRIER_STATE_INITIALIZER { 0 } - -static void _SMP_barrier_Wait( - SMP_barrier_Control *control, - SMP_barrier_State *state, - unsigned long count -) -{ - unsigned long sense = ~state->sense; - unsigned long previous_value; - - state->sense = sense; - - previous_value = _Atomic_Fetch_add_ulong( - &control->value, - 1, - ATOMIC_ORDER_RELAXED - ); - - if ( previous_value + 1 == count ) { - _Atomic_Store_ulong( &control->value, 0, ATOMIC_ORDER_RELAXED ); - _Atomic_Store_ulong( &control->sense, sense, ATOMIC_ORDER_RELEASE ); - } else { - while ( - _Atomic_Load_ulong( &control->sense, ATOMIC_ORDER_ACQUIRE ) != sense - ) { - /* Wait */ - } - } -} - #define MASTER_PRIORITY 1 #define WORKER_PRIORITY 2 -- cgit v1.2.3