summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
diff options
context:
space:
mode:
authorGravatar Subv2018-05-19 16:57:44 -0500
committerGravatar Subv2018-05-19 16:57:44 -0500
commitc74f2555b61fb411b4c3a0a54afecfee7f58b63d (patch)
treed61a7e8d482796502932845b867f1082ca4af727 /src/core/hle/kernel/svc.cpp
parentSVC: Removed unused WaitSynchronization1 function (diff)
downloadyuzu-c74f2555b61fb411b4c3a0a54afecfee7f58b63d.tar.gz
yuzu-c74f2555b61fb411b4c3a0a54afecfee7f58b63d.tar.xz
yuzu-c74f2555b61fb411b4c3a0a54afecfee7f58b63d.zip
Kernel/Threads: Reschedule the proper core when operating on that core's threads.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
-rw-r--r--src/core/hle/kernel/svc.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 1eb1b8fbf..810ef66aa 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -202,7 +202,7 @@ static ResultCode WaitSynchronization(Handle* index, VAddr handles_address, u64
202 thread->WakeAfterDelay(nano_seconds); 202 thread->WakeAfterDelay(nano_seconds);
203 thread->wakeup_callback = DefaultThreadWakeupCallback; 203 thread->wakeup_callback = DefaultThreadWakeupCallback;
204 204
205 Core::System::GetInstance().PrepareReschedule(); 205 Core::System::GetInstance().CpuCore(thread->processor_id).PrepareReschedule();
206 206
207 return RESULT_TIMEOUT; 207 return RESULT_TIMEOUT;
208} 208}
@@ -365,7 +365,7 @@ static ResultCode SetThreadPriority(Handle handle, u32 priority) {
365 365
366 thread->SetPriority(priority); 366 thread->SetPriority(priority);
367 367
368 Core::System::GetInstance().PrepareReschedule(); 368 Core::System::GetInstance().CpuCore(thread->processor_id).PrepareReschedule();
369 return RESULT_SUCCESS; 369 return RESULT_SUCCESS;
370} 370}
371 371
@@ -522,6 +522,7 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V
522 *out_handle = thread->guest_handle; 522 *out_handle = thread->guest_handle;
523 523
524 Core::System::GetInstance().PrepareReschedule(); 524 Core::System::GetInstance().PrepareReschedule();
525 Core::System::GetInstance().CpuCore(thread->processor_id).PrepareReschedule();
525 526
526 NGLOG_TRACE(Kernel_SVC, 527 NGLOG_TRACE(Kernel_SVC,
527 "called entrypoint=0x{:08X} ({}), arg=0x{:08X}, stacktop=0x{:08X}, " 528 "called entrypoint=0x{:08X} ({}), arg=0x{:08X}, stacktop=0x{:08X}, "
@@ -540,7 +541,10 @@ static ResultCode StartThread(Handle thread_handle) {
540 return ERR_INVALID_HANDLE; 541 return ERR_INVALID_HANDLE;
541 } 542 }
542 543
544 ASSERT(thread->status == THREADSTATUS_DORMANT);
545
543 thread->ResumeFromWait(); 546 thread->ResumeFromWait();
547 Core::System::GetInstance().CpuCore(thread->processor_id).PrepareReschedule();
544 548
545 return RESULT_SUCCESS; 549 return RESULT_SUCCESS;
546} 550}