diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/memory.cpp | 6 | ||||
-rw-r--r-- | src/core/memory.h | 30 |
2 files changed, 33 insertions, 3 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index b32071899..9a77e4ac0 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -1183,9 +1183,9 @@ bool Memory::Remap(u64 guest_addr, u32 size, ArmNce& arm_nce) { void Memory::ReclaimUnusedMemory(ArmNce& arm_nce) { std::lock_guard<std::mutex> lock(arm_nce.m_tlb_mutex); // Correct usage of lock_guard - const auto& tlb_entries = arm_nce.GetTlbEntries(); + auto& tlb_entries = arm_nce.GetTlbEntries(); - for (const auto& entry : tlb_entries) { + for (auto& entry : tlb_entries) { if (entry.valid && entry.ref_count == 0) { // Unmap the memory region UnmapRegion(*impl->current_page_table, entry.guest_addr, entry.size, false); @@ -1194,7 +1194,7 @@ void Memory::ReclaimUnusedMemory(ArmNce& arm_nce) { std::free(reinterpret_cast<void*>(entry.host_addr)); // Invalidate the TLB entry - const_cast<TlbEntry&>(entry).valid = false; + entry.valid = false; LOG_INFO(Core_Memory, "Reclaimed memory for address {:X}", entry.guest_addr); } diff --git a/src/core/memory.h b/src/core/memory.h index eeeee6d65..1fdb2ccc4 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -14,6 +14,7 @@ #include "common/typed_address.h" #include "core/guest_memory.h" #include "core/hle/result.h" +#include "core/arm/nce/arm_nce.h" // Include ArmNce header namespace Common { enum class MemoryPermission : u32; @@ -52,6 +53,17 @@ enum : u64 { DEFAULT_STACK_SIZE = 0x100000, }; +struct TlbEntry { + u64 guest_addr; + u64 host_addr; + u32 size; + bool valid; + bool writable; + u32 access_count; + std::chrono::steady_clock::time_point last_access_time; + u32 ref_count= 0; +}; + /// Central class that handles all memory operations and state. class Memory { public: @@ -503,10 +515,28 @@ public: bool Remap(u64 guest_addr, u32 size); /** + * Remaps a region of the emulated process address space. + * + * @param guest_addr The address to begin remapping at. + * @param size The amount of bytes to remap. + * @param arm_nce The ArmNce instance to use for TLB entries. + * + * @returns True if remapping is successful, false otherwise. + */ + bool Remap(u64 guest_addr, u32 size, ArmNce& arm_nce); + + /** * Reclaims memory from pages that are no longer used. */ void ReclaimUnusedMemory(); + /** + * Reclaims memory from pages that are no longer used. + * + * @param arm_nce The ArmNce instance to use for TLB entries. + */ + void ReclaimUnusedMemory(ArmNce& arm_nce); + private: Core::System& system; |