|
|
@@ -117,17 +117,18 @@ void CpuManager::MultiCoreRunGuestLoop() {
|
|
|
physical_core = &kernel.CurrentPhysicalCore();
|
|
|
}
|
|
|
system.ExitDynarmicProfile();
|
|
|
- physical_core->ArmInterface().ClearExclusiveState();
|
|
|
- kernel.CurrentScheduler()->RescheduleCurrentCore();
|
|
|
+ {
|
|
|
+ Kernel::KScopedDisableDispatch dd(kernel);
|
|
|
+ physical_core->ArmInterface().ClearExclusiveState();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void CpuManager::MultiCoreRunIdleThread() {
|
|
|
auto& kernel = system.Kernel();
|
|
|
while (true) {
|
|
|
- auto& physical_core = kernel.CurrentPhysicalCore();
|
|
|
- physical_core.Idle();
|
|
|
- kernel.CurrentScheduler()->RescheduleCurrentCore();
|
|
|
+ Kernel::KScopedDisableDispatch dd(kernel);
|
|
|
+ kernel.CurrentPhysicalCore().Idle();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -135,12 +136,12 @@ void CpuManager::MultiCoreRunSuspendThread() {
|
|
|
auto& kernel = system.Kernel();
|
|
|
kernel.CurrentScheduler()->OnThreadStart();
|
|
|
while (true) {
|
|
|
- auto core = kernel.GetCurrentHostThreadID();
|
|
|
+ auto core = kernel.CurrentPhysicalCoreIndex();
|
|
|
auto& scheduler = *kernel.CurrentScheduler();
|
|
|
Kernel::KThread* current_thread = scheduler.GetCurrentThread();
|
|
|
Common::Fiber::YieldTo(current_thread->GetHostContext(), *core_data[core].host_context);
|
|
|
ASSERT(scheduler.ContextSwitchPending());
|
|
|
- ASSERT(core == kernel.GetCurrentHostThreadID());
|
|
|
+ ASSERT(core == kernel.CurrentPhysicalCoreIndex());
|
|
|
scheduler.RescheduleCurrentCore();
|
|
|
}
|
|
|
}
|