diff --git a/[refs] b/[refs] index f948e0acd65d..a5bb623d0b09 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a4014d8f61a6a136d22422cf8aa978e6495dbad9 +refs/heads/master: 5bbcfd9000887c0da7d57cc7b3ac869fc0dd5aa9 diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 5f2182d42241..4107db0dc091 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -3877,6 +3877,13 @@ asmlinkage long sys_sched_yield(void) static inline void __cond_resched(void) { + /* + * The BKS might be reacquired before we have dropped + * PREEMPT_ACTIVE, which could trigger a second + * cond_resched() call. + */ + if (unlikely(preempt_count())) + return; do { add_preempt_count(PREEMPT_ACTIVE); schedule();