summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_priority_queue.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_priority_queue.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_priority_queue.h b/src/core/hle/kernel/k_priority_queue.h
index f4d71ad7e..0b894c8cf 100644
--- a/src/core/hle/kernel/k_priority_queue.h
+++ b/src/core/hle/kernel/k_priority_queue.h
@@ -45,6 +45,7 @@ concept KPriorityQueueMember = !std::is_reference_v<T> && requires(T & t) {
{ t.GetActiveCore() } -> Common::ConvertibleTo<s32>;
{ t.GetPriority() } -> Common::ConvertibleTo<s32>;
+ { t.IsDummyThread() } -> Common::ConvertibleTo<bool>;
};
template <typename Member, size_t NumCores_, int LowestPriority, int HighestPriority>
@@ -349,24 +350,49 @@ public:
// Mutators.
constexpr void PushBack(Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
this->PushBack(member->GetPriority(), member);
}
constexpr void Remove(Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
this->Remove(member->GetPriority(), member);
}
constexpr void MoveToScheduledFront(Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
this->scheduled_queue.MoveToFront(member->GetPriority(), member->GetActiveCore(), member);
}
constexpr KThread* MoveToScheduledBack(Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return {};
+ }
+
return this->scheduled_queue.MoveToBack(member->GetPriority(), member->GetActiveCore(),
member);
}
// First class fancy operations.
constexpr void ChangePriority(s32 prev_priority, bool is_running, Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
ASSERT(IsValidPriority(prev_priority));
// Remove the member from the queues.
@@ -383,6 +409,11 @@ public:
constexpr void ChangeAffinityMask(s32 prev_core, const AffinityMaskType& prev_affinity,
Member* member) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
// Get the new information.
const s32 priority = member->GetPriority();
const AffinityMaskType& new_affinity = member->GetAffinityMask();
@@ -412,6 +443,11 @@ public:
}
constexpr void ChangeCore(s32 prev_core, Member* member, bool to_front = false) {
+ // This is for host (dummy) threads that we do not want to enter the priority queue.
+ if (member->IsDummyThread()) {
+ return;
+ }
+
// Get the new information.
const s32 new_core = member->GetActiveCore();
const s32 priority = member->GetPriority();