LCOV - code coverage report
Current view: top level - zephyr/sys - barrier.h Coverage Total Hit
Test: new.info Lines: 75.0 % 4 3
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2023 Carlo Caione <ccaione@baylibre.com>
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_SYS_BARRIER_H_
       8              : #define ZEPHYR_INCLUDE_SYS_BARRIER_H_
       9              : 
      10              : #include <zephyr/toolchain.h>
      11              : 
      12              : #if defined(CONFIG_BARRIER_OPERATIONS_ARCH)
      13              : # if defined(CONFIG_ARM)
      14              : # include <zephyr/arch/arm/barrier.h>
      15              : # elif defined(CONFIG_ARM64)
      16              : # include <zephyr/arch/arm64/barrier.h>
      17              : # endif
      18              : #elif defined(CONFIG_BARRIER_OPERATIONS_BUILTIN)
      19              : #include <zephyr/sys/barrier_builtin.h>
      20              : #endif
      21              : 
      22              : #ifdef __cplusplus
      23              : extern "C" {
      24              : #endif
      25              : 
      26              : /**
      27              :  * @addtogroup barrier_apis Barrier Services APIs
      28              :  * @since 3.4
      29              :  * @version 0.1.0
      30              :  * @ingroup kernel_apis
      31              :  * @{
      32              :  */
      33              : 
      34              : /**
      35              :  * @brief Full/sequentially-consistent data memory barrier.
      36              :  *
      37              :  * This routine acts as a synchronization fence between threads and prevents
      38              :  * re-ordering of data accesses instructions across the barrier instruction.
      39              :  */
      40            1 : static ALWAYS_INLINE void barrier_dmem_fence_full(void)
      41              : {
      42              : #if defined(CONFIG_BARRIER_OPERATIONS_ARCH) || defined(CONFIG_BARRIER_OPERATIONS_BUILTIN)
      43              :         z_barrier_dmem_fence_full();
      44              : #endif
      45              : }
      46              : 
      47              : /**
      48              :  * @brief Full/sequentially-consistent data synchronization barrier.
      49              :  *
      50              :  * This routine acts as a synchronization fence between threads and prevents
      51              :  * re-ordering of data accesses instructions across the barrier instruction
      52              :  * like @ref barrier_dmem_fence_full(), but has the additional effect of
      53              :  * blocking execution of any further instructions, not just loads or stores, or
      54              :  * both, until synchronization is complete.
      55              :  *
      56              :  * @note When not supported by hardware or architecture, this instruction falls
      57              :  * back to a full/sequentially-consistent data memory barrier.
      58              :  */
      59            1 : static ALWAYS_INLINE void barrier_dsync_fence_full(void)
      60              : {
      61              : #if defined(CONFIG_BARRIER_OPERATIONS_ARCH) || defined(CONFIG_BARRIER_OPERATIONS_BUILTIN)
      62              :         z_barrier_dsync_fence_full();
      63              : #endif
      64              : }
      65              : 
      66              : /**
      67              :  * @brief Full/sequentially-consistent instruction synchronization barrier.
      68              :  *
      69              :  * This routine is used to guarantee that any subsequent instructions are
      70              :  * fetched and to ensure any previously executed context-changing operations,
      71              :  * such as writes to system control registers, have completed by the time the
      72              :  * routine completes. In hardware terms, this might mean that the instruction
      73              :  * pipeline is flushed, for example.
      74              :  *
      75              :  * @note When not supported by hardware or architecture, this instruction falls
      76              :  * back to a compiler barrier.
      77              :  */
      78            1 : static ALWAYS_INLINE void barrier_isync_fence_full(void)
      79              : {
      80              : #if defined(CONFIG_BARRIER_OPERATIONS_ARCH) || defined(CONFIG_BARRIER_OPERATIONS_BUILTIN)
      81              :         z_barrier_isync_fence_full();
      82              : #endif
      83              : }
      84              : 
      85              : /** @} */
      86              : 
      87              : #ifdef __cplusplus
      88              : } /* extern "C" */
      89              : #endif
      90              : 
      91              : #endif /* ZEPHYR_INCLUDE_SYS_ATOMIC_H_ */
        

Generated by: LCOV version 2.0-1