From: Rusty Russell The IA64 hotplug CPU merge seems to have included some core changes: in particular the recalc_bh_state() needs to sum for all (including offline) cpus, since we don't empty the counters on CPU down. The totals printed by /proc/stat (the first loop) should include offline cpus, too (apparently printing out the per-cpu lines for offline cpus confuses top). --- 25-akpm/fs/buffer.c | 2 +- 25-akpm/fs/proc/proc_misc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN fs/buffer.c~fix-overzealous-use-of-online-cpu-iterators fs/buffer.c --- 25/fs/buffer.c~fix-overzealous-use-of-online-cpu-iterators 2004-05-18 21:38:51.224370168 -0700 +++ 25-akpm/fs/buffer.c 2004-05-18 21:38:51.255365456 -0700 @@ -3025,7 +3025,7 @@ static void recalc_bh_state(void) if (__get_cpu_var(bh_accounting).ratelimit++ < 4096) return; __get_cpu_var(bh_accounting).ratelimit = 0; - for_each_online_cpu(i) + for_each_cpu(i) tot += per_cpu(bh_accounting, i).nr; buffer_heads_over_limit = (tot > max_buffer_heads); } diff -puN fs/proc/proc_misc.c~fix-overzealous-use-of-online-cpu-iterators fs/proc/proc_misc.c --- 25/fs/proc/proc_misc.c~fix-overzealous-use-of-online-cpu-iterators 2004-05-18 21:38:51.242367432 -0700 +++ 25-akpm/fs/proc/proc_misc.c 2004-05-18 21:38:51.256365304 -0700 @@ -371,7 +371,7 @@ int show_stat(struct seq_file *p, void * if (wall_to_monotonic.tv_nsec) --jif; - for_each_online_cpu(i) { + for_each_cpu(i) { int j; user += kstat_cpu(i).cpustat.user; _