From: Praveen Kumar <kpraveen.lkml@gmail.com>
To: xen-devel@lists.xen.org
Cc: Andrea Arcangeli <aarcange@redhat.com>,
Jens Axboe <axboe@kernel.dk>, Rik van Riel <riel@redhat.com>,
sstabellini@kernel.org, wei.liu2@citrix.com,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com,
dario.faggioli@citrix.com, ian.jackson@eu.citrix.com,
tim@xen.org, Daniel Santos <daniel.santos@pobox.com>,
Praveen Kumar <kpraveen.lkml@gmail.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
jbeulich@suse.com, Andrew Morton <akpm@linux-foundation.org>,
Michel Lespinasse <walken@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
David Woodhouse <David.Woodhouse@intel.com>
Subject: [PATCH 05/17] rbtree: move some implementation details from rbtree.h to rbtree.c
Date: Thu, 1 Jun 2017 02:16:56 +0530 [thread overview]
Message-ID: <20170531204708.10470-6-kpraveen.lkml@gmail.com> (raw)
In-Reply-To: <20170531204708.10470-1-kpraveen.lkml@gmail.com>
rbtree users must use the documented APIs to manipulate the tree
structure. Low-level helpers to manipulate node colors and parenthood are
not part of that API, so move them to lib/rbtree.c
commit bf7ad8eeab995710c766df49c9c69a8592ca0216 from linux tree
Signed-off-by: Michel Lespinasse <walken@google.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: David Woodhouse <David.Woodhouse@intel.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Daniel Santos <daniel.santos@pobox.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---
xen/common/rbtree.c | 20 +++++++++++++++++++-
xen/include/xen/rbtree.h | 29 +++++++----------------------
2 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/xen/common/rbtree.c b/xen/common/rbtree.c
index 81fb746b35..1d48ac7c78 100644
--- a/xen/common/rbtree.c
+++ b/xen/common/rbtree.c
@@ -22,6 +22,24 @@
#include <xen/types.h>
#include <xen/rbtree.h>
+#define RB_RED 0
+#define RB_BLACK 1
+
+#define rb_color(r) ((r)->__rb_parent_color & 1)
+#define rb_is_red(r) (!rb_color(r))
+#define rb_is_black(r) rb_color(r)
+#define rb_set_red(r) do { (r)->__rb_parent_color &= ~1; } while (0)
+#define rb_set_black(r) do { (r)->__rb_parent_color |= 1; } while (0)
+
+static inline void rb_set_parent(struct rb_node *rb, struct rb_node *p)
+{
+ rb->__rb_parent_color = rb_color(rb) | (unsigned long)p;
+}
+static inline void rb_set_color(struct rb_node *rb, int color)
+{
+ rb->__rb_parent_color = (rb->__rb_parent_color & ~1) | color;
+}
+
static void __rb_rotate_left(struct rb_node *node, struct rb_root *root)
{
struct rb_node *right = node->rb_right;
@@ -261,7 +279,7 @@ void rb_erase(struct rb_node *node, struct rb_root *root)
rb_set_parent(old->rb_right, node);
}
- node->rb_parent_color = old->rb_parent_color;
+ node->__rb_parent_color = old->__rb_parent_color;
node->rb_left = old->rb_left;
rb_set_parent(old->rb_left, node);
diff --git a/xen/include/xen/rbtree.h b/xen/include/xen/rbtree.h
index 29071a7e4a..107f1b12f2 100644
--- a/xen/include/xen/rbtree.h
+++ b/xen/include/xen/rbtree.h
@@ -21,9 +21,7 @@
struct rb_node
{
- unsigned long rb_parent_color;
-#define RB_RED 0
-#define RB_BLACK 1
+ unsigned long __rb_parent_color;
struct rb_node *rb_right;
struct rb_node *rb_left;
};
@@ -33,21 +31,7 @@ struct rb_root
struct rb_node *rb_node;
};
-#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
-#define rb_color(r) ((r)->rb_parent_color & 1)
-#define rb_is_red(r) (!rb_color(r))
-#define rb_is_black(r) rb_color(r)
-#define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
-#define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
-
-static inline void rb_set_parent(struct rb_node *rb, struct rb_node *p)
-{
- rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p;
-}
-static inline void rb_set_color(struct rb_node *rb, int color)
-{
- rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
-}
+#define rb_parent(r) ((struct rb_node *)((r)->__rb_parent_color & ~3))
#define RB_ROOT (struct rb_root) { NULL, }
#define rb_entry(ptr, type, member) container_of(ptr, type, member)
@@ -55,9 +39,10 @@ static inline void rb_set_color(struct rb_node *rb, int color)
#define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
/* 'empty' nodes are nodes that are known not to be inserted in an rbree */
-#define RB_EMPTY_NODE(node) ((node)->rb_parent_color == (unsigned long)(node))
-#define RB_CLEAR_NODE(node) ((node)->rb_parent_color = (unsigned long)(node))
-
+#define RB_EMPTY_NODE(node) \
+ ((node)->__rb_parent_color == (unsigned long)(node))
+#define RB_CLEAR_NODE(node) \
+ ((node)->__rb_parent_color = (unsigned long)(node))
extern void rb_insert_color(struct rb_node *, struct rb_root *);
extern void rb_erase(struct rb_node *, struct rb_root *);
@@ -75,7 +60,7 @@ extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
struct rb_node ** rb_link)
{
- node->rb_parent_color = (unsigned long )parent;
+ node->__rb_parent_color = (unsigned long )parent;
node->rb_left = node->rb_right = NULL;
*rb_link = node;
--
2.12.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-05-31 20:46 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-31 20:46 [PATCH v2] xen: common: rbtree: ported updates from linux tree Praveen Kumar
2017-05-31 20:46 ` [PATCH 01/17] rb_tree: reorganize code in rb_erase() for additional changes Praveen Kumar
2017-05-31 20:46 ` [PATCH 02/17] rb_tree: make clear distinction between two different cases in rb_erase() Praveen Kumar
2017-05-31 20:46 ` [PATCH 03/17] rb_tree: remove redundant if()-condition " Praveen Kumar
2017-05-31 20:46 ` [PATCH 04/17] rbtree: empty nodes have no color Praveen Kumar
2017-05-31 20:46 ` Praveen Kumar [this message]
2017-05-31 20:46 ` [PATCH 06/17] rbtree: break out of rb_insert_color loop after tree rotation Praveen Kumar
2017-05-31 20:46 ` [PATCH 07/17] rbtree: adjust root color in rb_insert_color() only when necessary Praveen Kumar
2017-05-31 20:46 ` [PATCH 08/17] rbtree: low level optimizations in rb_insert_color() Praveen Kumar
2017-05-31 20:47 ` [PATCH 09/17] rbtree: adjust node color in __rb_erase_color() only when necessary Praveen Kumar
2017-05-31 20:47 ` [PATCH 10/17] rbtree: optimize case selection logic in __rb_erase_color() Praveen Kumar
2017-05-31 20:47 ` [PATCH 11/17] rbtree: low level optimizations " Praveen Kumar
2017-05-31 20:47 ` [PATCH 12/17] rbtree: optimize fetching of sibling node Praveen Kumar
2017-05-31 20:47 ` [PATCH 13/17] rbtree: add __rb_change_child() helper function Praveen Kumar
2017-05-31 20:47 ` [PATCH 14/17] rbtree: place easiest case first in rb_erase() Praveen Kumar
2017-05-31 20:47 ` [PATCH 15/17] rbtree: handle 1-child recoloring in rb_erase() instead of rb_erase_color() Praveen Kumar
2017-05-31 21:09 ` Praveen Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170531204708.10470-6-kpraveen.lkml@gmail.com \
--to=kpraveen.lkml@gmail.com \
--cc=David.Woodhouse@intel.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=a.p.zijlstra@chello.nl \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andrew.cooper3@citrix.com \
--cc=axboe@kernel.dk \
--cc=daniel.santos@pobox.com \
--cc=dario.faggioli@citrix.com \
--cc=ebiederm@xmission.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=riel@redhat.com \
--cc=sstabellini@kernel.org \
--cc=tim@xen.org \
--cc=torvalds@linux-foundation.org \
--cc=walken@google.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).