util/interval-tree: Use qatomic_set_mb in rb_link_node
Ensure that the stores to rb_left and rb_right are complete before inserting the new node into the tree. Otherwise a concurrent reader could see garbage in the new leaf. Cc: qemu-stable@nongnu.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
055b86e0f0
commit
4c8baa02d3
@ -128,7 +128,11 @@ static inline void rb_link_node(RBNode *node, RBNode *parent, RBNode **rb_link)
|
|||||||
node->rb_parent_color = (uintptr_t)parent;
|
node->rb_parent_color = (uintptr_t)parent;
|
||||||
node->rb_left = node->rb_right = NULL;
|
node->rb_left = node->rb_right = NULL;
|
||||||
|
|
||||||
qatomic_set(rb_link, node);
|
/*
|
||||||
|
* Ensure that node is initialized before insertion,
|
||||||
|
* as viewed by a concurrent search.
|
||||||
|
*/
|
||||||
|
qatomic_set_mb(rb_link, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RBNode *rb_next(RBNode *node)
|
static RBNode *rb_next(RBNode *node)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user