generic-ipi: fix the smp_mb() placement
authorSuresh Siddha <suresh.b.siddha@intel.com>
Thu, 30 Oct 2008 17:28:41 +0000 (18:28 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 6 Nov 2008 07:41:56 +0000 (08:41 +0100)
commit561920a0d2bb6d63343e83acfd784c0a77bd28d1
tree7b87d9d867296d4a14e9b287129fcfd0b2cd1b47
parente78042e5b83936b1d12a4b5bbb492bdd88ad76c6
generic-ipi: fix the smp_mb() placement

smp_mb() is needed (to make the memory operations visible globally) before
sending the ipi on the sender and the receiver (on Alpha atleast) needs
smp_read_barrier_depends() in the handler before reading the call_single_queue
list in a lock-free fashion.

On x86, x2apic mode register accesses for sending IPI's don't have serializing
semantics. So the need for smp_mb() before sending the IPI becomes more
critical in x2apic mode.

Remove the unnecessary smp_mb() in csd_flag_wait(), as the presence of that
smp_mb() doesn't mean anything on the sender, when the ipi receiver is not
doing any thing special (like memory fence) after clearing the CSD_FLAG_WAIT.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
kernel/smp.c