RTEMS 6.1-rc6
Loading...
Searching...
No Matches
smpbarrier.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
12/*
13 * Copyright (C) 2013, 2024 embedded brains GmbH & Co. KG
14 *
15 * Redistribution and use in source and binary forms, with or without
16 * modification, are permitted provided that the following conditions
17 * are met:
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 * 2. Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in the
22 * documentation and/or other materials provided with the distribution.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _RTEMS_SCORE_SMPBARRIER_H
38#define _RTEMS_SCORE_SMPBARRIER_H
39
40#include <rtems/score/cpuopts.h>
41#include <rtems/score/atomic.h>
42
43#ifdef __cplusplus
44extern "C" {
45#endif /* __cplusplus */
46
67typedef struct {
68 Atomic_Uint value;
69 Atomic_Uint sense;
71
77typedef struct {
78 unsigned int sense;
80
84#define SMP_BARRIER_CONTROL_INITIALIZER \
85 { ATOMIC_INITIALIZER_UINT( 0U ), ATOMIC_INITIALIZER_UINT( 0U ) }
86
90#define SMP_BARRIER_STATE_INITIALIZER { 0U }
91
99static inline void _SMP_barrier_Control_initialize(
101)
102{
103 _Atomic_Init_uint( &control->value, 0U );
104 _Atomic_Init_uint( &control->sense, 0U );
105}
106
112static inline void _SMP_barrier_State_initialize(
113 SMP_barrier_State *state
114)
115{
116 state->sense = 0U;
117}
118
131 SMP_barrier_State *state,
132 unsigned int count
133);
134
145static inline void _SMP_barrier_Wait_for_other(
147 unsigned int count
148)
149{
150 unsigned int value;
151
152 do {
153 value = _Atomic_Load_uint( &control->value, ATOMIC_ORDER_ACQUIRE );
154 } while ( value != count );
155}
156
159#ifdef __cplusplus
160}
161#endif /* __cplusplus */
162
163#endif /* _RTEMS_SCORE_SMPBARRIER_H */
bool _SMP_barrier_Wait(SMP_barrier_Control *control, SMP_barrier_State *state, unsigned int count)
Waits on the SMP barrier until count threads rendezvoused.
Definition: smpbarrierwait.c:43
This header file provides the interfaces of the Atomic Operations.
SMP barrier control.
Definition: smpbarrier.h:67
SMP barrier per-thread state.
Definition: smpbarrier.h:77
Definition: intercom.c:87