| 123456789101112131415161718192021222324252627 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * ARM64 Spinlock support
- */
- #include <stdint.h>
- #include "spinlock.h"
- void spin_lock(struct spinlock *lock)
- {
- int val, res;
- asm volatile(
- "1: ldaxr %w0, [%2]\n"
- " cbnz %w0, 1b\n"
- " mov %w0, #1\n"
- " stxr %w1, %w0, [%2]\n"
- " cbnz %w1, 1b\n"
- : "=&r" (val), "=&r" (res)
- : "r" (&lock->v)
- : "memory");
- }
- void spin_unlock(struct spinlock *lock)
- {
- asm volatile("stlr wzr, [%0]\n" : : "r" (&lock->v) : "memory");
- }
|