diff --git a/kernel/sched.c b/kernel/sched.c
index c4bc8c2109589d399bc08df9977976d3b54d9876..b387a8de26a5f9ca8b6e2e9d3ad33f66fbf65882 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1831,6 +1831,7 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
 	long old_state;
 	struct rq *rq;
 
+	smp_wmb();
 	rq = task_rq_lock(p, &flags);
 	old_state = p->state;
 	if (!(old_state & state))