1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 #ifndef _LINUX_RBTREE_TYPES_H 3 #define _LINUX_RBTREE_TYPES_H 4 5 struct rb_node { 6 unsigned long __rb_parent_color; 7 struct rb_node *rb_right; 8 struct rb_node *rb_left; 9 } __attribute__((aligned(sizeof(long)))); 10 /* The alignment might seem pointless, but allegedly CRIS needs it */ 11 12 struct rb_root { 13 struct rb_node *rb_node; 14 }; 15 16 /* 17 * Leftmost-cached rbtrees. 18 * 19 * We do not cache the rightmost node based on footprint 20 * size vs number of potential users that could benefit 21 * from O(1) rb_last(). Just not worth it, users that want 22 * this feature can always implement the logic explicitly. 23 * Furthermore, users that want to cache both pointers may 24 * find it a bit asymmetric, but that's ok. 25 */ 26 struct rb_root_cached { 27 struct rb_root rb_root; 28 struct rb_node *rb_leftmost; 29 }; 30 31 #define RB_ROOT (struct rb_root) { NULL, } 32 #define RB_ROOT_CACHED (struct rb_root_cached) { {NULL, }, NULL } 33 34 #endif 35