Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rbtree, rtmutex: Use rb_add_cached()

Reduce rbtree boiler plate by using the new helpers.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Davidlohr Bueso <dbueso@suse.de>

authored by

Peter Zijlstra and committed by
Ingo Molnar
5a798725 a905e84e

+18 -36
+18 -36
kernel/locking/rtmutex.c
··· 267 267 return 1; 268 268 } 269 269 270 + #define __node_2_waiter(node) \ 271 + rb_entry((node), struct rt_mutex_waiter, tree_entry) 272 + 273 + static inline bool __waiter_less(struct rb_node *a, const struct rb_node *b) 274 + { 275 + return rt_mutex_waiter_less(__node_2_waiter(a), __node_2_waiter(b)); 276 + } 277 + 270 278 static void 271 279 rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) 272 280 { 273 - struct rb_node **link = &lock->waiters.rb_root.rb_node; 274 - struct rb_node *parent = NULL; 275 - struct rt_mutex_waiter *entry; 276 - bool leftmost = true; 277 - 278 - while (*link) { 279 - parent = *link; 280 - entry = rb_entry(parent, struct rt_mutex_waiter, tree_entry); 281 - if (rt_mutex_waiter_less(waiter, entry)) { 282 - link = &parent->rb_left; 283 - } else { 284 - link = &parent->rb_right; 285 - leftmost = false; 286 - } 287 - } 288 - 289 - rb_link_node(&waiter->tree_entry, parent, link); 290 - rb_insert_color_cached(&waiter->tree_entry, &lock->waiters, leftmost); 281 + rb_add_cached(&waiter->tree_entry, &lock->waiters, __waiter_less); 291 282 } 292 283 293 284 static void ··· 291 300 RB_CLEAR_NODE(&waiter->tree_entry); 292 301 } 293 302 303 + #define __node_2_pi_waiter(node) \ 304 + rb_entry((node), struct rt_mutex_waiter, pi_tree_entry) 305 + 306 + static inline bool __pi_waiter_less(struct rb_node *a, const struct rb_node *b) 307 + { 308 + return rt_mutex_waiter_less(__node_2_pi_waiter(a), __node_2_pi_waiter(b)); 309 + } 310 + 294 311 static void 295 312 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) 296 313 { 297 - struct rb_node **link = &task->pi_waiters.rb_root.rb_node; 298 - struct rb_node *parent = NULL; 299 - struct rt_mutex_waiter *entry; 300 - bool leftmost = true; 301 - 302 - while (*link) { 303 - parent = *link; 304 - entry = rb_entry(parent, struct rt_mutex_waiter, pi_tree_entry); 305 - if (rt_mutex_waiter_less(waiter, entry)) { 306 - link = &parent->rb_left; 307 - } else { 308 - link = &parent->rb_right; 309 - leftmost = false; 310 - } 311 - } 312 - 313 - rb_link_node(&waiter->pi_tree_entry, parent, link); 314 - rb_insert_color_cached(&waiter->pi_tree_entry, &task->pi_waiters, leftmost); 314 + rb_add_cached(&waiter->pi_tree_entry, &task->pi_waiters, __pi_waiter_less); 315 315 } 316 316 317 317 static void