diff options
Diffstat (limited to 'src/core/cpu_manager.cpp')
| -rw-r--r-- | src/core/cpu_manager.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp index 8f04fb8f5..c35438c6f 100644 --- a/src/core/cpu_manager.cpp +++ b/src/core/cpu_manager.cpp | |||
| @@ -111,7 +111,7 @@ void CpuManager::MultiCoreRunGuestThread() { | |||
| 111 | auto& kernel = system.Kernel(); | 111 | auto& kernel = system.Kernel(); |
| 112 | kernel.CurrentScheduler()->OnThreadStart(); | 112 | kernel.CurrentScheduler()->OnThreadStart(); |
| 113 | auto* thread = kernel.CurrentScheduler()->GetCurrentThread(); | 113 | auto* thread = kernel.CurrentScheduler()->GetCurrentThread(); |
| 114 | auto& host_context = thread->GetHostContext(); | 114 | auto host_context = thread->GetHostContext(); |
| 115 | host_context->SetRewindPoint(GuestRewindFunction, this); | 115 | host_context->SetRewindPoint(GuestRewindFunction, this); |
| 116 | MultiCoreRunGuestLoop(); | 116 | MultiCoreRunGuestLoop(); |
| 117 | } | 117 | } |
| @@ -148,7 +148,8 @@ void CpuManager::MultiCoreRunSuspendThread() { | |||
| 148 | auto core = kernel.GetCurrentHostThreadID(); | 148 | auto core = kernel.GetCurrentHostThreadID(); |
| 149 | auto& scheduler = *kernel.CurrentScheduler(); | 149 | auto& scheduler = *kernel.CurrentScheduler(); |
| 150 | Kernel::KThread* current_thread = scheduler.GetCurrentThread(); | 150 | Kernel::KThread* current_thread = scheduler.GetCurrentThread(); |
| 151 | Common::Fiber::YieldTo(current_thread->GetHostContext(), core_data[core].host_context); | 151 | Common::Fiber::YieldTo(current_thread->GetHostContext(), |
| 152 | core_data[core].host_context.get()); | ||
| 152 | ASSERT(scheduler.ContextSwitchPending()); | 153 | ASSERT(scheduler.ContextSwitchPending()); |
| 153 | ASSERT(core == kernel.GetCurrentHostThreadID()); | 154 | ASSERT(core == kernel.GetCurrentHostThreadID()); |
| 154 | scheduler.RescheduleCurrentCore(); | 155 | scheduler.RescheduleCurrentCore(); |
| @@ -201,7 +202,7 @@ void CpuManager::SingleCoreRunGuestThread() { | |||
| 201 | auto& kernel = system.Kernel(); | 202 | auto& kernel = system.Kernel(); |
| 202 | kernel.CurrentScheduler()->OnThreadStart(); | 203 | kernel.CurrentScheduler()->OnThreadStart(); |
| 203 | auto* thread = kernel.CurrentScheduler()->GetCurrentThread(); | 204 | auto* thread = kernel.CurrentScheduler()->GetCurrentThread(); |
| 204 | auto& host_context = thread->GetHostContext(); | 205 | auto host_context = thread->GetHostContext(); |
| 205 | host_context->SetRewindPoint(GuestRewindFunction, this); | 206 | host_context->SetRewindPoint(GuestRewindFunction, this); |
| 206 | SingleCoreRunGuestLoop(); | 207 | SingleCoreRunGuestLoop(); |
| 207 | } | 208 | } |
| @@ -245,7 +246,7 @@ void CpuManager::SingleCoreRunSuspendThread() { | |||
| 245 | auto core = kernel.GetCurrentHostThreadID(); | 246 | auto core = kernel.GetCurrentHostThreadID(); |
| 246 | auto& scheduler = *kernel.CurrentScheduler(); | 247 | auto& scheduler = *kernel.CurrentScheduler(); |
| 247 | Kernel::KThread* current_thread = scheduler.GetCurrentThread(); | 248 | Kernel::KThread* current_thread = scheduler.GetCurrentThread(); |
| 248 | Common::Fiber::YieldTo(current_thread->GetHostContext(), core_data[0].host_context); | 249 | Common::Fiber::YieldTo(current_thread->GetHostContext(), core_data[0].host_context.get()); |
| 249 | ASSERT(scheduler.ContextSwitchPending()); | 250 | ASSERT(scheduler.ContextSwitchPending()); |
| 250 | ASSERT(core == kernel.GetCurrentHostThreadID()); | 251 | ASSERT(core == kernel.GetCurrentHostThreadID()); |
| 251 | scheduler.RescheduleCurrentCore(); | 252 | scheduler.RescheduleCurrentCore(); |
| @@ -363,7 +364,7 @@ void CpuManager::RunThread(std::size_t core) { | |||
| 363 | 364 | ||
| 364 | auto current_thread = system.Kernel().CurrentScheduler()->GetCurrentThread(); | 365 | auto current_thread = system.Kernel().CurrentScheduler()->GetCurrentThread(); |
| 365 | data.is_running = true; | 366 | data.is_running = true; |
| 366 | Common::Fiber::YieldTo(data.host_context, current_thread->GetHostContext()); | 367 | Common::Fiber::YieldTo(data.host_context.get(), current_thread->GetHostContext()); |
| 367 | data.is_running = false; | 368 | data.is_running = false; |
| 368 | data.is_paused = true; | 369 | data.is_paused = true; |
| 369 | data.exit_barrier->Wait(); | 370 | data.exit_barrier->Wait(); |