diff options
author | Lioncash <mathew1800@gmail.com> | 2019-03-15 02:58:23 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-03-16 04:02:14 +0100 |
commit | db47d7e4716effb1021be3ebdc90763c3a53cafc (patch) | |
tree | fcdcf3d28b281aa6576badb61632ceb106e7b66a | |
parent | kernel/thread: Make bracing consistent within UpdatePriority() (diff) | |
download | yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar.gz yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar.bz2 yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar.lz yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar.xz yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.tar.zst yuzu-db47d7e4716effb1021be3ebdc90763c3a53cafc.zip |
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.h | 10 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index c5cee12dd..202997d20 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -303,7 +303,9 @@ void Thread::RemoveMutexWaiter(SharedPtr<Thread> thread) { } void Thread::UpdatePriority() { - // Find the highest priority among all the threads that are waiting for this thread's lock + // If any of the threads waiting on the mutex have a higher priority + // (taking into account priority inheritance), then this thread inherits + // that thread's priority. u32 new_priority = nominal_priority; if (!wait_mutex_threads.empty()) { if (wait_mutex_threads.front()->current_priority < new_priority) { diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index c48b21aba..96d9982d8 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -398,8 +398,14 @@ private: VAddr entry_point = 0; VAddr stack_top = 0; - u32 nominal_priority = 0; ///< Nominal thread priority, as set by the emulated application - u32 current_priority = 0; ///< Current thread priority, can be temporarily changed + /// Nominal thread priority, as set by the emulated application. + /// The nominal priority is the thread priority without priority + /// inheritance taken into account. + u32 nominal_priority = 0; + + /// Current thread priority. This may change over the course of the + /// thread's lifetime in order to facilitate priority inheritance. + u32 current_priority = 0; u64 total_cpu_time_ticks = 0; ///< Total CPU running ticks. u64 last_running_ticks = 0; ///< CPU tick when thread was last running |