History

rbtree, rtmutex: Use rb_add_cached()

Reduce rbtree boiler plate by using the new helpers.

Peter Zijlstra committed 6 years ago

Commit 5a798721 parent a905e841 file · +18 −36Browse files

Unified · Split

kernel/locking/rtmutex.c+18−36
@@ -267,27 +267,18 @@ rt_mutex_waiter_equal(struct rt_mutex_waiter *left, · 266 unmodified lines
267 return 1;267 return 1;
268}268}
269 269
270#define __node_2_waiter(node) \
271 rb_entry((node), struct rt_mutex_waiter, tree_entry)
272
273static 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
270static void278static void
271rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)279rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)
272{280{
273 struct rb_node **link = &lock->waiters.rb_root.rb_node;281 rb_add_cached(&waiter->tree_entry, &lock->waiters, __waiter_less);
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);
291}282}
292 283
293static void284static void
@@ -300,27 +291,18 @@ rt_mutex_dequeue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) · 6 unmodified lines
300 RB_CLEAR_NODE(&waiter->tree_entry);291 RB_CLEAR_NODE(&waiter->tree_entry);
301}292}
302 293
294#define __node_2_pi_waiter(node) \
295 rb_entry((node), struct rt_mutex_waiter, pi_tree_entry)
296
297static inline bool __pi_waiter_less(struct rb_node *a, const struct rb_node *b)
298{
299 return rt_mutex_waiter_less(__node_2_pi_waiter(a), __node_2_pi_waiter(b));
300}
301
303static void302static void
304rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)303rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
305{304{
306 struct rb_node **link = &task->pi_waiters.rb_root.rb_node;305 rb_add_cached(&waiter->pi_tree_entry, &task->pi_waiters, __pi_waiter_less);
307 struct rb_node *parent = NULL;
308 struct rt_mutex_waiter *entry;
309 bool leftmost = true;
310
311 while (*link) {
312 parent = *link;
313 entry = rb_entry(parent, struct rt_mutex_waiter, pi_tree_entry);
314 if (rt_mutex_waiter_less(waiter, entry)) {
315 link = &parent->rb_left;
316 } else {
317 link = &parent->rb_right;
318 leftmost = false;
319 }
320 }
321
322 rb_link_node(&waiter->pi_tree_entry, parent, link);
323 rb_insert_color_cached(&waiter->pi_tree_entry, &task->pi_waiters, leftmost);
324}306}
325 307
326static void308static void