LCOV - code coverage report
Current view: top level - include/linux - freezer.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-djwa @ Mon Jul 31 20:08:17 PDT 2023 Lines: 5 8 62.5 %
Date: 2023-07-31 20:08:17 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /* Freezer declarations */
       3             : 
       4             : #ifndef FREEZER_H_INCLUDED
       5             : #define FREEZER_H_INCLUDED
       6             : 
       7             : #include <linux/debug_locks.h>
       8             : #include <linux/sched.h>
       9             : #include <linux/wait.h>
      10             : #include <linux/atomic.h>
      11             : #include <linux/jump_label.h>
      12             : 
      13             : #ifdef CONFIG_FREEZER
      14             : DECLARE_STATIC_KEY_FALSE(freezer_active);
      15             : 
      16             : extern bool pm_freezing;                /* PM freezing in effect */
      17             : extern bool pm_nosig_freezing;          /* PM nosig freezing in effect */
      18             : 
      19             : /*
      20             :  * Timeout for stopping processes
      21             :  */
      22             : extern unsigned int freeze_timeout_msecs;
      23             : 
      24             : /*
      25             :  * Check if a process has been frozen
      26             :  */
      27             : extern bool frozen(struct task_struct *p);
      28             : 
      29             : extern bool freezing_slow_path(struct task_struct *p);
      30             : 
      31             : /*
      32             :  * Check if there is a request to freeze a process
      33             :  */
      34     1936397 : static inline bool freezing(struct task_struct *p)
      35             : {
      36     1936397 :         if (static_branch_unlikely(&freezer_active))
      37           0 :                 return freezing_slow_path(p);
      38             : 
      39             :         return false;
      40             : }
      41             : 
      42             : /* Takes and releases task alloc lock using task_lock() */
      43             : extern void __thaw_task(struct task_struct *t);
      44             : 
      45             : extern bool __refrigerator(bool check_kthr_stop);
      46             : extern int freeze_processes(void);
      47             : extern int freeze_kernel_threads(void);
      48             : extern void thaw_processes(void);
      49             : extern void thaw_kernel_threads(void);
      50             : 
      51     1936398 : static inline bool try_to_freeze(void)
      52             : {
      53     1936398 :         might_sleep();
      54     1936398 :         if (likely(!freezing(current)))
      55             :                 return false;
      56           0 :         if (!(current->flags & PF_NOFREEZE))
      57             :                 debug_check_no_locks_held();
      58           0 :         return __refrigerator(false);
      59             : }
      60             : 
      61             : extern bool freeze_task(struct task_struct *p);
      62             : extern bool set_freezable(void);
      63             : 
      64             : #ifdef CONFIG_CGROUP_FREEZER
      65             : extern bool cgroup_freezing(struct task_struct *task);
      66             : #else /* !CONFIG_CGROUP_FREEZER */
      67             : static inline bool cgroup_freezing(struct task_struct *task)
      68             : {
      69             :         return false;
      70             : }
      71             : #endif /* !CONFIG_CGROUP_FREEZER */
      72             : 
      73             : #else /* !CONFIG_FREEZER */
      74             : static inline bool frozen(struct task_struct *p) { return false; }
      75             : static inline bool freezing(struct task_struct *p) { return false; }
      76             : static inline void __thaw_task(struct task_struct *t) {}
      77             : 
      78             : static inline bool __refrigerator(bool check_kthr_stop) { return false; }
      79             : static inline int freeze_processes(void) { return -ENOSYS; }
      80             : static inline int freeze_kernel_threads(void) { return -ENOSYS; }
      81             : static inline void thaw_processes(void) {}
      82             : static inline void thaw_kernel_threads(void) {}
      83             : 
      84             : static inline bool try_to_freeze(void) { return false; }
      85             : 
      86             : static inline void set_freezable(void) {}
      87             : 
      88             : #endif /* !CONFIG_FREEZER */
      89             : 
      90             : #endif  /* FREEZER_H_INCLUDED */

Generated by: LCOV version 1.14