mirror of https://git.suyu.dev/suyu/suyu
Merge pull request #3363 from lioncash/unique_ptr
kernel/physical_core: Make use of std::unique_ptr instead of std::shared_ptr
This commit is contained in:
commit
6b5b01b29f
|
@ -2,14 +2,12 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include "common/assert.h"
|
|
||||||
#include "core/arm/exclusive_monitor.h"
|
#include "core/arm/exclusive_monitor.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/core_manager.h"
|
#include "core/core_manager.h"
|
||||||
#include "core/core_timing.h"
|
#include "core/core_timing.h"
|
||||||
#include "core/cpu_manager.h"
|
#include "core/cpu_manager.h"
|
||||||
#include "core/gdbstub/gdbstub.h"
|
#include "core/gdbstub/gdbstub.h"
|
||||||
#include "core/settings.h"
|
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ struct KernelCore::Impl {
|
||||||
void Initialize(KernelCore& kernel) {
|
void Initialize(KernelCore& kernel) {
|
||||||
Shutdown();
|
Shutdown();
|
||||||
|
|
||||||
InitializePhysicalCores(kernel);
|
InitializePhysicalCores();
|
||||||
InitializeSystemResourceLimit(kernel);
|
InitializeSystemResourceLimit(kernel);
|
||||||
InitializeThreads();
|
InitializeThreads();
|
||||||
InitializePreemption();
|
InitializePreemption();
|
||||||
|
@ -131,14 +131,14 @@ struct KernelCore::Impl {
|
||||||
}
|
}
|
||||||
cores.clear();
|
cores.clear();
|
||||||
|
|
||||||
exclusive_monitor.reset(nullptr);
|
exclusive_monitor.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializePhysicalCores(KernelCore& kernel) {
|
void InitializePhysicalCores() {
|
||||||
exclusive_monitor =
|
exclusive_monitor =
|
||||||
Core::MakeExclusiveMonitor(system.Memory(), global_scheduler.CpuCoresCount());
|
Core::MakeExclusiveMonitor(system.Memory(), global_scheduler.CpuCoresCount());
|
||||||
for (std::size_t i = 0; i < global_scheduler.CpuCoresCount(); i++) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,24 +10,23 @@
|
||||||
#include "core/arm/exclusive_monitor.h"
|
#include "core/arm/exclusive_monitor.h"
|
||||||
#include "core/arm/unicorn/arm_unicorn.h"
|
#include "core/arm/unicorn/arm_unicorn.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/hle/kernel/kernel.h"
|
|
||||||
#include "core/hle/kernel/physical_core.h"
|
#include "core/hle/kernel/physical_core.h"
|
||||||
#include "core/hle/kernel/scheduler.h"
|
#include "core/hle/kernel/scheduler.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
|
|
||||||
namespace Kernel {
|
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::ExclusiveMonitor& exclusive_monitor)
|
||||||
: core_index{id}, kernel{kernel} {
|
: core_index{id} {
|
||||||
#ifdef ARCHITECTURE_x86_64
|
#ifdef ARCHITECTURE_x86_64
|
||||||
arm_interface = std::make_shared<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
arm_interface = std::make_unique<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
||||||
#else
|
#else
|
||||||
arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
|
arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
|
||||||
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
scheduler = std::make_shared<Kernel::Scheduler>(system, *arm_interface, core_index);
|
scheduler = std::make_unique<Kernel::Scheduler>(system, *arm_interface, core_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicalCore::~PhysicalCore() = default;
|
PhysicalCore::~PhysicalCore() = default;
|
||||||
|
|
|
@ -21,11 +21,15 @@ namespace Kernel {
|
||||||
|
|
||||||
class PhysicalCore {
|
class PhysicalCore {
|
||||||
public:
|
public:
|
||||||
PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id,
|
PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor);
|
||||||
Core::ExclusiveMonitor& exclusive_monitor);
|
|
||||||
|
|
||||||
~PhysicalCore();
|
~PhysicalCore();
|
||||||
|
|
||||||
|
PhysicalCore(const PhysicalCore&) = delete;
|
||||||
|
PhysicalCore& operator=(const PhysicalCore&) = delete;
|
||||||
|
|
||||||
|
PhysicalCore(PhysicalCore&&) = default;
|
||||||
|
PhysicalCore& operator=(PhysicalCore&&) = default;
|
||||||
|
|
||||||
/// Execute current jit state
|
/// Execute current jit state
|
||||||
void Run();
|
void Run();
|
||||||
/// Execute a single instruction in current jit.
|
/// Execute a single instruction in current jit.
|
||||||
|
@ -66,9 +70,8 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::size_t core_index;
|
std::size_t core_index;
|
||||||
KernelCore& kernel;
|
std::unique_ptr<Core::ARM_Interface> arm_interface;
|
||||||
std::shared_ptr<Core::ARM_Interface> arm_interface;
|
std::unique_ptr<Kernel::Scheduler> scheduler;
|
||||||
std::shared_ptr<Kernel::Scheduler> scheduler;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
Loading…
Reference in New Issue