diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/address_arbiter.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/event.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/mutex.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/semaphore.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/timer.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/svc.cpp | 22 |
7 files changed, 22 insertions, 20 deletions
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp index a1221766e..195286422 100644 --- a/src/core/hle/kernel/address_arbiter.cpp +++ b/src/core/hle/kernel/address_arbiter.cpp | |||
| @@ -79,6 +79,9 @@ ResultCode AddressArbiter::ArbitrateAddress(ArbitrationType type, VAddr address, | |||
| 79 | LOG_ERROR(Kernel, "unknown type=%d", type); | 79 | LOG_ERROR(Kernel, "unknown type=%d", type); |
| 80 | return ResultCode(ErrorDescription::InvalidEnumValue, ErrorModule::Kernel, ErrorSummary::WrongArgument, ErrorLevel::Usage); | 80 | return ResultCode(ErrorDescription::InvalidEnumValue, ErrorModule::Kernel, ErrorSummary::WrongArgument, ErrorLevel::Usage); |
| 81 | } | 81 | } |
| 82 | |||
| 83 | HLE::Reschedule(__func__); | ||
| 84 | |||
| 82 | return RESULT_SUCCESS; | 85 | return RESULT_SUCCESS; |
| 83 | } | 86 | } |
| 84 | 87 | ||
diff --git a/src/core/hle/kernel/event.cpp b/src/core/hle/kernel/event.cpp index f338f3266..e45deb1c6 100644 --- a/src/core/hle/kernel/event.cpp +++ b/src/core/hle/kernel/event.cpp | |||
| @@ -41,7 +41,10 @@ void Event::Acquire() { | |||
| 41 | 41 | ||
| 42 | void Event::Signal() { | 42 | void Event::Signal() { |
| 43 | signaled = true; | 43 | signaled = true; |
| 44 | |||
| 44 | WakeupAllWaitingThreads(); | 45 | WakeupAllWaitingThreads(); |
| 46 | |||
| 47 | HLE::Reschedule(__func__); | ||
| 45 | } | 48 | } |
| 46 | 49 | ||
| 47 | void Event::Clear() { | 50 | void Event::Clear() { |
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index f530217fd..6aa73df86 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp | |||
| @@ -94,6 +94,8 @@ void Mutex::Release() { | |||
| 94 | ResumeWaitingThread(this); | 94 | ResumeWaitingThread(this); |
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| 97 | |||
| 98 | HLE::Reschedule(__func__); | ||
| 97 | } | 99 | } |
| 98 | 100 | ||
| 99 | } // namespace | 101 | } // namespace |
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp index 5d6543ef4..dbb4c9b7f 100644 --- a/src/core/hle/kernel/semaphore.cpp +++ b/src/core/hle/kernel/semaphore.cpp | |||
| @@ -54,6 +54,8 @@ ResultVal<s32> Semaphore::Release(s32 release_count) { | |||
| 54 | Acquire(); | 54 | Acquire(); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | HLE::Reschedule(__func__); | ||
| 58 | |||
| 57 | return MakeResult<s32>(previous_count); | 59 | return MakeResult<s32>(previous_count); |
| 58 | } | 60 | } |
| 59 | 61 | ||
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index a5f1904d7..690d33b55 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -109,6 +109,8 @@ void Thread::Stop() { | |||
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | Kernel::g_current_process->used_tls_slots[tls_index] = false; | 111 | Kernel::g_current_process->used_tls_slots[tls_index] = false; |
| 112 | |||
| 113 | HLE::Reschedule(__func__); | ||
| 112 | } | 114 | } |
| 113 | 115 | ||
| 114 | Thread* ArbitrateHighestPriorityThread(u32 address) { | 116 | Thread* ArbitrateHighestPriorityThread(u32 address) { |
| @@ -232,6 +234,8 @@ static Thread* PopNextReadyThread() { | |||
| 232 | void WaitCurrentThread_Sleep() { | 234 | void WaitCurrentThread_Sleep() { |
| 233 | Thread* thread = GetCurrentThread(); | 235 | Thread* thread = GetCurrentThread(); |
| 234 | thread->status = THREADSTATUS_WAIT_SLEEP; | 236 | thread->status = THREADSTATUS_WAIT_SLEEP; |
| 237 | |||
| 238 | HLE::Reschedule(__func__); | ||
| 235 | } | 239 | } |
| 236 | 240 | ||
| 237 | void WaitCurrentThread_WaitSynchronization(std::vector<SharedPtr<WaitObject>> wait_objects, bool wait_set_output, bool wait_all) { | 241 | void WaitCurrentThread_WaitSynchronization(std::vector<SharedPtr<WaitObject>> wait_objects, bool wait_set_output, bool wait_all) { |
| @@ -431,6 +435,8 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 431 | ready_queue.push_back(thread->current_priority, thread.get()); | 435 | ready_queue.push_back(thread->current_priority, thread.get()); |
| 432 | thread->status = THREADSTATUS_READY; | 436 | thread->status = THREADSTATUS_READY; |
| 433 | 437 | ||
| 438 | HLE::Reschedule(__func__); | ||
| 439 | |||
| 434 | return MakeResult<SharedPtr<Thread>>(std::move(thread)); | 440 | return MakeResult<SharedPtr<Thread>>(std::move(thread)); |
| 435 | } | 441 | } |
| 436 | 442 | ||
diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp index e69fece65..25d066bf1 100644 --- a/src/core/hle/kernel/timer.cpp +++ b/src/core/hle/kernel/timer.cpp | |||
| @@ -52,10 +52,14 @@ void Timer::Set(s64 initial, s64 interval) { | |||
| 52 | u64 initial_microseconds = initial / 1000; | 52 | u64 initial_microseconds = initial / 1000; |
| 53 | CoreTiming::ScheduleEvent(usToCycles(initial_microseconds), | 53 | CoreTiming::ScheduleEvent(usToCycles(initial_microseconds), |
| 54 | timer_callback_event_type, callback_handle); | 54 | timer_callback_event_type, callback_handle); |
| 55 | |||
| 56 | HLE::Reschedule(__func__); | ||
| 55 | } | 57 | } |
| 56 | 58 | ||
| 57 | void Timer::Cancel() { | 59 | void Timer::Cancel() { |
| 58 | CoreTiming::UnscheduleEvent(timer_callback_event_type, callback_handle); | 60 | CoreTiming::UnscheduleEvent(timer_callback_event_type, callback_handle); |
| 61 | |||
| 62 | HLE::Reschedule(__func__); | ||
| 59 | } | 63 | } |
| 60 | 64 | ||
| 61 | void Timer::Clear() { | 65 | void Timer::Clear() { |
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 22adf9595..347d241f9 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp | |||
| @@ -290,9 +290,6 @@ static ResultCode ArbitrateAddress(Handle handle, u32 address, u32 type, u32 val | |||
| 290 | auto res = arbiter->ArbitrateAddress(static_cast<Kernel::ArbitrationType>(type), | 290 | auto res = arbiter->ArbitrateAddress(static_cast<Kernel::ArbitrationType>(type), |
| 291 | address, value, nanoseconds); | 291 | address, value, nanoseconds); |
| 292 | 292 | ||
| 293 | if (res == RESULT_SUCCESS) | ||
| 294 | HLE::Reschedule(__func__); | ||
| 295 | |||
| 296 | return res; | 293 | return res; |
| 297 | } | 294 | } |
| 298 | 295 | ||
| @@ -399,8 +396,6 @@ static ResultCode CreateThread(Handle* out_handle, s32 priority, u32 entry_point | |||
| 399 | "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", entry_point, | 396 | "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", entry_point, |
| 400 | name.c_str(), arg, stack_top, priority, processor_id, *out_handle); | 397 | name.c_str(), arg, stack_top, priority, processor_id, *out_handle); |
| 401 | 398 | ||
| 402 | HLE::Reschedule(__func__); | ||
| 403 | |||
| 404 | return RESULT_SUCCESS; | 399 | return RESULT_SUCCESS; |
| 405 | } | 400 | } |
| 406 | 401 | ||
| @@ -409,7 +404,6 @@ static void ExitThread() { | |||
| 409 | LOG_TRACE(Kernel_SVC, "called, pc=0x%08X", Core::g_app_core->GetPC()); | 404 | LOG_TRACE(Kernel_SVC, "called, pc=0x%08X", Core::g_app_core->GetPC()); |
| 410 | 405 | ||
| 411 | Kernel::GetCurrentThread()->Stop(); | 406 | Kernel::GetCurrentThread()->Stop(); |
| 412 | HLE::Reschedule(__func__); | ||
| 413 | } | 407 | } |
| 414 | 408 | ||
| 415 | /// Gets the priority for the specified thread | 409 | /// Gets the priority for the specified thread |
| @@ -439,11 +433,9 @@ static ResultCode CreateMutex(Handle* out_handle, u32 initial_locked) { | |||
| 439 | SharedPtr<Mutex> mutex = Mutex::Create(initial_locked != 0); | 433 | SharedPtr<Mutex> mutex = Mutex::Create(initial_locked != 0); |
| 440 | CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(mutex))); | 434 | CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(mutex))); |
| 441 | 435 | ||
| 442 | HLE::Reschedule(__func__); | ||
| 443 | |||
| 444 | LOG_TRACE(Kernel_SVC, "called initial_locked=%s : created handle=0x%08X", | 436 | LOG_TRACE(Kernel_SVC, "called initial_locked=%s : created handle=0x%08X", |
| 445 | initial_locked ? "true" : "false", *out_handle); | 437 | initial_locked ? "true" : "false", *out_handle); |
| 446 | 438 | ||
| 447 | return RESULT_SUCCESS; | 439 | return RESULT_SUCCESS; |
| 448 | } | 440 | } |
| 449 | 441 | ||
| @@ -459,8 +451,6 @@ static ResultCode ReleaseMutex(Handle handle) { | |||
| 459 | 451 | ||
| 460 | mutex->Release(); | 452 | mutex->Release(); |
| 461 | 453 | ||
| 462 | HLE::Reschedule(__func__); | ||
| 463 | |||
| 464 | return RESULT_SUCCESS; | 454 | return RESULT_SUCCESS; |
| 465 | } | 455 | } |
| 466 | 456 | ||
| @@ -528,8 +518,6 @@ static ResultCode ReleaseSemaphore(s32* count, Handle handle, s32 release_count) | |||
| 528 | 518 | ||
| 529 | CASCADE_RESULT(*count, semaphore->Release(release_count)); | 519 | CASCADE_RESULT(*count, semaphore->Release(release_count)); |
| 530 | 520 | ||
| 531 | HLE::Reschedule(__func__); | ||
| 532 | |||
| 533 | return RESULT_SUCCESS; | 521 | return RESULT_SUCCESS; |
| 534 | } | 522 | } |
| 535 | 523 | ||
| @@ -568,7 +556,7 @@ static ResultCode SignalEvent(Handle handle) { | |||
| 568 | return ERR_INVALID_HANDLE; | 556 | return ERR_INVALID_HANDLE; |
| 569 | 557 | ||
| 570 | evt->Signal(); | 558 | evt->Signal(); |
| 571 | HLE::Reschedule(__func__); | 559 | |
| 572 | return RESULT_SUCCESS; | 560 | return RESULT_SUCCESS; |
| 573 | } | 561 | } |
| 574 | 562 | ||
| @@ -623,8 +611,6 @@ static ResultCode SetTimer(Handle handle, s64 initial, s64 interval) { | |||
| 623 | 611 | ||
| 624 | timer->Set(initial, interval); | 612 | timer->Set(initial, interval); |
| 625 | 613 | ||
| 626 | HLE::Reschedule(__func__); | ||
| 627 | |||
| 628 | return RESULT_SUCCESS; | 614 | return RESULT_SUCCESS; |
| 629 | } | 615 | } |
| 630 | 616 | ||
| @@ -640,8 +626,6 @@ static ResultCode CancelTimer(Handle handle) { | |||
| 640 | 626 | ||
| 641 | timer->Cancel(); | 627 | timer->Cancel(); |
| 642 | 628 | ||
| 643 | HLE::Reschedule(__func__); | ||
| 644 | |||
| 645 | return RESULT_SUCCESS; | 629 | return RESULT_SUCCESS; |
| 646 | } | 630 | } |
| 647 | 631 | ||
| @@ -654,8 +638,6 @@ static void SleepThread(s64 nanoseconds) { | |||
| 654 | 638 | ||
| 655 | // Create an event to wake the thread up after the specified nanosecond delay has passed | 639 | // Create an event to wake the thread up after the specified nanosecond delay has passed |
| 656 | Kernel::GetCurrentThread()->WakeAfterDelay(nanoseconds); | 640 | Kernel::GetCurrentThread()->WakeAfterDelay(nanoseconds); |
| 657 | |||
| 658 | HLE::Reschedule(__func__); | ||
| 659 | } | 641 | } |
| 660 | 642 | ||
| 661 | /// This returns the total CPU ticks elapsed since the CPU was powered-on | 643 | /// This returns the total CPU ticks elapsed since the CPU was powered-on |