kernel: match calls to Register and Unregister
This commit is contained in:
		| @@ -293,6 +293,7 @@ struct System::Impl { | ||||
|         ASSERT(Kernel::KProcess::Initialize(main_process, system, "main", | ||||
|                                             Kernel::KProcess::ProcessType::Userland, resource_limit) | ||||
|                    .IsSuccess()); | ||||
|         Kernel::KProcess::Register(system.Kernel(), main_process); | ||||
|         kernel.MakeApplicationProcess(main_process); | ||||
|         const auto [load_result, load_parameters] = app_loader->Load(*main_process, system); | ||||
|         if (load_result != Loader::ResultStatus::Success) { | ||||
|   | ||||
| @@ -182,8 +182,8 @@ public: | ||||
|     explicit KAutoObjectWithList(KernelCore& kernel) : KAutoObject(kernel) {} | ||||
|  | ||||
|     static int Compare(const KAutoObjectWithList& lhs, const KAutoObjectWithList& rhs) { | ||||
|         const u64 lid = lhs.GetId(); | ||||
|         const u64 rid = rhs.GetId(); | ||||
|         const uintptr_t lid = reinterpret_cast<uintptr_t>(std::addressof(lhs)); | ||||
|         const uintptr_t rid = reinterpret_cast<uintptr_t>(std::addressof(rhs)); | ||||
|  | ||||
|         if (lid < rid) { | ||||
|             return -1; | ||||
|   | ||||
| @@ -95,7 +95,7 @@ struct KernelCore::Impl { | ||||
|                                        pt_heap_region.GetSize()); | ||||
|         } | ||||
|  | ||||
|         InitializeHackSharedMemory(); | ||||
|         InitializeHackSharedMemory(kernel); | ||||
|         RegisterHostThread(nullptr); | ||||
|     } | ||||
|  | ||||
| @@ -216,10 +216,12 @@ struct KernelCore::Impl { | ||||
|             auto* main_thread{Kernel::KThread::Create(system.Kernel())}; | ||||
|             main_thread->SetCurrentCore(core); | ||||
|             ASSERT(Kernel::KThread::InitializeMainThread(system, main_thread, core).IsSuccess()); | ||||
|             KThread::Register(system.Kernel(), main_thread); | ||||
|  | ||||
|             auto* idle_thread{Kernel::KThread::Create(system.Kernel())}; | ||||
|             idle_thread->SetCurrentCore(core); | ||||
|             ASSERT(Kernel::KThread::InitializeIdleThread(system, idle_thread, core).IsSuccess()); | ||||
|             KThread::Register(system.Kernel(), idle_thread); | ||||
|  | ||||
|             schedulers[i]->Initialize(main_thread, idle_thread, core); | ||||
|         } | ||||
| @@ -230,6 +232,7 @@ struct KernelCore::Impl { | ||||
|                                        const Core::Timing::CoreTiming& core_timing) { | ||||
|         system_resource_limit = KResourceLimit::Create(system.Kernel()); | ||||
|         system_resource_limit->Initialize(&core_timing); | ||||
|         KResourceLimit::Register(kernel, system_resource_limit); | ||||
|  | ||||
|         const auto sizes{memory_layout->GetTotalAndKernelMemorySizes()}; | ||||
|         const auto total_size{sizes.first}; | ||||
| @@ -355,6 +358,7 @@ struct KernelCore::Impl { | ||||
|             ASSERT(KThread::InitializeHighPriorityThread(system, shutdown_threads[core_id], {}, {}, | ||||
|                                                          core_id) | ||||
|                        .IsSuccess()); | ||||
|             KThread::Register(system.Kernel(), shutdown_threads[core_id]); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -729,7 +733,7 @@ struct KernelCore::Impl { | ||||
|         memory_manager->Initialize(management_region.GetAddress(), management_region.GetSize()); | ||||
|     } | ||||
|  | ||||
|     void InitializeHackSharedMemory() { | ||||
|     void InitializeHackSharedMemory(KernelCore& kernel) { | ||||
|         // Setup memory regions for emulated processes | ||||
|         // TODO(bunnei): These should not be hardcoded regions initialized within the kernel | ||||
|         constexpr std::size_t hid_size{0x40000}; | ||||
| @@ -746,14 +750,23 @@ struct KernelCore::Impl { | ||||
|  | ||||
|         hid_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, | ||||
|                                    Svc::MemoryPermission::Read, hid_size); | ||||
|         KSharedMemory::Register(kernel, hid_shared_mem); | ||||
|  | ||||
|         font_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, | ||||
|                                     Svc::MemoryPermission::Read, font_size); | ||||
|         KSharedMemory::Register(kernel, font_shared_mem); | ||||
|  | ||||
|         irs_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, | ||||
|                                    Svc::MemoryPermission::Read, irs_size); | ||||
|         KSharedMemory::Register(kernel, irs_shared_mem); | ||||
|  | ||||
|         time_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, | ||||
|                                     Svc::MemoryPermission::Read, time_size); | ||||
|         KSharedMemory::Register(kernel, time_shared_mem); | ||||
|  | ||||
|         hidbus_shared_mem->Initialize(system.DeviceMemory(), nullptr, Svc::MemoryPermission::None, | ||||
|                                       Svc::MemoryPermission::Read, hidbus_size); | ||||
|         KSharedMemory::Register(kernel, hidbus_shared_mem); | ||||
|     } | ||||
|  | ||||
|     std::mutex registered_objects_lock; | ||||
| @@ -1072,12 +1085,15 @@ static std::jthread RunHostThreadFunc(KernelCore& kernel, KProcess* process, | ||||
|     // Commit the thread reservation. | ||||
|     thread_reservation.Commit(); | ||||
|  | ||||
|     // Register the thread. | ||||
|     KThread::Register(kernel, thread); | ||||
|  | ||||
|     return std::jthread( | ||||
|         [&kernel, thread, thread_name{std::move(thread_name)}, func{std::move(func)}] { | ||||
|             // Set the thread name. | ||||
|             Common::SetCurrentThreadName(thread_name.c_str()); | ||||
|  | ||||
|             // Register the thread. | ||||
|             // Set the thread as current. | ||||
|             kernel.RegisterHostThread(thread); | ||||
|  | ||||
|             // Run the callback. | ||||
| @@ -1099,6 +1115,9 @@ std::jthread KernelCore::RunOnHostCoreProcess(std::string&& process_name, | ||||
|     // Ensure that we don't hold onto any extra references. | ||||
|     SCOPE_EXIT({ process->Close(); }); | ||||
|  | ||||
|     // Register the new process. | ||||
|     KProcess::Register(*this, process); | ||||
|  | ||||
|     // Run the host thread. | ||||
|     return RunHostThreadFunc(*this, process, std::move(process_name), std::move(func)); | ||||
| } | ||||
| @@ -1124,6 +1143,9 @@ void KernelCore::RunOnGuestCoreProcess(std::string&& process_name, std::function | ||||
|     // Ensure that we don't hold onto any extra references. | ||||
|     SCOPE_EXIT({ process->Close(); }); | ||||
|  | ||||
|     // Register the new process. | ||||
|     KProcess::Register(*this, process); | ||||
|  | ||||
|     // Reserve a new thread from the process resource limit. | ||||
|     KScopedResourceReservation thread_reservation(process, LimitableResource::ThreadCountMax); | ||||
|     ASSERT(thread_reservation.Succeeded()); | ||||
| @@ -1136,6 +1158,9 @@ void KernelCore::RunOnGuestCoreProcess(std::string&& process_name, std::function | ||||
|     // Commit the thread reservation. | ||||
|     thread_reservation.Commit(); | ||||
|  | ||||
|     // Register the new thread. | ||||
|     KThread::Register(*this, thread); | ||||
|  | ||||
|     // Begin running the thread. | ||||
|     ASSERT(R_SUCCEEDED(thread->Run())); | ||||
| } | ||||
|   | ||||
| @@ -156,6 +156,7 @@ public: | ||||
|  | ||||
|             auto* session = Kernel::KSession::Create(kernel); | ||||
|             session->Initialize(nullptr, 0); | ||||
|             Kernel::KSession::Register(kernel, session); | ||||
|  | ||||
|             auto next_manager = std::make_shared<Service::SessionRequestManager>( | ||||
|                 kernel, manager->GetServerManager()); | ||||
|   | ||||
| @@ -25,6 +25,9 @@ ServiceContext::ServiceContext(Core::System& system_, std::string name_) | ||||
|                                         Kernel::KProcess::ProcessType::KernelInternal, | ||||
|                                         kernel.GetSystemResourceLimit()) | ||||
|                .IsSuccess()); | ||||
|  | ||||
|     // Register the process. | ||||
|     Kernel::KProcess::Register(kernel, process); | ||||
|     process_created = true; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,9 @@ Mutex::Mutex(Core::System& system) : m_system(system) { | ||||
|     m_event = Kernel::KEvent::Create(system.Kernel()); | ||||
|     m_event->Initialize(nullptr); | ||||
|  | ||||
|     // Register the event. | ||||
|     Kernel::KEvent::Register(system.Kernel(), m_event); | ||||
|  | ||||
|     ASSERT(R_SUCCEEDED(m_event->Signal())); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,9 @@ ServerManager::ServerManager(Core::System& system) : m_system{system}, m_serve_m | ||||
|     // Initialize event. | ||||
|     m_event = Kernel::KEvent::Create(system.Kernel()); | ||||
|     m_event->Initialize(nullptr); | ||||
|  | ||||
|     // Register event. | ||||
|     Kernel::KEvent::Register(system.Kernel(), m_event); | ||||
| } | ||||
|  | ||||
| ServerManager::~ServerManager() { | ||||
| @@ -160,6 +163,9 @@ Result ServerManager::ManageDeferral(Kernel::KEvent** out_event) { | ||||
|     // Initialize the event. | ||||
|     m_deferral_event->Initialize(nullptr); | ||||
|  | ||||
|     // Register the event. | ||||
|     Kernel::KEvent::Register(m_system.Kernel(), m_deferral_event); | ||||
|  | ||||
|     // Set the output. | ||||
|     *out_event = m_deferral_event; | ||||
|  | ||||
|   | ||||
| @@ -64,6 +64,9 @@ Result ServiceManager::RegisterService(std::string name, u32 max_sessions, | ||||
|     auto* port = Kernel::KPort::Create(kernel); | ||||
|     port->Initialize(ServerSessionCountMax, false, 0); | ||||
|  | ||||
|     // Register the port. | ||||
|     Kernel::KPort::Register(kernel, port); | ||||
|  | ||||
|     service_ports.emplace(name, port); | ||||
|     registered_services.emplace(name, handler); | ||||
|     if (deferral_event) { | ||||
|   | ||||
| @@ -49,6 +49,9 @@ void Controller::CloneCurrentObject(HLERequestContext& ctx) { | ||||
|     // Commit the session reservation. | ||||
|     session_reservation.Commit(); | ||||
|  | ||||
|     // Register the session. | ||||
|     Kernel::KSession::Register(system.Kernel(), session); | ||||
|  | ||||
|     // Register with server manager. | ||||
|     session_manager->GetServerManager().RegisterSession(&session->GetServerSession(), | ||||
|                                                         session_manager); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Liam
					Liam