diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp index 752534868..70ddbdcca 100644 --- a/src/core/cpu_manager.cpp +++ b/src/core/cpu_manager.cpp @@ -2,14 +2,12 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include "common/assert.h" #include "core/arm/exclusive_monitor.h" #include "core/core.h" #include "core/core_manager.h" #include "core/core_timing.h" #include "core/cpu_manager.h" #include "core/gdbstub/gdbstub.h" -#include "core/settings.h" namespace Core { diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 0cf3c8f70..edd4c4259 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -101,7 +101,7 @@ struct KernelCore::Impl { void Initialize(KernelCore& kernel) { Shutdown(); - InitializePhysicalCores(kernel); + InitializePhysicalCores(); InitializeSystemResourceLimit(kernel); InitializeThreads(); InitializePreemption(); @@ -131,14 +131,14 @@ struct KernelCore::Impl { } cores.clear(); - exclusive_monitor.reset(nullptr); + exclusive_monitor.reset(); } - void InitializePhysicalCores(KernelCore& kernel) { + void InitializePhysicalCores() { exclusive_monitor = Core::MakeExclusiveMonitor(system.Memory(), global_scheduler.CpuCoresCount()); for (std::size_t i = 0; i < global_scheduler.CpuCoresCount(); i++) { - cores.emplace_back(system, kernel, i, *exclusive_monitor); + cores.emplace_back(system, i, *exclusive_monitor); } } diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp index 896a1a87a..9303dd273 100644 --- a/src/core/hle/kernel/physical_core.cpp +++ b/src/core/hle/kernel/physical_core.cpp @@ -10,24 +10,23 @@ #include "core/arm/exclusive_monitor.h" #include "core/arm/unicorn/arm_unicorn.h" #include "core/core.h" -#include "core/hle/kernel/kernel.h" #include "core/hle/kernel/physical_core.h" #include "core/hle/kernel/scheduler.h" #include "core/hle/kernel/thread.h" namespace Kernel { -PhysicalCore::PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id, +PhysicalCore::PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor) - : core_index{id}, kernel{kernel} { + : core_index{id} { #ifdef ARCHITECTURE_x86_64 - arm_interface = std::make_shared(system, exclusive_monitor, core_index); + arm_interface = std::make_unique(system, exclusive_monitor, core_index); #else arm_interface = std::make_shared(system); LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available"); #endif - scheduler = std::make_shared(system, *arm_interface, core_index); + scheduler = std::make_unique(system, *arm_interface, core_index); } PhysicalCore::~PhysicalCore() = default; diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h index fbef0801f..4c32c0f1b 100644 --- a/src/core/hle/kernel/physical_core.h +++ b/src/core/hle/kernel/physical_core.h @@ -21,11 +21,15 @@ namespace Kernel { class PhysicalCore { public: - PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id, - Core::ExclusiveMonitor& exclusive_monitor); - + PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor); ~PhysicalCore(); + PhysicalCore(const PhysicalCore&) = delete; + PhysicalCore& operator=(const PhysicalCore&) = delete; + + PhysicalCore(PhysicalCore&&) = default; + PhysicalCore& operator=(PhysicalCore&&) = default; + /// Execute current jit state void Run(); /// Execute a single instruction in current jit. @@ -66,9 +70,8 @@ public: private: std::size_t core_index; - KernelCore& kernel; - std::shared_ptr arm_interface; - std::shared_ptr scheduler; + std::unique_ptr arm_interface; + std::unique_ptr scheduler; }; } // namespace Kernel