Index: kernel/generic/include/compiler/barrier.h
===================================================================
--- kernel/generic/include/compiler/barrier.h	(revision 057e77fa919455f3c2786a305e6acb56b7bfa18c)
+++ kernel/generic/include/compiler/barrier.h	(revision 0ca7286a618557bd1d13cded4ccbe25d62752237)
@@ -5,4 +5,5 @@
 #define compiler_barrier() asm volatile ("" ::: "memory")
 
+/** Forces the compiler to access (ie load/store) the variable only once. */
 #define ACCESS_ONCE(var) (*((volatile typeof(var)*)&(var)))
 
Index: kernel/generic/include/synch/rcu.h
===================================================================
--- kernel/generic/include/synch/rcu.h	(revision 057e77fa919455f3c2786a305e6acb56b7bfa18c)
+++ kernel/generic/include/synch/rcu.h	(revision 0ca7286a618557bd1d13cded4ccbe25d62752237)
@@ -71,8 +71,12 @@
 	 */
 	rcu_item_t *cur_cbs;
+	/** Number of callbacks in cur_cbs. */
+	size_t cur_cbs_cnt;
 	/** Callbacks to invoke once the next grace period ends, ie next_cbs_gp. 
 	 * Accessed by the local reclaimer only.
 	 */
 	rcu_item_t *next_cbs;
+	/** Number of callbacks in next_cbs. */
+	size_t next_cbs_cnt;
 	/** New callbacks are place at the end of this list. */
 	rcu_item_t *arriving_cbs;
@@ -114,4 +118,7 @@
 	size_t stat_avg_cbs;
 	size_t stat_missed_gps;
+	size_t stat_missed_gp_in_wait;
+	size_t stat_max_slice_cbs;
+	size_t last_arriving_cnt;
 } rcu_cpu_data_t;
 
