@@ -271,10 +271,10 @@ rt_mutex_waiter_equal(struct rt_mutex_waiter *left,
271271static void
272272rt_mutex_enqueue (struct rt_mutex * lock , struct rt_mutex_waiter * waiter )
273273{
274- struct rb_node * * link = & lock -> waiters .rb_node ;
274+ struct rb_node * * link = & lock -> waiters .rb_root . rb_node ;
275275 struct rb_node * parent = NULL ;
276276 struct rt_mutex_waiter * entry ;
277- int leftmost = 1 ;
277+ bool leftmost = true ;
278278
279279 while (* link ) {
280280 parent = * link ;
@@ -283,15 +283,12 @@ rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)
283283 link = & parent -> rb_left ;
284284 } else {
285285 link = & parent -> rb_right ;
286- leftmost = 0 ;
286+ leftmost = false ;
287287 }
288288 }
289289
290- if (leftmost )
291- lock -> waiters_leftmost = & waiter -> tree_entry ;
292-
293290 rb_link_node (& waiter -> tree_entry , parent , link );
294- rb_insert_color (& waiter -> tree_entry , & lock -> waiters );
291+ rb_insert_color_cached (& waiter -> tree_entry , & lock -> waiters , leftmost );
295292}
296293
297294static void
@@ -300,20 +297,17 @@ rt_mutex_dequeue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)
300297 if (RB_EMPTY_NODE (& waiter -> tree_entry ))
301298 return ;
302299
303- if (lock -> waiters_leftmost == & waiter -> tree_entry )
304- lock -> waiters_leftmost = rb_next (& waiter -> tree_entry );
305-
306- rb_erase (& waiter -> tree_entry , & lock -> waiters );
300+ rb_erase_cached (& waiter -> tree_entry , & lock -> waiters );
307301 RB_CLEAR_NODE (& waiter -> tree_entry );
308302}
309303
310304static void
311305rt_mutex_enqueue_pi (struct task_struct * task , struct rt_mutex_waiter * waiter )
312306{
313- struct rb_node * * link = & task -> pi_waiters .rb_node ;
307+ struct rb_node * * link = & task -> pi_waiters .rb_root . rb_node ;
314308 struct rb_node * parent = NULL ;
315309 struct rt_mutex_waiter * entry ;
316- int leftmost = 1 ;
310+ bool leftmost = true ;
317311
318312 while (* link ) {
319313 parent = * link ;
@@ -322,15 +316,12 @@ rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
322316 link = & parent -> rb_left ;
323317 } else {
324318 link = & parent -> rb_right ;
325- leftmost = 0 ;
319+ leftmost = false ;
326320 }
327321 }
328322
329- if (leftmost )
330- task -> pi_waiters_leftmost = & waiter -> pi_tree_entry ;
331-
332323 rb_link_node (& waiter -> pi_tree_entry , parent , link );
333- rb_insert_color (& waiter -> pi_tree_entry , & task -> pi_waiters );
324+ rb_insert_color_cached (& waiter -> pi_tree_entry , & task -> pi_waiters , leftmost );
334325}
335326
336327static void
@@ -339,10 +330,7 @@ rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
339330 if (RB_EMPTY_NODE (& waiter -> pi_tree_entry ))
340331 return ;
341332
342- if (task -> pi_waiters_leftmost == & waiter -> pi_tree_entry )
343- task -> pi_waiters_leftmost = rb_next (& waiter -> pi_tree_entry );
344-
345- rb_erase (& waiter -> pi_tree_entry , & task -> pi_waiters );
333+ rb_erase_cached (& waiter -> pi_tree_entry , & task -> pi_waiters );
346334 RB_CLEAR_NODE (& waiter -> pi_tree_entry );
347335}
348336
@@ -1657,8 +1645,7 @@ void __rt_mutex_init(struct rt_mutex *lock, const char *name,
16571645{
16581646 lock -> owner = NULL ;
16591647 raw_spin_lock_init (& lock -> wait_lock );
1660- lock -> waiters = RB_ROOT ;
1661- lock -> waiters_leftmost = NULL ;
1648+ lock -> waiters = RB_ROOT_CACHED ;
16621649
16631650 if (name && key )
16641651 debug_rt_mutex_init (lock , name , key );
0 commit comments