LCOV - code coverage report
Current view: top level - include/linux - osq_lock.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 2 2 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef __LINUX_OSQ_LOCK_H
       3             : #define __LINUX_OSQ_LOCK_H
       4             : 
       5             : /*
       6             :  * An MCS like lock especially tailored for optimistic spinning for sleeping
       7             :  * lock implementations (mutex, rwsem, etc).
       8             :  */
       9             : struct optimistic_spin_node {
      10             :         struct optimistic_spin_node *next, *prev;
      11             :         int locked; /* 1 if lock acquired */
      12             :         int cpu; /* encoded CPU # + 1 value */
      13             : };
      14             : 
      15             : struct optimistic_spin_queue {
      16             :         /*
      17             :          * Stores an encoded value of the CPU # of the tail node in the queue.
      18             :          * If the queue is empty, then it's set to OSQ_UNLOCKED_VAL.
      19             :          */
      20             :         atomic_t tail;
      21             : };
      22             : 
      23             : #define OSQ_UNLOCKED_VAL (0)
      24             : 
      25             : /* Init macro and function. */
      26             : #define OSQ_LOCK_UNLOCKED { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }
      27             : 
      28      133427 : static inline void osq_lock_init(struct optimistic_spin_queue *lock)
      29             : {
      30      133427 :         atomic_set(&lock->tail, OSQ_UNLOCKED_VAL);
      31             : }
      32             : 
      33             : extern bool osq_lock(struct optimistic_spin_queue *lock);
      34             : extern void osq_unlock(struct optimistic_spin_queue *lock);
      35             : 
      36             : static inline bool osq_is_locked(struct optimistic_spin_queue *lock)
      37             : {
      38             :         return atomic_read(&lock->tail) != OSQ_UNLOCKED_VAL;
      39             : }
      40             : 
      41             : #endif

Generated by: LCOV version 1.14