rbtree: Undo augmented trees performance damage and regression
authorPeter Zijlstra <peterz@infradead.org>
Sat, 29 May 2010 13:31:43 +0000 (15:31 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 5 Jul 2010 12:43:50 +0000 (14:43 +0200)
commitb945d6b2554d550fe95caadc61e521c0ad71fb9c
tree0b76cdb978bead82188de40cae6d24bd88d71b7d
parentd596043d71ff0d7b3d0bead19b1d68c55f003093
rbtree: Undo augmented trees performance damage and regression

Reimplement augmented RB-trees without sprinkling extra branches
all over the RB-tree code (which lives in the scheduler hot path).

This approach is 'borrowed' from Fabio's BFQ implementation and
relies on traversing the rebalance path after the RB-tree-op to
correct the heap property for insertion/removal and make up for
the damage done by the tree rotations.

For insertion the rebalance path is trivially that from the new
node upwards to the root, for removal it is that from the deepest
node in the path from the to be removed node that will still
be around after the removal.

[ This patch also fixes a video driver regression reported by
  Ali Gholami Rudi - the memtype->subtree_max_end was updated
  incorrectly. ]

Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
Acked-by: Venkatesh Pallipadi <venki@google.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Tested-by: Ali Gholami Rudi <ali@rudi.ir>
Cc: Fabio Checconi <fabio@gandalf.sssup.it>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
LKML-Reference: <1275414172.27810.27961.camel@twins>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/pat_rbtree.c
include/linux/rbtree.h
lib/rbtree.c