| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| #ifndef _LINUX_RBTREE_TYPES_H |
| #define _LINUX_RBTREE_TYPES_H |
| |
| struct rb_node { |
| unsigned long __rb_parent_color; |
| struct rb_node *rb_right; |
| struct rb_node *rb_left; |
| } __attribute__((aligned(sizeof(long)))); |
| /* The alignment might seem pointless, but allegedly CRIS needs it */ |
| |
| struct rb_root { |
| struct rb_node *rb_node; |
| }; |
| |
| /* |
| * Leftmost-cached rbtrees. |
| * |
| * We do not cache the rightmost node based on footprint |
| * size vs number of potential users that could benefit |
| * from O(1) rb_last(). Just not worth it, users that want |
| * this feature can always implement the logic explicitly. |
| * Furthermore, users that want to cache both pointers may |
| * find it a bit asymmetric, but that's ok. |
| */ |
| struct rb_root_cached { |
| struct rb_root rb_root; |
| struct rb_node *rb_leftmost; |
| }; |
| |
| #define RB_ROOT (struct rb_root) { NULL, } |
| #define RB_ROOT_CACHED (struct rb_root_cached) { {NULL, }, NULL } |
| |
| #endif |