diff options
Diffstat (limited to 'kernel/power/process.c')
| -rw-r--r-- | kernel/power/process.c | 24 | 
1 files changed, 12 insertions, 12 deletions
| diff --git a/kernel/power/process.c b/kernel/power/process.c index 7e426459e60a..0d2aeb226108 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -53,11 +53,9 @@ static int try_to_freeze_tasks(bool user_only)  			 * It is "frozen enough".  If the task does wake  			 * up, it will immediately call try_to_freeze.  			 * -			 * Because freeze_task() goes through p's -			 * scheduler lock after setting TIF_FREEZE, it's -			 * guaranteed that either we see TASK_RUNNING or -			 * try_to_stop() after schedule() in ptrace/signal -			 * stop sees TIF_FREEZE. +			 * Because freeze_task() goes through p's scheduler lock, it's +			 * guaranteed that TASK_STOPPED/TRACED -> TASK_RUNNING +			 * transition can't race with task state testing here.  			 */  			if (!task_is_stopped_or_traced(p) &&  			    !freezer_should_skip(p)) @@ -98,13 +96,15 @@ static int try_to_freeze_tasks(bool user_only)  		       elapsed_csecs / 100, elapsed_csecs % 100,  		       todo - wq_busy, wq_busy); -		read_lock(&tasklist_lock); -		do_each_thread(g, p) { -			if (!wakeup && !freezer_should_skip(p) && -			    p != current && freezing(p) && !frozen(p)) -				sched_show_task(p); -		} while_each_thread(g, p); -		read_unlock(&tasklist_lock); +		if (!wakeup) { +			read_lock(&tasklist_lock); +			do_each_thread(g, p) { +				if (p != current && !freezer_should_skip(p) +				    && freezing(p) && !frozen(p)) +					sched_show_task(p); +			} while_each_thread(g, p); +			read_unlock(&tasklist_lock); +		}  	} else {  		printk("(elapsed %d.%02d seconds) ", elapsed_csecs / 100,  			elapsed_csecs % 100); | 
