Browse Source
Merge pull request #7648 from bunnei/thread-pinning
Merge pull request #7648 from bunnei/thread-pinning
core: hle: kernel: Implement thread pinning.nce_cpp
committed by
GitHub
10 changed files with 140 additions and 14 deletions
-
2src/core/CMakeLists.txt
-
6src/core/hle/kernel/global_scheduler_context.cpp
-
34src/core/hle/kernel/k_interrupt_manager.cpp
-
17src/core/hle/kernel/k_interrupt_manager.h
-
12src/core/hle/kernel/k_process.cpp
-
4src/core/hle/kernel/k_process.h
-
8src/core/hle/kernel/k_scheduler.cpp
-
44src/core/hle/kernel/k_thread.cpp
-
6src/core/hle/kernel/k_thread.h
-
21src/core/hle/kernel/svc.cpp
@ -0,0 +1,34 @@ |
|||||
|
// Copyright 2021 yuzu Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "core/hle/kernel/k_interrupt_manager.h"
|
||||
|
#include "core/hle/kernel/k_process.h"
|
||||
|
#include "core/hle/kernel/k_scheduler.h"
|
||||
|
#include "core/hle/kernel/k_thread.h"
|
||||
|
#include "core/hle/kernel/kernel.h"
|
||||
|
|
||||
|
namespace Kernel::KInterruptManager { |
||||
|
|
||||
|
void HandleInterrupt(KernelCore& kernel, s32 core_id) { |
||||
|
auto* process = kernel.CurrentProcess(); |
||||
|
if (!process) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
auto& scheduler = kernel.Scheduler(core_id); |
||||
|
auto& current_thread = *scheduler.GetCurrentThread(); |
||||
|
|
||||
|
// If the user disable count is set, we may need to pin the current thread.
|
||||
|
if (current_thread.GetUserDisableCount() && !process->GetPinnedThread(core_id)) { |
||||
|
KScopedSchedulerLock sl{kernel}; |
||||
|
|
||||
|
// Pin the current thread.
|
||||
|
process->PinCurrentThread(core_id); |
||||
|
|
||||
|
// Set the interrupt flag for the thread.
|
||||
|
scheduler.GetCurrentThread()->SetInterruptFlag(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} // namespace Kernel::KInterruptManager
|
||||
@ -0,0 +1,17 @@ |
|||||
|
// Copyright 2021 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "common/common_types.h" |
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
class KernelCore; |
||||
|
|
||||
|
namespace KInterruptManager { |
||||
|
void HandleInterrupt(KernelCore& kernel, s32 core_id); |
||||
|
} |
||||
|
|
||||
|
} // namespace Kernel |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue