diff --git a/kernel/sched.c b/kernel/sched.c
index 19c0d5d16fef..15abf0833245 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3862,6 +3862,8 @@ int sched_setscheduler(struct task_struct *p, int policy,
 	unsigned long flags;
 	runqueue_t *rq;
 
+	/* may grab non-irq protected spin_locks */
+	BUG_ON(in_interrupt());
 recheck:
 	/* double check policy once rq lock held */
 	if (policy < 0)