mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #1257 from lioncash/process
core: Migrate current_process pointer to the kernel
This commit is contained in:
		
						commit
						460ebc8187
					
				| @ -136,7 +136,7 @@ struct System::Impl { | |||||||
|         if (virtual_filesystem == nullptr) |         if (virtual_filesystem == nullptr) | ||||||
|             virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); |             virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); | ||||||
| 
 | 
 | ||||||
|         current_process = Kernel::Process::Create(kernel, "main"); |         kernel.MakeCurrentProcess(Kernel::Process::Create(kernel, "main")); | ||||||
| 
 | 
 | ||||||
|         cpu_barrier = std::make_shared<CpuBarrier>(); |         cpu_barrier = std::make_shared<CpuBarrier>(); | ||||||
|         cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); |         cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); | ||||||
| @ -202,7 +202,7 @@ struct System::Impl { | |||||||
|             return init_result; |             return init_result; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const Loader::ResultStatus load_result{app_loader->Load(current_process)}; |         const Loader::ResultStatus load_result{app_loader->Load(kernel.CurrentProcess())}; | ||||||
|         if (load_result != Loader::ResultStatus::Success) { |         if (load_result != Loader::ResultStatus::Success) { | ||||||
|             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); |             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); | ||||||
|             Shutdown(); |             Shutdown(); | ||||||
| @ -281,7 +281,6 @@ struct System::Impl { | |||||||
|     std::unique_ptr<VideoCore::RendererBase> renderer; |     std::unique_ptr<VideoCore::RendererBase> renderer; | ||||||
|     std::unique_ptr<Tegra::GPU> gpu_core; |     std::unique_ptr<Tegra::GPU> gpu_core; | ||||||
|     std::shared_ptr<Tegra::DebugContext> debug_context; |     std::shared_ptr<Tegra::DebugContext> debug_context; | ||||||
|     Kernel::SharedPtr<Kernel::Process> current_process; |  | ||||||
|     std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor; |     std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor; | ||||||
|     std::shared_ptr<CpuBarrier> cpu_barrier; |     std::shared_ptr<CpuBarrier> cpu_barrier; | ||||||
|     std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores; |     std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores; | ||||||
| @ -363,7 +362,11 @@ const std::shared_ptr<Kernel::Scheduler>& System::Scheduler(size_t core_index) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() { | Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() { | ||||||
|     return impl->current_process; |     return impl->kernel.CurrentProcess(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() const { | ||||||
|  |     return impl->kernel.CurrentProcess(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ARM_Interface& System::ArmInterface(size_t core_index) { | ARM_Interface& System::ArmInterface(size_t core_index) { | ||||||
|  | |||||||
| @ -174,9 +174,12 @@ public: | |||||||
|     /// Gets the scheduler for the CPU core with the specified index
 |     /// Gets the scheduler for the CPU core with the specified index
 | ||||||
|     const std::shared_ptr<Kernel::Scheduler>& Scheduler(size_t core_index); |     const std::shared_ptr<Kernel::Scheduler>& Scheduler(size_t core_index); | ||||||
| 
 | 
 | ||||||
|     /// Gets the current process
 |     /// Provides a reference to the current process
 | ||||||
|     Kernel::SharedPtr<Kernel::Process>& CurrentProcess(); |     Kernel::SharedPtr<Kernel::Process>& CurrentProcess(); | ||||||
| 
 | 
 | ||||||
|  |     /// Provides a constant reference to the current process.
 | ||||||
|  |     const Kernel::SharedPtr<Kernel::Process>& CurrentProcess() const; | ||||||
|  | 
 | ||||||
|     /// Provides a reference to the kernel instance.
 |     /// Provides a reference to the kernel instance.
 | ||||||
|     Kernel::KernelCore& Kernel(); |     Kernel::KernelCore& Kernel(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -116,6 +116,7 @@ struct KernelCore::Impl { | |||||||
|         next_thread_id = 1; |         next_thread_id = 1; | ||||||
| 
 | 
 | ||||||
|         process_list.clear(); |         process_list.clear(); | ||||||
|  |         current_process.reset(); | ||||||
| 
 | 
 | ||||||
|         handle_table.Clear(); |         handle_table.Clear(); | ||||||
|         resource_limits.fill(nullptr); |         resource_limits.fill(nullptr); | ||||||
| @ -206,6 +207,7 @@ struct KernelCore::Impl { | |||||||
| 
 | 
 | ||||||
|     // Lists all processes that exist in the current session.
 |     // Lists all processes that exist in the current session.
 | ||||||
|     std::vector<SharedPtr<Process>> process_list; |     std::vector<SharedPtr<Process>> process_list; | ||||||
|  |     SharedPtr<Process> current_process; | ||||||
| 
 | 
 | ||||||
|     Kernel::HandleTable handle_table; |     Kernel::HandleTable handle_table; | ||||||
|     std::array<SharedPtr<ResourceLimit>, 4> resource_limits; |     std::array<SharedPtr<ResourceLimit>, 4> resource_limits; | ||||||
| @ -264,6 +266,18 @@ void KernelCore::AppendNewProcess(SharedPtr<Process> process) { | |||||||
|     impl->process_list.push_back(std::move(process)); |     impl->process_list.push_back(std::move(process)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void KernelCore::MakeCurrentProcess(SharedPtr<Process> process) { | ||||||
|  |     impl->current_process = std::move(process); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SharedPtr<Process>& KernelCore::CurrentProcess() { | ||||||
|  |     return impl->current_process; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const SharedPtr<Process>& KernelCore::CurrentProcess() const { | ||||||
|  |     return impl->current_process; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { | void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { | ||||||
|     impl->named_ports.emplace(std::move(name), std::move(port)); |     impl->named_ports.emplace(std::move(name), std::move(port)); | ||||||
| } | } | ||||||
|  | |||||||
| @ -65,6 +65,15 @@ public: | |||||||
|     /// Adds the given shared pointer to an internal list of active processes.
 |     /// Adds the given shared pointer to an internal list of active processes.
 | ||||||
|     void AppendNewProcess(SharedPtr<Process> process); |     void AppendNewProcess(SharedPtr<Process> process); | ||||||
| 
 | 
 | ||||||
|  |     /// Makes the given process the new current process.
 | ||||||
|  |     void MakeCurrentProcess(SharedPtr<Process> process); | ||||||
|  | 
 | ||||||
|  |     /// Retrieves a reference to the current process.
 | ||||||
|  |     SharedPtr<Process>& CurrentProcess(); | ||||||
|  | 
 | ||||||
|  |     /// Retrieves a const reference to the current process.
 | ||||||
|  |     const SharedPtr<Process>& CurrentProcess() const; | ||||||
|  | 
 | ||||||
|     /// Adds a port to the named port table
 |     /// Adds a port to the named port table
 | ||||||
|     void AddNamedPort(std::string name, SharedPtr<ClientPort> port); |     void AddNamedPort(std::string name, SharedPtr<ClientPort> port); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei