forked from suyu/suyu
threading: Reschedule only on cores that are necessary.
This commit is contained in:
parent
d6e3cd9a17
commit
8aa5d25f82
4 changed files with 10 additions and 3 deletions
|
@ -141,6 +141,11 @@ ARM_Interface& System::ArmInterface(size_t core_index) {
|
|||
return cpu_cores[core_index]->ArmInterface();
|
||||
}
|
||||
|
||||
Cpu& System::CpuCore(size_t core_index) {
|
||||
ASSERT(core_index < NUM_CPU_CORES);
|
||||
return *cpu_cores[core_index];
|
||||
}
|
||||
|
||||
System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
|
||||
NGLOG_DEBUG(HW_Memory, "initialized OK");
|
||||
|
||||
|
|
|
@ -114,6 +114,8 @@ public:
|
|||
|
||||
ARM_Interface& ArmInterface(size_t core_index);
|
||||
|
||||
Cpu& CpuCore(size_t core_index);
|
||||
|
||||
Tegra::GPU& GPU() {
|
||||
return *gpu_core;
|
||||
}
|
||||
|
|
|
@ -625,7 +625,7 @@ static ResultCode WaitProcessWideKeyAtomic(VAddr mutex_addr, VAddr condition_var
|
|||
|
||||
// Note: Deliberately don't attempt to inherit the lock owner's priority.
|
||||
|
||||
Core::System::GetInstance().PrepareReschedule();
|
||||
Core::System::GetInstance().CpuCore(current_thread->processor_id).PrepareReschedule();
|
||||
return RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -678,7 +678,7 @@ static ResultCode SignalProcessWideKey(VAddr condition_variable_addr, s32 target
|
|||
|
||||
owner->AddMutexWaiter(thread);
|
||||
|
||||
Core::System::GetInstance().PrepareReschedule();
|
||||
Core::System::GetInstance().CpuCore(thread->processor_id).PrepareReschedule();
|
||||
}
|
||||
|
||||
++processed;
|
||||
|
|
|
@ -189,7 +189,7 @@ void Thread::ResumeFromWait() {
|
|||
|
||||
status = THREADSTATUS_READY;
|
||||
scheduler->ScheduleThread(this, current_priority);
|
||||
Core::System::GetInstance().PrepareReschedule();
|
||||
Core::System::GetInstance().CpuCore(processor_id).PrepareReschedule();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue