Index: kernel/generic/src/synch/rcu.c
===================================================================
--- kernel/generic/src/synch/rcu.c	(revision 9f8745c5331a919e144b6084cb90d7f5b2eaccba)
+++ kernel/generic/src/synch/rcu.c	(revision b68ae24ef2a8e80ee94b455682978bfbac6bedbc)
@@ -639,8 +639,8 @@
 }
 
-static void upd_stat_missed_gp(rcu_gp_t compl, rcu_gp_t cb_gp)
-{
-	if (compl > cb_gp) {
-		CPU->rcu.stat_missed_gps += (size_t)(compl - cb_gp);
+static void upd_stat_missed_gp(rcu_gp_t compl)
+{
+	if (CPU->rcu.cur_cbs_gp < compl) {
+		CPU->rcu.stat_missed_gps += (size_t)(compl - CPU->rcu.cur_cbs_gp);
 	}
 }
@@ -649,11 +649,11 @@
 static void exec_completed_cbs(rcu_gp_t last_completed_gp)
 {
+	upd_stat_missed_gp(last_completed_gp);
+	
 	if (CPU->rcu.cur_cbs_gp <= last_completed_gp) {
-		upd_stat_missed_gp(last_completed_gp, CPU->rcu.cur_cbs_gp);
 		exec_cbs(&CPU->rcu.cur_cbs);
 	}
 	
 	if (CPU->rcu.next_cbs_gp <= last_completed_gp) {
-		upd_stat_missed_gp(last_completed_gp, CPU->rcu.next_cbs_gp);
 		exec_cbs(&CPU->rcu.next_cbs);	
 	}
@@ -1289,5 +1289,6 @@
 		rcu.stat_delayed_cnt);
 	printf("Preempt blocked GPs: %zu (waited for preempted readers; "
-		"running or not)\n", rcu.stat_delayed_cnt);
+		"running or not)\n", rcu.stat_preempt_blocking_cnt);
+	printf("Smp calls:     %zu\n", rcu.stat_smp_call_cnt);
 	
 	printf("Max callbacks per GP:\n");
