https://github.com/torvalds/linux
Revision e78fdfef84be13a5c2b8276e12203cdf24778596 authored by Vineet Gupta on 14 July 2015, 14:20:18 UTC, committed by Vineet Gupta on 04 August 2015, 03:56:34 UTC
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>
1 parent 69cbe63
Tip revision: e78fdfef84be13a5c2b8276e12203cdf24778596 authored by Vineet Gupta on 14 July 2015, 14:20:18 UTC
ARCv2: spinlock/rwlock/atomics: Delayed retry of failed SCOND with exponential backoff
ARCv2: spinlock/rwlock/atomics: Delayed retry of failed SCOND with exponential backoff
Tip revision: e78fdfe
File | Mode | Size |
---|---|---|
Kconfig | -rw-r--r-- | 3.1 KB |
Makefile | -rw-r--r-- | 577 bytes |
associola.c | -rw-r--r-- | 48.0 KB |
auth.c | -rw-r--r-- | 23.9 KB |
bind_addr.c | -rw-r--r-- | 13.7 KB |
chunk.c | -rw-r--r-- | 9.5 KB |
debug.c | -rw-r--r-- | 4.2 KB |
endpointola.c | -rw-r--r-- | 13.0 KB |
input.c | -rw-r--r-- | 30.8 KB |
inqueue.c | -rw-r--r-- | 6.2 KB |
ipv6.c | -rw-r--r-- | 28.4 KB |
objcnt.c | -rw-r--r-- | 4.0 KB |
output.c | -rw-r--r-- | 22.3 KB |
outqueue.c | -rw-r--r-- | 52.0 KB |
primitive.c | -rw-r--r-- | 7.3 KB |
probe.c | -rw-r--r-- | 5.9 KB |
proc.c | -rw-r--r-- | 14.4 KB |
protocol.c | -rw-r--r-- | 41.5 KB |
sm_make_chunk.c | -rw-r--r-- | 102.1 KB |
sm_sideeffect.c | -rw-r--r-- | 48.9 KB |
sm_statefuns.c | -rw-r--r-- | 197.0 KB |
sm_statetable.c | -rw-r--r-- | 31.2 KB |
socket.c | -rw-r--r-- | 207.8 KB |
ssnmap.c | -rw-r--r-- | 3.1 KB |
sysctl.c | -rw-r--r-- | 12.3 KB |
transport.c | -rw-r--r-- | 19.7 KB |
tsnmap.c | -rw-r--r-- | 9.5 KB |
ulpevent.c | -rw-r--r-- | 29.1 KB |
ulpqueue.c | -rw-r--r-- | 29.0 KB |
Computing file changes ...