aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/locking/rtmutex.c3
-rw-r--r--kernel/locking/rtmutex_common.h11
2 files changed, 7 insertions, 7 deletions
diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
index 940633c63254..4f014be7a4b8 100644
--- a/kernel/locking/rtmutex.c
+++ b/kernel/locking/rtmutex.c
@@ -1268,8 +1268,7 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state,
1268 1268
1269 if (unlikely(ret)) { 1269 if (unlikely(ret)) {
1270 __set_current_state(TASK_RUNNING); 1270 __set_current_state(TASK_RUNNING);
1271 if (rt_mutex_has_waiters(lock)) 1271 remove_waiter(lock, &waiter);
1272 remove_waiter(lock, &waiter);
1273 rt_mutex_handle_deadlock(ret, chwalk, &waiter); 1272 rt_mutex_handle_deadlock(ret, chwalk, &waiter);
1274 } 1273 }
1275 1274
diff --git a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h
index 68686b3ec3c1..d1d62f942be2 100644
--- a/kernel/locking/rtmutex_common.h
+++ b/kernel/locking/rtmutex_common.h
@@ -52,12 +52,13 @@ static inline int rt_mutex_has_waiters(struct rt_mutex *lock)
52static inline struct rt_mutex_waiter * 52static inline struct rt_mutex_waiter *
53rt_mutex_top_waiter(struct rt_mutex *lock) 53rt_mutex_top_waiter(struct rt_mutex *lock)
54{ 54{
55 struct rt_mutex_waiter *w; 55 struct rb_node *leftmost = rb_first_cached(&lock->waiters);
56 56 struct rt_mutex_waiter *w = NULL;
57 w = rb_entry(lock->waiters.rb_leftmost,
58 struct rt_mutex_waiter, tree_entry);
59 BUG_ON(w->lock != lock);
60 57
58 if (leftmost) {
59 w = rb_entry(leftmost, struct rt_mutex_waiter, tree_entry);
60 BUG_ON(w->lock != lock);
61 }
61 return w; 62 return w;
62} 63}
63 64