• Hugh Dickins's avatar
    [POWERPC] Make mmiowb's io_sync preempt safe · 292f86f0
    Hugh Dickins authored
    If mmiowb() is always used prior to releasing spinlock as Doc suggests,
    then it's safe against preemption; but I'm not convinced that's always
    the case.  If preemption occurs between sync and get_paca()->io_sync = 0,
    I believe there's no problem.  But in the unlikely event that gcc does
    the store relative to another register than r13 (as it did with current),
    then there's a small danger of setting another cpu's io_sync to 0, after
    it had just set it to 1.  Rewrite ppc64 mmiowb to prevent that.
    
    The remaining io_sync assignments in io.h all get_paca()->io_sync = 1,
    which is harmless even if preempted to the wrong cpu (the context switch
    itself syncs); and those in spinlock.h are while preemption is disabled.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    292f86f0
io.h 13.9 KB