diff options
| author | bunnei <bunneidev@gmail.com> | 2021-01-15 21:58:44 -0800 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2021-01-28 21:42:26 -0800 |
| commit | 5a4fc4a5299a3835a57ae8a35c6de51459df70c0 (patch) | |
| tree | be8fa37ff42d1928829e5e8769715d6a4d8cb0f5 /src/core/hle/kernel/k_light_lock.h | |
| parent | 97129bc742cd8972c87c9f087914729419d5b6c8 (diff) | |
core: hle: kernel: Implement KLightLock.
Diffstat (limited to 'src/core/hle/kernel/k_light_lock.h')
| -rw-r--r-- | src/core/hle/kernel/k_light_lock.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_light_lock.h b/src/core/hle/kernel/k_light_lock.h new file mode 100644 index 000000000..f4c45f76a --- /dev/null +++ b/src/core/hle/kernel/k_light_lock.h @@ -0,0 +1,41 @@ +// Copyright 2021 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <atomic> + +#include "common/common_types.h" +#include "core/hle/kernel/k_scoped_lock.h" + +namespace Kernel { + +class KernelCore; + +class KLightLock { +public: + explicit KLightLock(KernelCore& kernel_) : kernel{kernel_} {} + + void Lock(); + + void Unlock(); + + void LockSlowPath(uintptr_t owner, uintptr_t cur_thread); + + void UnlockSlowPath(uintptr_t cur_thread); + + bool IsLocked() const { + return tag != 0; + } + + bool IsLockedByCurrentThread() const; + +private: + std::atomic<uintptr_t> tag{}; + KernelCore& kernel; +}; + +using KScopedLightLock = KScopedLock<KLightLock>; + +} // namespace Kernel |
