Browse Source

Merge pull request #12557 from merryhime/termination-ipi

KThread: Send termination interrupt to all cores a thread has affinity to
nce_cpp
liamwhite 2 years ago
committed by GitHub
parent
commit
37ce8e2509
  1. 8
      src/core/hle/kernel/k_thread.cpp

8
src/core/hle/kernel/k_thread.cpp

@ -1258,11 +1258,11 @@ ThreadState KThread::RequestTerminate() {
// Change the thread's priority to be higher than any system thread's. // Change the thread's priority to be higher than any system thread's.
this->IncreaseBasePriority(TerminatingThreadPriority); this->IncreaseBasePriority(TerminatingThreadPriority);
// If the thread is runnable, send a termination interrupt to other cores.
// If the thread is runnable, send a termination interrupt to cores it may be running on.
if (this->GetState() == ThreadState::Runnable) { if (this->GetState() == ThreadState::Runnable) {
if (const u64 core_mask = m_physical_affinity_mask.GetAffinityMask() &
~(1ULL << GetCurrentCoreId(m_kernel));
core_mask != 0) {
// NOTE: We do not mask the "current core", because this code may not actually be
// executing from the thread representing the "current core".
if (const u64 core_mask = m_physical_affinity_mask.GetAffinityMask(); core_mask != 0) {
Kernel::KInterruptManager::SendInterProcessorInterrupt(m_kernel, core_mask); Kernel::KInterruptManager::SendInterProcessorInterrupt(m_kernel, core_mask);
} }
} }

Loading…
Cancel
Save