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) | ||||
|             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_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); | ||||
| @ -202,7 +202,7 @@ struct System::Impl { | ||||
|             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) { | ||||
|             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); | ||||
|             Shutdown(); | ||||
| @ -281,7 +281,6 @@ struct System::Impl { | ||||
|     std::unique_ptr<VideoCore::RendererBase> renderer; | ||||
|     std::unique_ptr<Tegra::GPU> gpu_core; | ||||
|     std::shared_ptr<Tegra::DebugContext> debug_context; | ||||
|     Kernel::SharedPtr<Kernel::Process> current_process; | ||||
|     std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor; | ||||
|     std::shared_ptr<CpuBarrier> cpu_barrier; | ||||
|     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() { | ||||
|     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) { | ||||
|  | ||||
| @ -174,9 +174,12 @@ public: | ||||
|     /// Gets the scheduler for the CPU core with the specified 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(); | ||||
| 
 | ||||
|     /// Provides a constant reference to the current process.
 | ||||
|     const Kernel::SharedPtr<Kernel::Process>& CurrentProcess() const; | ||||
| 
 | ||||
|     /// Provides a reference to the kernel instance.
 | ||||
|     Kernel::KernelCore& Kernel(); | ||||
| 
 | ||||
|  | ||||
| @ -116,6 +116,7 @@ struct KernelCore::Impl { | ||||
|         next_thread_id = 1; | ||||
| 
 | ||||
|         process_list.clear(); | ||||
|         current_process.reset(); | ||||
| 
 | ||||
|         handle_table.Clear(); | ||||
|         resource_limits.fill(nullptr); | ||||
| @ -206,6 +207,7 @@ struct KernelCore::Impl { | ||||
| 
 | ||||
|     // Lists all processes that exist in the current session.
 | ||||
|     std::vector<SharedPtr<Process>> process_list; | ||||
|     SharedPtr<Process> current_process; | ||||
| 
 | ||||
|     Kernel::HandleTable handle_table; | ||||
|     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)); | ||||
| } | ||||
| 
 | ||||
| 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) { | ||||
|     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.
 | ||||
|     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
 | ||||
|     void AddNamedPort(std::string name, SharedPtr<ClientPort> port); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei