FIXUP: sched: Fix double-release of spinlock in move_queued_task
authorTodd Kjos <tkjos@google.com>
Mon, 4 Jul 2016 14:04:45 +0000 (15:04 +0100)
committerAmit Pundir <amit.pundir@linaro.org>
Wed, 14 Sep 2016 09:32:22 +0000 (15:02 +0530)
BUG: 29519455
Change-Id: I4d1c27a1b4bcbba03d4b175d170cfe1701a90ffd

kernel/sched/sched.h

index 0b1bd6e8e1c8dc5a349b7b9efbf70f91302aa036..b2d8ad59f41fb93d8a472119df2fd97eb70f14c5 100644 (file)
@@ -1832,7 +1832,8 @@ static inline int double_lock_balance(struct rq *this_rq, struct rq *busiest)
 static inline void double_unlock_balance(struct rq *this_rq, struct rq *busiest)
        __releases(busiest->lock)
 {
-       raw_spin_unlock(&busiest->lock);
+       if (this_rq != busiest)
+               raw_spin_unlock(&busiest->lock);
        lock_set_subclass(&this_rq->lock.dep_map, 0, _RET_IP_);
 }