summaryrefslogtreecommitdiff
path: root/src/core/cpu_manager.h
diff options
context:
space:
mode:
authorGravatar Fernando S2022-06-16 02:41:12 +0200
committerGravatar GitHub2022-06-16 02:41:12 +0200
commitf86b770ff75efff029fa82b959b3f33eca1750fe (patch)
tree8c1aa046c96d7f943288ecb3455f4091cdc31a09 /src/core/cpu_manager.h
parentMerge pull request #8460 from Morph1984/bounded-q (diff)
parentkernel: implement KProcess suspension (diff)
downloadyuzu-f86b770ff75efff029fa82b959b3f33eca1750fe.tar.gz
yuzu-f86b770ff75efff029fa82b959b3f33eca1750fe.tar.xz
yuzu-f86b770ff75efff029fa82b959b3f33eca1750fe.zip
Merge pull request #8457 from liamwhite/kprocess-suspend
kernel: implement KProcess suspension
Diffstat (limited to 'src/core/cpu_manager.h')
-rw-r--r--src/core/cpu_manager.h19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/core/cpu_manager.h b/src/core/cpu_manager.h
index ddd9691ca..681bdaf19 100644
--- a/src/core/cpu_manager.h
+++ b/src/core/cpu_manager.h
@@ -46,12 +46,10 @@ public:
46 void Initialize(); 46 void Initialize();
47 void Shutdown(); 47 void Shutdown();
48 48
49 void Pause(bool paused);
50
51 static std::function<void(void*)> GetGuestThreadStartFunc(); 49 static std::function<void(void*)> GetGuestThreadStartFunc();
52 static std::function<void(void*)> GetIdleThreadStartFunc(); 50 static std::function<void(void*)> GetIdleThreadStartFunc();
53 static std::function<void(void*)> GetSuspendThreadStartFunc(); 51 static std::function<void(void*)> GetShutdownThreadStartFunc();
54 void* GetStartFuncParamater(); 52 void* GetStartFuncParameter();
55 53
56 void PreemptSingleCore(bool from_running_enviroment = true); 54 void PreemptSingleCore(bool from_running_enviroment = true);
57 55
@@ -63,38 +61,33 @@ private:
63 static void GuestThreadFunction(void* cpu_manager); 61 static void GuestThreadFunction(void* cpu_manager);
64 static void GuestRewindFunction(void* cpu_manager); 62 static void GuestRewindFunction(void* cpu_manager);
65 static void IdleThreadFunction(void* cpu_manager); 63 static void IdleThreadFunction(void* cpu_manager);
66 static void SuspendThreadFunction(void* cpu_manager); 64 static void ShutdownThreadFunction(void* cpu_manager);
67 65
68 void MultiCoreRunGuestThread(); 66 void MultiCoreRunGuestThread();
69 void MultiCoreRunGuestLoop(); 67 void MultiCoreRunGuestLoop();
70 void MultiCoreRunIdleThread(); 68 void MultiCoreRunIdleThread();
71 void MultiCoreRunSuspendThread();
72 69
73 void SingleCoreRunGuestThread(); 70 void SingleCoreRunGuestThread();
74 void SingleCoreRunGuestLoop(); 71 void SingleCoreRunGuestLoop();
75 void SingleCoreRunIdleThread(); 72 void SingleCoreRunIdleThread();
76 void SingleCoreRunSuspendThread();
77 73
78 static void ThreadStart(std::stop_token stop_token, CpuManager& cpu_manager, std::size_t core); 74 static void ThreadStart(std::stop_token stop_token, CpuManager& cpu_manager, std::size_t core);
79 75
80 void RunThread(std::stop_token stop_token, std::size_t core); 76 void ShutdownThread();
77 void RunThread(std::size_t core);
81 78
82 struct CoreData { 79 struct CoreData {
83 std::shared_ptr<Common::Fiber> host_context; 80 std::shared_ptr<Common::Fiber> host_context;
84 std::jthread host_thread; 81 std::jthread host_thread;
85 }; 82 };
86 83
87 std::atomic<bool> running_mode{};
88 std::atomic<bool> pause_state{};
89 std::unique_ptr<Common::Barrier> pause_barrier{};
90 std::mutex pause_lock{};
91
92 std::array<CoreData, Core::Hardware::NUM_CPU_CORES> core_data{}; 84 std::array<CoreData, Core::Hardware::NUM_CPU_CORES> core_data{};
93 85
94 bool is_async_gpu{}; 86 bool is_async_gpu{};
95 bool is_multicore{}; 87 bool is_multicore{};
96 std::atomic<std::size_t> current_core{}; 88 std::atomic<std::size_t> current_core{};
97 std::size_t idle_count{}; 89 std::size_t idle_count{};
90 std::size_t num_cores{};
98 static constexpr std::size_t max_cycle_runs = 5; 91 static constexpr std::size_t max_cycle_runs = 5;
99 92
100 System& system; 93 System& system;