• Vineet Gupta's avatar
    ARC: LLOCK/SCOND based spin_lock · ae7eae9e
    Vineet Gupta authored
    Current spin_lock uses EXchange instruction to implement the atomic test
    and set of lock location (reads orig value and ST 1). This however forces
    the cacheline into exclusive state (because of the ST) and concurrent
    loops in multiple cores will bounce the line around between cores.
    
    Instead, use LLOCK/SCOND to implement the atomic test and set which is
    better as line is in shared state while lock is spinning on LLOCK
    
    The real motivation of this change however is to make way for future
    changes in atomics to implement delayed retry (with backoff).
    Initial experiment with delayed retry in atomics combined with orig
    EX based spinlock was a total disaster (broke even LMBench) as
    struct sock has a cache line sharing an atomic_t and spinlock. The
    tight spinning on lock, caused the atomic retry to keep backing off
    such that it would never finish.
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    ae7eae9e
spinlock.h 5.47 KB