freezer.c (d1a76187a5be4f89c6cb19d800cb5fb7aac735c5) | freezer.c (00c2e63c31d0f431952ff2a671c5c6997dd4f8b2) |
---|---|
1/* 2 * kernel/freezer.c - Function to freeze a process 3 * 4 * Originally from kernel/power/process.c 5 */ 6 7#include <linux/interrupt.h> 8#include <linux/suspend.h> --- 107 unchanged lines hidden (view full) --- 116 pr_debug(" clean up: %s\n", p->comm); 117 clear_freeze_flag(p); 118 spin_lock_irqsave(&p->sighand->siglock, flags); 119 recalc_sigpending_and_wake(p); 120 spin_unlock_irqrestore(&p->sighand->siglock, flags); 121 } 122} 123 | 1/* 2 * kernel/freezer.c - Function to freeze a process 3 * 4 * Originally from kernel/power/process.c 5 */ 6 7#include <linux/interrupt.h> 8#include <linux/suspend.h> --- 107 unchanged lines hidden (view full) --- 116 pr_debug(" clean up: %s\n", p->comm); 117 clear_freeze_flag(p); 118 spin_lock_irqsave(&p->sighand->siglock, flags); 119 recalc_sigpending_and_wake(p); 120 spin_unlock_irqrestore(&p->sighand->siglock, flags); 121 } 122} 123 |
124/* 125 * Wake up a frozen process 126 * 127 * task_lock() is needed to prevent the race with refrigerator() which may 128 * occur if the freezing of tasks fails. Namely, without the lock, if the 129 * freezing of tasks failed, thaw_tasks() might have run before a task in 130 * refrigerator() could call frozen_process(), in which case the task would be 131 * frozen and no one would thaw it. 132 */ 133int __thaw_process(struct task_struct *p) | 124static int __thaw_process(struct task_struct *p) |
134{ 135 if (frozen(p)) { 136 p->flags &= ~PF_FROZEN; 137 return 1; 138 } 139 clear_freeze_flag(p); 140 return 0; 141} 142 | 125{ 126 if (frozen(p)) { 127 p->flags &= ~PF_FROZEN; 128 return 1; 129 } 130 clear_freeze_flag(p); 131 return 0; 132} 133 |
134/* 135 * Wake up a frozen process 136 * 137 * task_lock() is needed to prevent the race with refrigerator() which may 138 * occur if the freezing of tasks fails. Namely, without the lock, if the 139 * freezing of tasks failed, thaw_tasks() might have run before a task in 140 * refrigerator() could call frozen_process(), in which case the task would be 141 * frozen and no one would thaw it. 142 */ |
|
143int thaw_process(struct task_struct *p) 144{ 145 task_lock(p); 146 if (__thaw_process(p) == 1) { 147 task_unlock(p); 148 wake_up_process(p); 149 return 1; 150 } 151 task_unlock(p); 152 return 0; 153} 154EXPORT_SYMBOL(thaw_process); | 143int thaw_process(struct task_struct *p) 144{ 145 task_lock(p); 146 if (__thaw_process(p) == 1) { 147 task_unlock(p); 148 wake_up_process(p); 149 return 1; 150 } 151 task_unlock(p); 152 return 0; 153} 154EXPORT_SYMBOL(thaw_process); |