Merge pull request #2361 from lioncash/pagetable
core/memory: Minor simplifications to page table management
This commit is contained in:
		
						commit
						3c1ce290d0
					
				| @ -163,7 +163,6 @@ MICROPROFILE_DEFINE(ARM_Jit_Dynarmic, "ARM JIT", "Dynarmic", MP_RGB(255, 64, 64) | ||||
| 
 | ||||
| void ARM_Dynarmic::Run() { | ||||
|     MICROPROFILE_SCOPE(ARM_Jit_Dynarmic); | ||||
|     ASSERT(Memory::GetCurrentPageTable() == current_page_table); | ||||
| 
 | ||||
|     jit->Run(); | ||||
| } | ||||
| @ -278,7 +277,6 @@ void ARM_Dynarmic::ClearExclusiveState() { | ||||
| 
 | ||||
| void ARM_Dynarmic::PageTableChanged() { | ||||
|     jit = MakeJit(); | ||||
|     current_page_table = Memory::GetCurrentPageTable(); | ||||
| } | ||||
| 
 | ||||
| DynarmicExclusiveMonitor::DynarmicExclusiveMonitor(std::size_t core_count) : monitor(core_count) {} | ||||
|  | ||||
| @ -12,10 +12,6 @@ | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/arm/unicorn/arm_unicorn.h" | ||||
| 
 | ||||
| namespace Common { | ||||
| struct PageTable; | ||||
| } | ||||
| 
 | ||||
| namespace Core::Timing { | ||||
| class CoreTiming; | ||||
| } | ||||
| @ -69,8 +65,6 @@ private: | ||||
|     std::size_t core_index; | ||||
|     Timing::CoreTiming& core_timing; | ||||
|     DynarmicExclusiveMonitor& exclusive_monitor; | ||||
| 
 | ||||
|     Common::PageTable* current_page_table = nullptr; | ||||
| }; | ||||
| 
 | ||||
| class DynarmicExclusiveMonitor final : public ExclusiveMonitor { | ||||
|  | ||||
| @ -21,6 +21,7 @@ | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/lock.h" | ||||
| #include "core/hle/result.h" | ||||
| #include "core/memory.h" | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| @ -181,6 +182,7 @@ void KernelCore::AppendNewProcess(SharedPtr<Process> process) { | ||||
| 
 | ||||
| void KernelCore::MakeCurrentProcess(Process* process) { | ||||
|     impl->current_process = process; | ||||
|     Memory::SetCurrentPageTable(&process->VMManager().page_table); | ||||
| } | ||||
| 
 | ||||
| Process* KernelCore::CurrentProcess() { | ||||
|  | ||||
| @ -32,9 +32,6 @@ namespace { | ||||
|  * @param priority The priority to give the main thread | ||||
|  */ | ||||
| void SetupMainThread(Process& owner_process, KernelCore& kernel, VAddr entry_point, u32 priority) { | ||||
|     // Setup page table so we can write to memory
 | ||||
|     Memory::SetCurrentPageTable(&owner_process.VMManager().page_table); | ||||
| 
 | ||||
|     // Initialize new "main" thread
 | ||||
|     const VAddr stack_top = owner_process.VMManager().GetTLSIORegionEndAddress(); | ||||
|     auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, | ||||
|  | ||||
| @ -101,7 +101,6 @@ void Scheduler::SwitchContext(Thread* new_thread) { | ||||
|         auto* const thread_owner_process = current_thread->GetOwnerProcess(); | ||||
|         if (previous_process != thread_owner_process) { | ||||
|             system.Kernel().MakeCurrentProcess(thread_owner_process); | ||||
|             Memory::SetCurrentPageTable(&thread_owner_process->VMManager().page_table); | ||||
|         } | ||||
| 
 | ||||
|         cpu_core.LoadContext(new_thread->GetContext()); | ||||
|  | ||||
| @ -38,10 +38,6 @@ void SetCurrentPageTable(Common::PageTable* page_table) { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| Common::PageTable* GetCurrentPageTable() { | ||||
|     return current_page_table; | ||||
| } | ||||
| 
 | ||||
| static void MapPages(Common::PageTable& page_table, VAddr base, u64 size, u8* memory, | ||||
|                      Common::PageType type) { | ||||
|     LOG_DEBUG(HW_Memory, "Mapping {} onto {:016X}-{:016X}", fmt::ptr(memory), base * PAGE_SIZE, | ||||
|  | ||||
| @ -40,9 +40,8 @@ enum : VAddr { | ||||
|     KERNEL_REGION_END = KERNEL_REGION_VADDR + KERNEL_REGION_SIZE, | ||||
| }; | ||||
| 
 | ||||
| /// Currently active page table
 | ||||
| /// Changes the currently active page table.
 | ||||
| void SetCurrentPageTable(Common::PageTable* page_table); | ||||
| Common::PageTable* GetCurrentPageTable(); | ||||
| 
 | ||||
| /// Determines if the given VAddr is valid for the specified process.
 | ||||
| bool IsValidVirtualAddress(const Kernel::Process& process, VAddr vaddr); | ||||
|  | ||||
| @ -17,7 +17,6 @@ TestEnvironment::TestEnvironment(bool mutable_memory_) | ||||
|     : mutable_memory(mutable_memory_), | ||||
|       test_memory(std::make_shared<TestMemory>(this)), kernel{Core::System::GetInstance()} { | ||||
|     auto process = Kernel::Process::Create(Core::System::GetInstance(), ""); | ||||
|     kernel.MakeCurrentProcess(process.get()); | ||||
|     page_table = &process->VMManager().page_table; | ||||
| 
 | ||||
|     std::fill(page_table->pointers.begin(), page_table->pointers.end(), nullptr); | ||||
| @ -28,7 +27,7 @@ TestEnvironment::TestEnvironment(bool mutable_memory_) | ||||
|     Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); | ||||
|     Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); | ||||
| 
 | ||||
|     Memory::SetCurrentPageTable(page_table); | ||||
|     kernel.MakeCurrentProcess(process.get()); | ||||
| } | ||||
| 
 | ||||
| TestEnvironment::~TestEnvironment() { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei