mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #671 from MerryMage/clear-exclusive-state
scheduler: Clear exclusive state when switching contexts
This commit is contained in:
		
						commit
						88a3140c9b
					
				| @ -116,6 +116,8 @@ public: | ||||
|      */ | ||||
|     virtual void LoadContext(const ThreadContext& ctx) = 0; | ||||
| 
 | ||||
|     virtual void ClearExclusiveState() = 0; | ||||
| 
 | ||||
|     /// Prepare core for thread reschedule (if needed to correctly handle state)
 | ||||
|     virtual void PrepareReschedule() = 0; | ||||
| }; | ||||
|  | ||||
| @ -226,6 +226,10 @@ void ARM_Dynarmic::ClearInstructionCache() { | ||||
|     jit->ClearCache(); | ||||
| } | ||||
| 
 | ||||
| void ARM_Dynarmic::ClearExclusiveState() { | ||||
|     jit->ClearExclusiveState(); | ||||
| } | ||||
| 
 | ||||
| void ARM_Dynarmic::PageTableChanged() { | ||||
|     jit = MakeJit(cb); | ||||
|     current_page_table = Memory::GetCurrentPageTable(); | ||||
|  | ||||
| @ -39,6 +39,7 @@ public: | ||||
|     void LoadContext(const ThreadContext& ctx) override; | ||||
| 
 | ||||
|     void PrepareReschedule() override; | ||||
|     void ClearExclusiveState() override; | ||||
| 
 | ||||
|     void ClearInstructionCache() override; | ||||
|     void PageTableChanged() override; | ||||
|  | ||||
| @ -263,6 +263,8 @@ void ARM_Unicorn::PrepareReschedule() { | ||||
|     CHECKED(uc_emu_stop(uc)); | ||||
| } | ||||
| 
 | ||||
| void ARM_Unicorn::ClearExclusiveState() {} | ||||
| 
 | ||||
| void ARM_Unicorn::ClearInstructionCache() {} | ||||
| 
 | ||||
| void ARM_Unicorn::RecordBreak(GDBStub::BreakpointAddress bkpt) { | ||||
|  | ||||
| @ -31,6 +31,7 @@ public: | ||||
|     void SaveContext(ThreadContext& ctx) override; | ||||
|     void LoadContext(const ThreadContext& ctx) override; | ||||
|     void PrepareReschedule() override; | ||||
|     void ClearExclusiveState() override; | ||||
|     void ExecuteInstructions(int num_instructions); | ||||
|     void Run() override; | ||||
|     void Step() override; | ||||
|  | ||||
| @ -85,6 +85,7 @@ void Scheduler::SwitchContext(Thread* new_thread) { | ||||
| 
 | ||||
|         cpu_core->LoadContext(new_thread->context); | ||||
|         cpu_core->SetTlsAddress(new_thread->GetTLSAddress()); | ||||
|         cpu_core->ClearExclusiveState(); | ||||
|     } else { | ||||
|         current_thread = nullptr; | ||||
|         // Note: We do not reset the current process and current page table when idling because
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei