LCOV - code coverage report
Current view: top level - include/linux - rcu_sync.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2023-04-06 08:38:28 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0+ */
       2             : /*
       3             :  * RCU-based infrastructure for lightweight reader-writer locking
       4             :  *
       5             :  * Copyright (c) 2015, Red Hat, Inc.
       6             :  *
       7             :  * Author: Oleg Nesterov <oleg@redhat.com>
       8             :  */
       9             : 
      10             : #ifndef _LINUX_RCU_SYNC_H_
      11             : #define _LINUX_RCU_SYNC_H_
      12             : 
      13             : #include <linux/wait.h>
      14             : #include <linux/rcupdate.h>
      15             : 
      16             : /* Structure to mediate between updaters and fastpath-using readers.  */
      17             : struct rcu_sync {
      18             :         int                     gp_state;
      19             :         int                     gp_count;
      20             :         wait_queue_head_t       gp_wait;
      21             : 
      22             :         struct rcu_head         cb_head;
      23             : };
      24             : 
      25             : /**
      26             :  * rcu_sync_is_idle() - Are readers permitted to use their fastpaths?
      27             :  * @rsp: Pointer to rcu_sync structure to use for synchronization
      28             :  *
      29             :  * Returns true if readers are permitted to use their fastpaths.  Must be
      30             :  * invoked within some flavor of RCU read-side critical section.
      31             :  */
      32             : static inline bool rcu_sync_is_idle(struct rcu_sync *rsp)
      33             : {
      34             :         RCU_LOCKDEP_WARN(!rcu_read_lock_any_held(),
      35             :                          "suspicious rcu_sync_is_idle() usage");
      36           6 :         return !READ_ONCE(rsp->gp_state); /* GP_IDLE */
      37             : }
      38             : 
      39             : extern void rcu_sync_init(struct rcu_sync *);
      40             : extern void rcu_sync_enter_start(struct rcu_sync *);
      41             : extern void rcu_sync_enter(struct rcu_sync *);
      42             : extern void rcu_sync_exit(struct rcu_sync *);
      43             : extern void rcu_sync_dtor(struct rcu_sync *);
      44             : 
      45             : #define __RCU_SYNC_INITIALIZER(name) {                                  \
      46             :                 .gp_state = 0,                                          \
      47             :                 .gp_count = 0,                                          \
      48             :                 .gp_wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.gp_wait), \
      49             :         }
      50             : 
      51             : #define DEFINE_RCU_SYNC(name)   \
      52             :         struct rcu_sync name = __RCU_SYNC_INITIALIZER(name)
      53             : 
      54             : #endif /* _LINUX_RCU_SYNC_H_ */

Generated by: LCOV version 1.14