diff options
| author | 2018-05-19 16:57:44 -0500 | |
|---|---|---|
| committer | 2018-05-19 16:57:44 -0500 | |
| commit | c74f2555b61fb411b4c3a0a54afecfee7f58b63d (patch) | |
| tree | d61a7e8d482796502932845b867f1082ca4af727 /src/core/hle/kernel/svc.cpp | |
| parent | SVC: Removed unused WaitSynchronization1 function (diff) | |
| download | yuzu-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.cpp | 8 |
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 | } |