12#ifndef ZEPHYR_INCLUDE_SPINLOCK_H_ 
   13#define ZEPHYR_INCLUDE_SPINLOCK_H_ 
   19#include <zephyr/arch/cpu.h> 
   32struct z_spinlock_key {
 
   48#ifdef CONFIG_SPIN_VALIDATE 
   53#ifdef CONFIG_SPIN_LOCK_TIME_LIMIT 
   60#if defined(CONFIG_CPP) && !defined(CONFIG_SMP) && \ 
   61        !defined(CONFIG_SPIN_VALIDATE) 
   83#ifdef CONFIG_SPIN_VALIDATE 
   86void z_spin_lock_set_owner(
struct k_spinlock *l);
 
   87BUILD_ASSERT(CONFIG_MP_MAX_NUM_CPUS <= 4, 
"Too many CPUs for mask");
 
   89# ifdef CONFIG_KERNEL_COHERENCE 
   90bool z_spin_lock_mem_coherent(
struct k_spinlock *l);
 
  147#ifdef CONFIG_SPIN_VALIDATE 
  148        __ASSERT(z_spin_lock_valid(l), 
"Recursive spinlock %p", l);
 
  149# ifdef CONFIG_KERNEL_COHERENCE 
  150        __ASSERT_NO_MSG(z_spin_lock_mem_coherent(l));
 
  159#ifdef CONFIG_SPIN_VALIDATE 
  160        z_spin_lock_set_owner(l);
 
  161#if defined(CONFIG_SPIN_LOCK_TIME_LIMIT) && (CONFIG_SPIN_LOCK_TIME_LIMIT != 0) 
  193#ifdef CONFIG_SPIN_VALIDATE 
  194        __ASSERT(z_spin_unlock_valid(l), 
"Not my spinlock %p", l);
 
  196#if defined(CONFIG_SPIN_LOCK_TIME_LIMIT) && (CONFIG_SPIN_LOCK_TIME_LIMIT != 0) 
  199        __ASSERT(delta < CONFIG_SPIN_LOCK_TIME_LIMIT,
 
  200                 "Spin lock %p held %u cycles, longer than limit of %u cycles",
 
  201                 l, delta, CONFIG_SPIN_LOCK_TIME_LIMIT);
 
  224#ifdef CONFIG_SPIN_VALIDATE 
  225        __ASSERT(z_spin_unlock_valid(l), 
"Not my spinlock %p", l);
 
uint32_t sys_clock_cycle_get_32(void)
 
static ALWAYS_INLINE unsigned int arch_irq_lock(void)
Disable all interrupts on the local CPU.
Definition: irq.h:168
 
static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
Definition: irq.h:176
 
long atomic_t
Definition: atomic.h:22
 
atomic_val_t atomic_clear(atomic_t *target)
 
static ALWAYS_INLINE bool atomic_cas(atomic_t *target, atomic_val_t oldval, atomic_val_t newval)
Definition: atomic_xtensa.h:42
 
#define ALWAYS_INLINE
Definition: common.h:124
 
static ALWAYS_INLINE void k_spin_release(struct k_spinlock *l)
Definition: spinlock.h:221
 
static ALWAYS_INLINE void k_spin_unlock(struct k_spinlock *l, k_spinlock_key_t key)
Unlock a spin lock.
Definition: spinlock.h:189
 
static ALWAYS_INLINE k_spinlock_key_t k_spin_lock(struct k_spinlock *l)
Lock a spinlock.
Definition: spinlock.h:136
 
struct z_spinlock_key k_spinlock_key_t
Spinlock key type.
Definition: spinlock.h:106
 
static k_spinlock_key_t key
Definition: spinlock_error_case.c:15
 
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
 
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
 
Kernel Spin Lock.
Definition: spinlock.h:43
 
atomic_t locked
Definition: spinlock.h:45