Branch data Line data Source code
1 : : /* 2 : : * Copyright (c) 2018,2024 Intel Corporation 3 : : * 4 : : * SPDX-License-Identifier: Apache-2.0 5 : : */ 6 : : #include <kernel_internal.h> 7 : : #include <zephyr/spinlock.h> 8 : : 9 : 374 : bool z_spin_lock_valid(struct k_spinlock *l) 10 : : { 11 : 374 : uintptr_t thread_cpu = l->thread_cpu; 12 : : 13 [ - + ]: 374 : if (thread_cpu != 0U) { 14 [ # # ]: 0 : if ((thread_cpu & 3U) == _current_cpu->id) { 15 : 0 : return false; 16 : : } 17 : : } 18 : : return true; 19 : : } 20 : : 21 : 374 : bool z_spin_unlock_valid(struct k_spinlock *l) 22 : : { 23 : 374 : uintptr_t tcpu = l->thread_cpu; 24 : : 25 : 374 : l->thread_cpu = 0; 26 : : 27 [ - + - - ]: 374 : if (arch_is_in_isr() && _current->base.thread_state & _THREAD_DUMMY) { 28 : : /* Edge case where an ISR aborted _current */ 29 : : return true; 30 : : } 31 [ - + ]: 374 : if (tcpu != (_current_cpu->id | (uintptr_t)_current)) { 32 : 0 : return false; 33 : : } 34 : : return true; 35 : : } 36 : : 37 : 374 : void z_spin_lock_set_owner(struct k_spinlock *l) 38 : : { 39 : 374 : l->thread_cpu = _current_cpu->id | (uintptr_t)_current; 40 : 374 : } 41 : : 42 : : #ifdef CONFIG_KERNEL_COHERENCE 43 : : bool z_spin_lock_mem_coherent(struct k_spinlock *l) 44 : : { 45 : : return arch_mem_coherent((void *)l); 46 : : } 47 : : #endif /* CONFIG_KERNEL_COHERENCE */