ARCv2: spinlock/rwlock/atomics: Delayed retry of failed SCOND with exponential backoff
authorVineet Gupta <vgupta@synopsys.com>
Tue, 14 Jul 2015 14:20:18 +0000 (19:50 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Tue, 4 Aug 2015 03:56:34 +0000 (09:26 +0530)
commite78fdfef84be13a5c2b8276e12203cdf24778596
treee16fad7f1d73a651d2f02deefd8f20f5bf9a018e
parent69cbe630f54ec02efe47fdb9e257e617161da370
ARCv2: spinlock/rwlock/atomics: Delayed retry of failed SCOND with exponential backoff

This is to workaround the llock/scond livelock

HS38x4 could get into a LLOCK/SCOND livelock in case of multiple overlapping
coherency transactions in the SCU. The exclusive line state keeps rotating
among contenting cores leading to a never ending cycle. So break the cycle
by deferring the retry of failed exclusive access (SCOND). The actual delay
needed is function of number of contending cores as well as the unrelated
coherency traffic from other cores. To keep the code simple, start off with
small delay of 1 which would suffice most cases and in case of contention
double the delay. Eventually the delay is sufficient such that the coherency
pipeline is drained, thus a subsequent exclusive access would succeed.

Link: http://lkml.kernel.org/r/1438612568-28265-1-git-send-email-vgupta@synopsys.com
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/Kconfig
arch/arc/include/asm/atomic.h
arch/arc/include/asm/spinlock.h
arch/arc/kernel/setup.c