diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
index f89014a2c2381e4b38c0839970d28864f751a8d1..1ff523dae6e2b7c0980162549db02bdd350620cc 100644
--- a/kernel/stop_machine.c
+++ b/kernel/stop_machine.c
@@ -270,7 +270,11 @@ unlock:
 		goto retry;
 	}
 
-	wake_up_q(&wakeq);
+	if (!err) {
+		preempt_disable();
+		wake_up_q(&wakeq);
+		preempt_enable();
+	}
 
 	return err;
 }