mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	kernel/thread: replace usage of Core::CPU()
This commit is contained in:
		
							parent
							
								
									b9f6bd9278
								
							
						
					
					
						commit
						276ca88c9e
					
				
					 3 changed files with 15 additions and 4 deletions
				
			
		|  | @ -187,6 +187,8 @@ System::ResultStatus System::Init(EmuWindow& emu_window, u32 system_mode) { | ||||||
|         cpu_core = std::make_unique<ARM_DynCom>(*this, USER32MODE); |         cpu_core = std::make_unique<ARM_DynCom>(*this, USER32MODE); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     kernel->GetThreadManager().SetCPU(*cpu_core); | ||||||
|  | 
 | ||||||
|     if (Settings::values.enable_dsp_lle) { |     if (Settings::values.enable_dsp_lle) { | ||||||
|         dsp_core = std::make_unique<AudioCore::DspLle>(*memory, |         dsp_core = std::make_unique<AudioCore::DspLle>(*memory, | ||||||
|                                                        Settings::values.enable_dsp_lle_multithread); |                                                        Settings::values.enable_dsp_lle_multithread); | ||||||
|  |  | ||||||
|  | @ -38,7 +38,7 @@ u32 ThreadManager::NewThreadId() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Thread::Thread(KernelSystem& kernel) | Thread::Thread(KernelSystem& kernel) | ||||||
|     : WaitObject(kernel), context(Core::CPU().NewContext()), |     : WaitObject(kernel), context(kernel.GetThreadManager().NewContext()), | ||||||
|       thread_manager(kernel.GetThreadManager()) {} |       thread_manager(kernel.GetThreadManager()) {} | ||||||
| Thread::~Thread() {} | Thread::~Thread() {} | ||||||
| 
 | 
 | ||||||
|  | @ -86,7 +86,7 @@ void ThreadManager::SwitchContext(Thread* new_thread) { | ||||||
|     // Save context for previous thread
 |     // Save context for previous thread
 | ||||||
|     if (previous_thread) { |     if (previous_thread) { | ||||||
|         previous_thread->last_running_ticks = timing.GetTicks(); |         previous_thread->last_running_ticks = timing.GetTicks(); | ||||||
|         Core::CPU().SaveContext(previous_thread->context); |         cpu->SaveContext(previous_thread->context); | ||||||
| 
 | 
 | ||||||
|         if (previous_thread->status == ThreadStatus::Running) { |         if (previous_thread->status == ThreadStatus::Running) { | ||||||
|             // This is only the case when a reschedule is triggered without the current thread
 |             // This is only the case when a reschedule is triggered without the current thread
 | ||||||
|  | @ -117,8 +117,8 @@ void ThreadManager::SwitchContext(Thread* new_thread) { | ||||||
|                 ¤t_thread->owner_process->vm_manager.page_table); |                 ¤t_thread->owner_process->vm_manager.page_table); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Core::CPU().LoadContext(new_thread->context); |         cpu->LoadContext(new_thread->context); | ||||||
|         Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); |         cpu->SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); | ||||||
|     } else { |     } else { | ||||||
|         current_thread = nullptr; |         current_thread = nullptr; | ||||||
|         // Note: We do not reset the current process and current page table when idling because
 |         // Note: We do not reset the current process and current page table when idling because
 | ||||||
|  |  | ||||||
|  | @ -101,6 +101,14 @@ public: | ||||||
|      */ |      */ | ||||||
|     const std::vector<SharedPtr<Thread>>& GetThreadList(); |     const std::vector<SharedPtr<Thread>>& GetThreadList(); | ||||||
| 
 | 
 | ||||||
|  |     void SetCPU(ARM_Interface& cpu) { | ||||||
|  |         this->cpu = &cpu; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::unique_ptr<ARM_Interface::ThreadContext> NewContext() { | ||||||
|  |         return cpu->NewContext(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     /**
 |     /**
 | ||||||
|      * Switches the CPU's active thread context to that of the specified thread |      * Switches the CPU's active thread context to that of the specified thread | ||||||
|  | @ -122,6 +130,7 @@ private: | ||||||
|     void ThreadWakeupCallback(u64 thread_id, s64 cycles_late); |     void ThreadWakeupCallback(u64 thread_id, s64 cycles_late); | ||||||
| 
 | 
 | ||||||
|     Kernel::KernelSystem& kernel; |     Kernel::KernelSystem& kernel; | ||||||
|  |     ARM_Interface* cpu; | ||||||
| 
 | 
 | ||||||
|     u32 next_thread_id = 1; |     u32 next_thread_id = 1; | ||||||
|     SharedPtr<Thread> current_thread; |     SharedPtr<Thread> current_thread; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue