Re: Q: smp.c && barriers (Was: [PATCH 1/4] generic-smp: removesingle ipi fallback for smp_call_function_many())
From: Peter Zijlstra
Date: Mon Feb 16 2009 - 16:45:48 EST
On Mon, 2009-02-16 at 22:32 +0100, Oleg Nesterov wrote:
> > I was about to write a response, but found it to be a justification for
> > the read_barrier_depends() at the end of the loop.
>
> I forgot to mention I don't understand the read_barrier_depends() at the
> end of the loop as well ;)
Suppose cpu0 adds to csd to cpu1:
cpu0: cpu1:
add entry1
mb();
send ipi
run ipi handler
read_barrier_depends()
while (!list_empty()) [A]
do foo
add entry2
mb();
[no ipi -- we still observe entry1]
remove foo
read_barrier_depends()
while (!list_empty()) [B]
The read_barrier_depends() matches the mb() on the other cpu, without
which the 'new' entry might not be observed.
So it turns out the initial one is needed as well.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/