]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/freezer.h
Merge branch 'drm-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[karo-tx-linux.git] / include / linux / freezer.h
1 /* Freezer declarations */
2
3 #ifdef CONFIG_PM
4 /*
5  * Check if a process has been frozen
6  */
7 static inline int frozen(struct task_struct *p)
8 {
9         return p->flags & PF_FROZEN;
10 }
11
12 /*
13  * Check if there is a request to freeze a process
14  */
15 static inline int freezing(struct task_struct *p)
16 {
17         return p->flags & PF_FREEZE;
18 }
19
20 /*
21  * Request that a process be frozen
22  * FIXME: SMP problem. We may not modify other process' flags!
23  */
24 static inline void freeze(struct task_struct *p)
25 {
26         p->flags |= PF_FREEZE;
27 }
28
29 /*
30  * Sometimes we may need to cancel the previous 'freeze' request
31  */
32 static inline void do_not_freeze(struct task_struct *p)
33 {
34         p->flags &= ~PF_FREEZE;
35 }
36
37 /*
38  * Wake up a frozen process
39  */
40 static inline int thaw_process(struct task_struct *p)
41 {
42         if (frozen(p)) {
43                 p->flags &= ~PF_FROZEN;
44                 wake_up_process(p);
45                 return 1;
46         }
47         return 0;
48 }
49
50 /*
51  * freezing is complete, mark process as frozen
52  */
53 static inline void frozen_process(struct task_struct *p)
54 {
55         p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN;
56 }
57
58 extern void refrigerator(void);
59 extern int freeze_processes(void);
60 extern void thaw_processes(void);
61
62 static inline int try_to_freeze(void)
63 {
64         if (freezing(current)) {
65                 refrigerator();
66                 return 1;
67         } else
68                 return 0;
69 }
70
71 extern void thaw_some_processes(int all);
72
73 #else
74 static inline int frozen(struct task_struct *p) { return 0; }
75 static inline int freezing(struct task_struct *p) { return 0; }
76 static inline void freeze(struct task_struct *p) { BUG(); }
77 static inline int thaw_process(struct task_struct *p) { return 1; }
78 static inline void frozen_process(struct task_struct *p) { BUG(); }
79
80 static inline void refrigerator(void) {}
81 static inline int freeze_processes(void) { BUG(); return 0; }
82 static inline void thaw_processes(void) {}
83
84 static inline int try_to_freeze(void) { return 0; }
85
86
87 #endif