Messages in this thread | | | Subject | Re: Q: smp.c && barriers (Was: [PATCH 1/4] generic-smp: remove single ipi fallback for smp_call_function_many()) | From | Peter Zijlstra <> | Date | Mon, 16 Feb 2009 22:45:04 +0100 |
| |
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.
| |