24f287e412
When the cpu count is high and contention hits an atomic object, the processors can synchronize such that some cpus continually get knocked out and cannot complete the atomic update. So implement an exponential backoff when SMP. Signed-off-by: David S. Miller <davem@davemloft.net>
28 lines
466 B
C
28 lines
466 B
C
#ifndef _SPARC64_BACKOFF_H
|
|
#define _SPARC64_BACKOFF_H
|
|
|
|
#define BACKOFF_LIMIT (4 * 1024)
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
#define BACKOFF_SETUP(reg) \
|
|
mov 1, reg
|
|
|
|
#define BACKOFF_SPIN(reg, tmp, label) \
|
|
mov reg, tmp; \
|
|
88: brnz,pt tmp, 88b; \
|
|
sub tmp, 1, tmp; \
|
|
cmp reg, BACKOFF_LIMIT; \
|
|
bg,pn %xcc, label; \
|
|
nop; \
|
|
ba,pt %xcc, label; \
|
|
sllx reg, 1, reg;
|
|
|
|
#else
|
|
|
|
#define BACKOFF_SETUP(reg)
|
|
#define BACKOFF_SPIN(reg, tmp, label)
|
|
|
|
#endif
|
|
|
|
#endif /* _SPARC64_BACKOFF_H */
|