[PATCH] HOTPLUG_CPU: avoid hitting too many cachelines in recalc_bh_state()

Instead of using for_each_cpu(i), we can use for_each_online_cpu(i).

When a CPU goes offline (ie removed from online map), it might have a non
null bh_accounting.nr, so this patch adds a transfer of this counter to an
online CPU counter.

We already have a hotcpu_notifier, (function buffer_cpu_notify()), where we
can do this bh_accounting.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Eric Dumazet 2006-03-24 03:18:10 -08:00 committed by Linus Torvalds
parent 2ecb9e633c
commit 8a14342683

View file

@ -3078,7 +3078,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_cpu(i)
for_each_online_cpu(i)
tot += per_cpu(bh_accounting, i).nr;
buffer_heads_over_limit = (tot > max_buffer_heads);
}
@ -3127,6 +3127,9 @@ static void buffer_exit_cpu(int cpu)
brelse(b->bhs[i]);
b->bhs[i] = NULL;
}
get_cpu_var(bh_accounting).nr += per_cpu(bh_accounting, cpu).nr;
per_cpu(bh_accounting, cpu).nr = 0;
put_cpu_var(bh_accounting);
}
static int buffer_cpu_notify(struct notifier_block *self,