• Suresh Siddha's avatar
    generic-ipi: fix the smp_mb() placement · 561920a0
    Suresh Siddha authored
    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: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    561920a0
smp.c 10.7 KB