mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-06 07:12:14 +01:00
- Add vm_locking.h and vm_reservation.h and move relevant functions and types to these headers. - Change include order and make vm_ptr.h, vm_var.h and vm_ref.h headers usable invidually and them including vm.h instead of other way around - Because usage of vm::ptr now requires including vm_ptr.h instead of vm.h updated multiple #includes - Added additional #includes to vm_reservation.h and vm_locking to where vm::reservation_* and locking related functions are used
49 lines
991 B
C++
49 lines
991 B
C++
#pragma once
|
|
|
|
#include "vm.h"
|
|
|
|
class cpu_thread;
|
|
class shared_mutex;
|
|
|
|
namespace vm
|
|
{
|
|
extern shared_mutex g_mutex;
|
|
|
|
extern thread_local atomic_t<cpu_thread*>* g_tls_locked;
|
|
|
|
// Register reader
|
|
void passive_lock(cpu_thread& cpu);
|
|
atomic_t<u64>* passive_lock(const u32 begin, const u32 end);
|
|
|
|
// Unregister reader
|
|
void passive_unlock(cpu_thread& cpu);
|
|
|
|
// Unregister reader (foreign thread)
|
|
void cleanup_unlock(cpu_thread& cpu) noexcept;
|
|
|
|
// Optimization (set cpu_flag::memory)
|
|
void temporary_unlock(cpu_thread& cpu) noexcept;
|
|
void temporary_unlock() noexcept;
|
|
|
|
class reader_lock final
|
|
{
|
|
bool m_upgraded = false;
|
|
|
|
public:
|
|
reader_lock(const reader_lock&) = delete;
|
|
reader_lock& operator=(const reader_lock&) = delete;
|
|
reader_lock();
|
|
~reader_lock();
|
|
|
|
void upgrade();
|
|
};
|
|
|
|
struct writer_lock final
|
|
{
|
|
writer_lock(const writer_lock&) = delete;
|
|
writer_lock& operator=(const writer_lock&) = delete;
|
|
writer_lock(u32 addr = 0);
|
|
~writer_lock();
|
|
};
|
|
} // namespace vm
|