mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Merge pull request #1399 from lioncash/sched
kernel/scheduler: Take ARM_Interface instances by reference
This commit is contained in:
		| @@ -17,7 +17,7 @@ namespace Kernel { | ||||
|  | ||||
| std::mutex Scheduler::scheduler_mutex; | ||||
|  | ||||
| Scheduler::Scheduler(Core::ARM_Interface* cpu_core) : cpu_core(cpu_core) {} | ||||
| Scheduler::Scheduler(Core::ARM_Interface& cpu_core) : cpu_core(cpu_core) {} | ||||
|  | ||||
| Scheduler::~Scheduler() { | ||||
|     for (auto& thread : thread_list) { | ||||
| @@ -59,9 +59,9 @@ void Scheduler::SwitchContext(Thread* new_thread) { | ||||
|     // Save context for previous thread | ||||
|     if (previous_thread) { | ||||
|         previous_thread->last_running_ticks = CoreTiming::GetTicks(); | ||||
|         cpu_core->SaveContext(previous_thread->context); | ||||
|         cpu_core.SaveContext(previous_thread->context); | ||||
|         // Save the TPIDR_EL0 system register in case it was modified. | ||||
|         previous_thread->tpidr_el0 = cpu_core->GetTPIDR_EL0(); | ||||
|         previous_thread->tpidr_el0 = cpu_core.GetTPIDR_EL0(); | ||||
|  | ||||
|         if (previous_thread->status == ThreadStatus::Running) { | ||||
|             // This is only the case when a reschedule is triggered without the current thread | ||||
| @@ -91,10 +91,10 @@ void Scheduler::SwitchContext(Thread* new_thread) { | ||||
|             SetCurrentPageTable(&Core::CurrentProcess()->vm_manager.page_table); | ||||
|         } | ||||
|  | ||||
|         cpu_core->LoadContext(new_thread->context); | ||||
|         cpu_core->SetTlsAddress(new_thread->GetTLSAddress()); | ||||
|         cpu_core->SetTPIDR_EL0(new_thread->GetTPIDR_EL0()); | ||||
|         cpu_core->ClearExclusiveState(); | ||||
|         cpu_core.LoadContext(new_thread->context); | ||||
|         cpu_core.SetTlsAddress(new_thread->GetTLSAddress()); | ||||
|         cpu_core.SetTPIDR_EL0(new_thread->GetTPIDR_EL0()); | ||||
|         cpu_core.ClearExclusiveState(); | ||||
|     } else { | ||||
|         current_thread = nullptr; | ||||
|         // Note: We do not reset the current process and current page table when idling because | ||||
|   | ||||
| @@ -19,7 +19,7 @@ namespace Kernel { | ||||
|  | ||||
| class Scheduler final { | ||||
| public: | ||||
|     explicit Scheduler(Core::ARM_Interface* cpu_core); | ||||
|     explicit Scheduler(Core::ARM_Interface& cpu_core); | ||||
|     ~Scheduler(); | ||||
|  | ||||
|     /// Returns whether there are any threads that are ready to run. | ||||
| @@ -72,7 +72,7 @@ private: | ||||
|  | ||||
|     SharedPtr<Thread> current_thread = nullptr; | ||||
|  | ||||
|     Core::ARM_Interface* cpu_core; | ||||
|     Core::ARM_Interface& cpu_core; | ||||
|  | ||||
|     static std::mutex scheduler_mutex; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei