|
|
|
@ -995,22 +995,11 @@ std::shared_ptr<Common::Fiber>& KThread::GetHostContext() { |
|
|
|
return host_context; |
|
|
|
} |
|
|
|
|
|
|
|
ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, ThreadType type_flags, |
|
|
|
std::string name, VAddr entry_point, |
|
|
|
u32 priority, u64 arg, s32 processor_id, |
|
|
|
VAddr stack_top, Process* owner_process) { |
|
|
|
std::function<void(void*)> init_func = Core::CpuManager::GetGuestThreadStartFunc(); |
|
|
|
void* init_func_parameter = system.GetCpuManager().GetStartFuncParamater(); |
|
|
|
return Create(system, type_flags, name, entry_point, priority, arg, processor_id, stack_top, |
|
|
|
owner_process, std::move(init_func), init_func_parameter); |
|
|
|
} |
|
|
|
|
|
|
|
ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, ThreadType type_flags, |
|
|
|
std::string name, VAddr entry_point, |
|
|
|
u32 priority, u64 arg, s32 processor_id, |
|
|
|
VAddr stack_top, Process* owner_process, |
|
|
|
std::function<void(void*)>&& thread_start_func, |
|
|
|
void* thread_start_parameter) { |
|
|
|
ResultVal<std::shared_ptr<KThread>> KThread::CreateThread(Core::System& system, |
|
|
|
ThreadType type_flags, std::string name, |
|
|
|
VAddr entry_point, u32 priority, u64 arg, |
|
|
|
s32 processor_id, VAddr stack_top, |
|
|
|
Process* owner_process) { |
|
|
|
auto& kernel = system.Kernel(); |
|
|
|
|
|
|
|
std::shared_ptr<KThread> thread = std::make_shared<KThread>(kernel); |
|
|
|
@ -1027,10 +1016,33 @@ ResultVal<std::shared_ptr<KThread>> KThread::Create(Core::System& system, Thread |
|
|
|
auto& scheduler = kernel.GlobalSchedulerContext(); |
|
|
|
scheduler.AddThread(thread); |
|
|
|
|
|
|
|
thread->host_context = |
|
|
|
return MakeResult<std::shared_ptr<KThread>>(std::move(thread)); |
|
|
|
} |
|
|
|
|
|
|
|
ResultVal<std::shared_ptr<KThread>> KThread::CreateThread( |
|
|
|
Core::System& system, ThreadType type_flags, std::string name, VAddr entry_point, u32 priority, |
|
|
|
u64 arg, s32 processor_id, VAddr stack_top, Process* owner_process, |
|
|
|
std::function<void(void*)>&& thread_start_func, void* thread_start_parameter) { |
|
|
|
auto thread_result = CreateThread(system, type_flags, name, entry_point, priority, arg, |
|
|
|
processor_id, stack_top, owner_process); |
|
|
|
|
|
|
|
if (thread_result.Succeeded()) { |
|
|
|
(*thread_result)->host_context = |
|
|
|
std::make_shared<Common::Fiber>(std::move(thread_start_func), thread_start_parameter); |
|
|
|
} |
|
|
|
|
|
|
|
return MakeResult<std::shared_ptr<KThread>>(std::move(thread)); |
|
|
|
return thread_result; |
|
|
|
} |
|
|
|
|
|
|
|
ResultVal<std::shared_ptr<KThread>> KThread::CreateUserThread( |
|
|
|
Core::System& system, ThreadType type_flags, std::string name, VAddr entry_point, u32 priority, |
|
|
|
u64 arg, s32 processor_id, VAddr stack_top, Process* owner_process) { |
|
|
|
std::function<void(void*)> init_func = Core::CpuManager::GetGuestThreadStartFunc(); |
|
|
|
|
|
|
|
void* init_func_parameter = system.GetCpuManager().GetStartFuncParamater(); |
|
|
|
|
|
|
|
return CreateThread(system, type_flags, name, entry_point, priority, arg, processor_id, |
|
|
|
stack_top, owner_process, std::move(init_func), init_func_parameter); |
|
|
|
} |
|
|
|
|
|
|
|
KThread* GetCurrentThreadPointer(KernelCore& kernel) { |
|
|
|
|