kernel/thread: replace usage of Core::CPU()
This commit is contained in:
parent
b9f6bd9278
commit
276ca88c9e
|
@ -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;
|
||||||
|
|
Reference in New Issue