diff options
| -rw-r--r-- | lib/lockref.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/lockref.c b/lib/lockref.c index e294ae445c9a..6f9d434c1521 100644 --- a/lib/lockref.c +++ b/lib/lockref.c | |||
| @@ -12,6 +12,14 @@ | |||
| 12 | #endif | 12 | #endif |
| 13 | 13 | ||
| 14 | /* | 14 | /* |
| 15 | * Allow architectures to override the default cpu_relax() within CMPXCHG_LOOP. | ||
| 16 | * This is useful for architectures with an expensive cpu_relax(). | ||
| 17 | */ | ||
| 18 | #ifndef arch_mutex_cpu_relax | ||
| 19 | # define arch_mutex_cpu_relax() cpu_relax() | ||
| 20 | #endif | ||
| 21 | |||
| 22 | /* | ||
| 15 | * Note that the "cmpxchg()" reloads the "old" value for the | 23 | * Note that the "cmpxchg()" reloads the "old" value for the |
| 16 | * failure case. | 24 | * failure case. |
| 17 | */ | 25 | */ |
| @@ -28,7 +36,7 @@ | |||
| 28 | if (likely(old.lock_count == prev.lock_count)) { \ | 36 | if (likely(old.lock_count == prev.lock_count)) { \ |
| 29 | SUCCESS; \ | 37 | SUCCESS; \ |
| 30 | } \ | 38 | } \ |
| 31 | cpu_relax(); \ | 39 | arch_mutex_cpu_relax(); \ |
| 32 | } \ | 40 | } \ |
| 33 | } while (0) | 41 | } while (0) |
| 34 | 42 | ||
