From 88161b8ac6257a3ad0dcac562384f4d70a4b2561 Mon Sep 17 00:00:00 2001 From: Weiyi Wang Date: Mon, 10 Dec 2018 22:13:10 -0500 Subject: [PATCH] Memory: register page tables into a list for rasterizer cache marking --- src/core/hle/kernel/process.cpp | 9 +++++++-- src/core/memory.cpp | 10 ++++++++++ src/core/memory.h | 6 ++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 136a705fa..7dd775550 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp @@ -402,8 +402,13 @@ ResultCode Process::Unmap(VAddr target, VAddr source, u32 size, VMAPermission pe } Kernel::Process::Process(KernelSystem& kernel) - : Object(kernel), handle_table(kernel), kernel(kernel), vm_manager(kernel.memory) {} -Kernel::Process::~Process() {} + : Object(kernel), handle_table(kernel), kernel(kernel), vm_manager(kernel.memory) { + + kernel.memory.RegisterPageTable(&vm_manager.page_table); +} +Kernel::Process::~Process() { + kernel.memory.UnregisterPageTable(&vm_manager.page_table); +} SharedPtr KernelSystem::GetProcessById(u32 process_id) const { auto itr = std::find_if( diff --git a/src/core/memory.cpp b/src/core/memory.cpp index cfb42c30c..e971ae42f 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -70,6 +70,7 @@ public: PageTable* current_page_table = nullptr; RasterizerCacheMarker cache_marker; + std::vector page_table_list; }; MemorySystem::MemorySystem() : impl(std::make_unique()) {} @@ -146,6 +147,15 @@ u8* MemorySystem::GetPointerForRasterizerCache(VAddr addr) { UNREACHABLE(); } +void MemorySystem::RegisterPageTable(PageTable* page_table) { + impl->page_table_list.push_back(page_table); +} + +void MemorySystem::UnregisterPageTable(PageTable* page_table) { + impl->page_table_list.erase( + std::find(impl->page_table_list.begin(), impl->page_table_list.end(), page_table)); +} + /** * This function should only be called for virtual addreses with attribute `PageType::Special`. */ diff --git a/src/core/memory.h b/src/core/memory.h index 586652b1c..f154affc2 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -281,6 +281,12 @@ public: */ void RasterizerMarkRegionCached(PAddr start, u32 size, bool cached); + /// Registers page table for rasterizer cache marking + void RegisterPageTable(PageTable* page_table); + + /// Unregisters page table for rasterizer cache marking + void UnregisterPageTable(PageTable* page_table); + private: template T Read(const VAddr vaddr);