public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] Further optimization of function rb_erase() in lib/rbtree.c
@ 2009-04-10 10:23 Wolfram Strepp
  2009-04-11  0:07 ` Andrew Morton
  0 siblings, 1 reply; 2+ messages in thread
From: Wolfram Strepp @ 2009-04-10 10:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: akpm, peterz, lowdanie

This small patch-series reorganizes some lines in function rb_erase()
in lib/rbtree.c, and as a result one if-condition can be omitted.
Tested on x86.


First, move some code around in order to make the next change more obvious.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Wolfram Strepp <wstrepp@gmx.de>

---
 lib/rbtree.c |   19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
Index: linux-2.6/lib/rbtree.c
===================================================================
--- linux-2.6.orig/lib/rbtree.c
+++ linux-2.6/lib/rbtree.c
@@ -237,6 +237,16 @@ void rb_erase(struct rb_node *node, stru
 		node = node->rb_right;
 		while ((left = node->rb_left) != NULL)
 			node = left;
+
+		if (rb_parent(old))
+		{
+			if (rb_parent(old)->rb_left == old)
+				rb_parent(old)->rb_left = node;
+			else
+				rb_parent(old)->rb_right = node;
+		} else
+			root->rb_node = node;
+
 		child = node->rb_right;
 		parent = rb_parent(node);
 		color = rb_color(node);
@@ -253,15 +263,6 @@ void rb_erase(struct rb_node *node, stru
 		node->rb_right = old->rb_right;
 		node->rb_left = old->rb_left;
 
-		if (rb_parent(old))
-		{
-			if (rb_parent(old)->rb_left == old)
-				rb_parent(old)->rb_left = node;
-			else
-				rb_parent(old)->rb_right = node;
-		} else
-			root->rb_node = node;
-
 		rb_set_parent(old->rb_left, node);
 		if (old->rb_right)
 			rb_set_parent(old->rb_right, node);

-- 
Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate + Telefonanschluss für nur 17,95 Euro/mtl.!* http://dslspecial.gmx.de/freedsl-surfflat/?ac=OM.AD.PD003K11308T4569a

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/3] Further optimization of function rb_erase() in lib/rbtree.c
  2009-04-10 10:23 [PATCH 1/3] Further optimization of function rb_erase() in lib/rbtree.c Wolfram Strepp
@ 2009-04-11  0:07 ` Andrew Morton
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Morton @ 2009-04-11  0:07 UTC (permalink / raw)
  To: Wolfram Strepp; +Cc: linux-kernel, peterz, lowdanie


> Subject: [PATCH 1/3] Further optimization of function rb_erase() in lib/rbtree.c

Three distinct patches, all with the same title.

Please carefully choose a unique title for each patch in the series.

We push thousands and thousands of patches into Linux and it all gets
complex and confusing.  These little organisational things help us to
manage the volume and the complexity.

On Fri, 10 Apr 2009 12:23:46 +0200
"Wolfram Strepp" <wstrepp@gmx.de> wrote:

> This small patch-series reorganizes some lines in function rb_erase()
> in lib/rbtree.c, and as a result one if-condition can be omitted.
> Tested on x86.
> 
> 
> First, move some code around in order to make the next change more obvious.
> 
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Signed-off-by: Wolfram Strepp <wstrepp@gmx.de>
> 
> ---
>  lib/rbtree.c |   19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)
> Index: linux-2.6/lib/rbtree.c
> ===================================================================
> --- linux-2.6.orig/lib/rbtree.c
> +++ linux-2.6/lib/rbtree.c
> @@ -237,6 +237,16 @@ void rb_erase(struct rb_node *node, stru
>  		node = node->rb_right;
>  		while ((left = node->rb_left) != NULL)
>  			node = left;
> +
> +		if (rb_parent(old))
> +		{
> +			if (rb_parent(old)->rb_left == old)
> +				rb_parent(old)->rb_left = node;
> +			else
> +				rb_parent(old)->rb_right = node;
> +		} else
> +			root->rb_node = node;

You may as well fix the obvious coding-style error while moving the
code.  scripts/checkpatch.pl will detect this one.

>  		child = node->rb_right;
>  		parent = rb_parent(node);
>  		color = rb_color(node);
> @@ -253,15 +263,6 @@ void rb_erase(struct rb_node *node, stru
>  		node->rb_right = old->rb_right;
>  		node->rb_left = old->rb_left;
>  
> -		if (rb_parent(old))
> -		{
> -			if (rb_parent(old)->rb_left == old)
> -				rb_parent(old)->rb_left = node;
> -			else
> -				rb_parent(old)->rb_right = node;
> -		} else
> -			root->rb_node = node;
> -
>  		rb_set_parent(old->rb_left, node);
>  		if (old->rb_right)
>  			rb_set_parent(old->rb_right, node);


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-04-11  0:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-10 10:23 [PATCH 1/3] Further optimization of function rb_erase() in lib/rbtree.c Wolfram Strepp
2009-04-11  0:07 ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox