Commit e977145aeaad ("[RBTREE] Add explicit alignment to sizeof(long) for struct rb_node.") adds an explicit alignment to the struct rb_node due to some speciality of the CRIS architecture. The support for the CRIS architecture was removed with commit c690eddc2f3b ("CRIS: Drop support for the CRIS port") So, remove this now unneeded explicit alignment in struct rb_node as well. This basically reverts commit e977145aeaad ("[RBTREE] Add explicit alignment to sizeof(long) for struct rb_node."). The rbtree node color is stored in the LSB of '__rb_parent_color'. Only mask the first bit in '__rb_parent()', otherwise it modifies the node's parent address on m68k. Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Reported-by: Mete Polat <metepolat2000@xxxxxxxxx> Signed-off-by: Lukas Bulwahn <lukas.bulwahn@xxxxxxxxx> Signed-off-by: Mete Polat <metepolat2000@xxxxxxxxx> --- I have tested it on x86, but not on m68k. Can you ack that Geert? include/linux/rbtree.h | 3 +-- include/linux/rbtree_augmented.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h index d31ecaf4fdd3..e9390be1ba67 100644 --- a/include/linux/rbtree.h +++ b/include/linux/rbtree.h @@ -25,8 +25,7 @@ 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; diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h index d1c53e9d8c75..94b6a0f4499e 100644 --- a/include/linux/rbtree_augmented.h +++ b/include/linux/rbtree_augmented.h @@ -145,7 +145,7 @@ RB_DECLARE_CALLBACKS(RBSTATIC, RBNAME, \ #define RB_RED 0 #define RB_BLACK 1 -#define __rb_parent(pc) ((struct rb_node *)(pc & ~3)) +#define __rb_parent(pc) ((struct rb_node *)(pc & ~1)) #define __rb_color(pc) ((pc) & 1) #define __rb_is_black(pc) __rb_color(pc) -- 2.32.0