diff --git a/kernel/sched/core.c b/kernel/sched/core.c index d08ac2efa52e..34015bdec12d 100755 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2099,6 +2099,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, unsigned long flags; int cpu, success = 0; + preempt_disable(); if (p == current) { /* * We're waking current, this means 'p->on_rq' and 'task_cpu(p) @@ -2112,7 +2113,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, * it disabling IRQs (this allows not taking ->pi_lock). */ if (!(p->state & state)) - return false; + goto out; success = 1; cpu = task_cpu(p); @@ -2228,6 +2229,7 @@ unlock: out: if (success) ttwu_stat(p, cpu, wake_flags); + preempt_enable(); #ifdef CONFIG_SCHED_WALT if (success && sched_predl) {