]>
Commit | Line | Data |
---|---|---|
7dfb7103 NC |
1 | /* Freezer declarations */ |
2 | ||
5c543eff RD |
3 | #include <linux/sched.h> |
4 | ||
7dfb7103 NC |
5 | #ifdef CONFIG_PM |
6 | /* | |
7 | * Check if a process has been frozen | |
8 | */ | |
9 | static inline int frozen(struct task_struct *p) | |
10 | { | |
11 | return p->flags & PF_FROZEN; | |
12 | } | |
13 | ||
14 | /* | |
15 | * Check if there is a request to freeze a process | |
16 | */ | |
17 | static inline int freezing(struct task_struct *p) | |
18 | { | |
8a102eed | 19 | return test_tsk_thread_flag(p, TIF_FREEZE); |
7dfb7103 NC |
20 | } |
21 | ||
22 | /* | |
23 | * Request that a process be frozen | |
7dfb7103 NC |
24 | */ |
25 | static inline void freeze(struct task_struct *p) | |
26 | { | |
8a102eed | 27 | set_tsk_thread_flag(p, TIF_FREEZE); |
7dfb7103 NC |
28 | } |
29 | ||
30 | /* | |
31 | * Sometimes we may need to cancel the previous 'freeze' request | |
32 | */ | |
33 | static inline void do_not_freeze(struct task_struct *p) | |
34 | { | |
8a102eed | 35 | clear_tsk_thread_flag(p, TIF_FREEZE); |
7dfb7103 NC |
36 | } |
37 | ||
38 | /* | |
39 | * Wake up a frozen process | |
40 | */ | |
41 | static inline int thaw_process(struct task_struct *p) | |
42 | { | |
43 | if (frozen(p)) { | |
44 | p->flags &= ~PF_FROZEN; | |
45 | wake_up_process(p); | |
46 | return 1; | |
47 | } | |
48 | return 0; | |
49 | } | |
50 | ||
51 | /* | |
52 | * freezing is complete, mark process as frozen | |
53 | */ | |
54 | static inline void frozen_process(struct task_struct *p) | |
55 | { | |
8a102eed RW |
56 | p->flags |= PF_FROZEN; |
57 | wmb(); | |
58 | clear_tsk_thread_flag(p, TIF_FREEZE); | |
7dfb7103 NC |
59 | } |
60 | ||
61 | extern void refrigerator(void); | |
62 | extern int freeze_processes(void); | |
a9b6f562 | 63 | extern void thaw_processes(void); |
7dfb7103 NC |
64 | |
65 | static inline int try_to_freeze(void) | |
66 | { | |
67 | if (freezing(current)) { | |
68 | refrigerator(); | |
69 | return 1; | |
70 | } else | |
71 | return 0; | |
72 | } | |
ff39593a NC |
73 | |
74 | extern void thaw_some_processes(int all); | |
75 | ||
7dfb7103 NC |
76 | #else |
77 | static inline int frozen(struct task_struct *p) { return 0; } | |
78 | static inline int freezing(struct task_struct *p) { return 0; } | |
79 | static inline void freeze(struct task_struct *p) { BUG(); } | |
80 | static inline int thaw_process(struct task_struct *p) { return 1; } | |
81 | static inline void frozen_process(struct task_struct *p) { BUG(); } | |
82 | ||
83 | static inline void refrigerator(void) {} | |
84 | static inline int freeze_processes(void) { BUG(); return 0; } | |
85 | static inline void thaw_processes(void) {} | |
86 | ||
87 | static inline int try_to_freeze(void) { return 0; } | |
88 | ||
89 | ||
90 | #endif |