core: hle: kernel: k_interrupt_manager: HandleInterrupt should not depend on current process.

master
bunnei 2022-10-02 02:06:13 +07:00
parent 8d4e026d05
commit 79bcb38321
1 changed files with 9 additions and 12 deletions

@ -11,16 +11,12 @@
namespace Kernel::KInterruptManager { namespace Kernel::KInterruptManager {
void HandleInterrupt(KernelCore& kernel, s32 core_id) { void HandleInterrupt(KernelCore& kernel, s32 core_id) {
auto* process = kernel.CurrentProcess();
if (!process) {
return;
}
// Acknowledge the interrupt. // Acknowledge the interrupt.
kernel.PhysicalCore(core_id).ClearInterrupt(); kernel.PhysicalCore(core_id).ClearInterrupt();
auto& current_thread = GetCurrentThread(kernel); auto& current_thread = GetCurrentThread(kernel);
if (auto* process = kernel.CurrentProcess(); process) {
// If the user disable count is set, we may need to pin the current thread. // If the user disable count is set, we may need to pin the current thread.
if (current_thread.GetUserDisableCount() && !process->GetPinnedThread(core_id)) { if (current_thread.GetUserDisableCount() && !process->GetPinnedThread(core_id)) {
KScopedSchedulerLock sl{kernel}; KScopedSchedulerLock sl{kernel};
@ -31,6 +27,7 @@ void HandleInterrupt(KernelCore& kernel, s32 core_id) {
// Set the interrupt flag for the thread. // Set the interrupt flag for the thread.
GetCurrentThread(kernel).SetInterruptFlag(); GetCurrentThread(kernel).SetInterruptFlag();
} }
}
// Request interrupt scheduling. // Request interrupt scheduling.
kernel.CurrentScheduler()->RequestScheduleOnInterrupt(); kernel.CurrentScheduler()->RequestScheduleOnInterrupt();