#include <linux/interrupt.h>
#include <linux/suspend.h>
#include <linux/module.h>
#include <linux/sched/debug.h>
#include <linux/sched/task.h>
#include <linux/syscalls.h>
#include <linux/freezer.h>
#include <linux/workqueue.h>
#include <trace/events/power.h>
#include <linux/cpuset.h>
unsigned int __read_mostly freeze_timeout_msecs = 20 * MSEC_PER_SEC;
static int try_to_freeze_tasks(bool user_only)
struct task_struct *g, *p;
ktime_t start, end, elapsed;
unsigned int elapsed_msecs;
int sleep_usecs = USEC_PER_MSEC;
start = ktime_get_boottime();
end_time = jiffies + msecs_to_jiffies(freeze_timeout_msecs);
freeze_workqueues_begin();
read_lock(&tasklist_lock);
for_each_process_thread(g, p) {
if (p == current || !freeze_task(p))
if (!freezer_should_skip(p))
read_unlock(&tasklist_lock);
wq_busy = freeze_workqueues_busy();