Index: kernel/generic/include/adt/avl.h
===================================================================
--- kernel/generic/include/adt/avl.h	(revision 0d65d76675845d96ddff8e5f335ec3d5c995ca08)
+++ kernel/generic/include/adt/avl.h	(revision d1e9321bc20a1b9a7705cf9c7ba73af5040cfa00)
@@ -33,5 +33,4 @@
  */
 
-
 #ifndef KERN_AVLTREE_H_
 #define KERN_AVLTREE_H_ 
@@ -47,11 +46,13 @@
  * @param member Name of avltree attribute in the outer structure.
  */
-#define avltree_get_instance(link, type, member) \
-    ((type *)(((uint8_t *)(link)) - ((uint8_t *) &(((type *) NULL)->member))))
-
+#define avltree_get_instance(node, type, member) \
+    ((type *)(((uint8_t *)(node)) - ((uint8_t *) &(((type *) NULL)->member))))
 
 typedef struct avltree_node avltree_node_t;
 typedef struct avltree avltree_t;
 
+typedef uint64_t avltree_key_t;
+
+typedef void (* avltree_walker_t)(avltree_node_t *);
 
 /** AVL tree node structure. */
@@ -78,5 +79,5 @@
 	
 	/** Node's key. */
-	uint64_t key; 
+	avltree_key_t key; 
 	
 	/**
@@ -101,5 +102,5 @@
 	 * with avltree_delete_min().
 	 */
-	uint64_t base; 
+	avltree_key_t base; 
 };
 
@@ -109,5 +110,5 @@
  * @param t AVL tree.
  */
-static inline void avltree_create (avltree_t *t)
+static inline void avltree_create(avltree_t *t)
 {
 	t->root = NULL;
@@ -129,8 +130,9 @@
 
 extern avltree_node_t *avltree_find_min(avltree_t *t);
-extern avltree_node_t *avltree_search(avltree_t *t, uint64_t key);
+extern avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key);
 extern void avltree_insert(avltree_t *t, avltree_node_t *newnode);
 extern void avltree_delete(avltree_t *t, avltree_node_t *node);
 extern bool avltree_delete_min(avltree_t *t);
+extern void avltree_walk(avltree_t *t, avltree_walker_t walker);
 
 #endif
Index: kernel/generic/src/adt/avl.c
===================================================================
--- kernel/generic/src/adt/avl.c	(revision 0d65d76675845d96ddff8e5f335ec3d5c995ca08)
+++ kernel/generic/src/adt/avl.c	(revision d1e9321bc20a1b9a7705cf9c7ba73af5040cfa00)
@@ -53,9 +53,7 @@
 #include <debug.h>
 
-
 #define LEFT 	0
 #define RIGHT	1
 
-
 /** Search for the first occurence of the given key in an AVL tree.
  *
@@ -65,5 +63,5 @@
  * @return Pointer to a node or NULL if there is no such key.
  */
-avltree_node_t *avltree_search(avltree_t *t, uint64_t key)
+avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key)
 {
 	avltree_node_t *p;
@@ -121,5 +119,5 @@
 	avltree_node_t *top;
 	avltree_node_t **dpc;
-	uint64_t key;
+	avltree_key_t key;
 
 	ASSERT(t);
@@ -708,4 +706,24 @@
 }
 
+static void _avltree_walk(avltree_node_t *node, avltree_walker_t walker)
+{
+	if (node->lft)
+		_avltree_walk(node->lft, walker);
+	walker(node);
+	if (node->rgt)
+		_avltree_walk(node->rgt, walker);
+}
+
+/** Walk the AVL tree and apply the walker function on each visited node.
+ *
+ * @param t		AVL tree to be walked.
+ * @param walker	Walker function that will be called on each visited
+ * 			node.
+ */
+void avltree_walk(avltree_t *t, avltree_walker_t walker)
+{
+	_avltree_walk(t->root, walker);
+}
+
 /** @}
  */
