Use ISB as a spin-delay instruction on ARM64.
This seems beneficial on high-core-count machines, and not harmful on lesser hardware. However, older ARM32 gear doesn't have this instruction, so restrict the patch to ARM64. Geoffrey Blake Discussion: https://postgr.es/m/78338F29-9D7F-4DC8-BD71-E9674CE71425@amazon.com
This commit is contained in:
parent
8ea7963fc7
commit
a82a5eee31
@ -337,6 +337,23 @@ tas(volatile slock_t *lock)
|
||||
|
||||
#define S_UNLOCK(lock) __sync_lock_release(lock)
|
||||
|
||||
/*
|
||||
* Using an ISB instruction to delay in spinlock loops appears beneficial on
|
||||
* high-core-count ARM64 processors. It seems mostly a wash for smaller gear,
|
||||
* and ISB doesn't exist at all on pre-v7 ARM chips.
|
||||
*/
|
||||
#if defined(__aarch64__) || defined(__aarch64)
|
||||
|
||||
#define SPIN_DELAY() spin_delay()
|
||||
|
||||
static __inline__ void
|
||||
spin_delay(void)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
" isb; \n");
|
||||
}
|
||||
|
||||
#endif /* __aarch64__ || __aarch64 */
|
||||
#endif /* HAVE_GCC__SYNC_INT32_TAS */
|
||||
#endif /* __arm__ || __arm || __aarch64__ || __aarch64 */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user