kernel/thread: Use owner_process when setting the page table in SetupMainThread()
The owning process of a thread is required to exist before the thread, so we can enforce this API-wise by using a reference. We can also avoid the reliance on the system instance by using that parameter to access the page table that needs to be set.
This commit is contained in:
parent
f237265187
commit
05aa4aa01a
|
@ -125,7 +125,7 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) {
|
||||||
vm_manager.LogLayout();
|
vm_manager.LogLayout();
|
||||||
status = ProcessStatus::Running;
|
status = ProcessStatus::Running;
|
||||||
|
|
||||||
Kernel::SetupMainThread(kernel, entry_point, main_thread_priority, this);
|
Kernel::SetupMainThread(kernel, entry_point, main_thread_priority, *this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) {
|
void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) {
|
||||||
|
|
|
@ -311,13 +311,13 @@ void Thread::BoostPriority(u32 priority) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority,
|
SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority,
|
||||||
SharedPtr<Process> owner_process) {
|
Process& owner_process) {
|
||||||
// Setup page table so we can write to memory
|
// Setup page table so we can write to memory
|
||||||
SetCurrentPageTable(&Core::CurrentProcess()->vm_manager.page_table);
|
SetCurrentPageTable(&owner_process.vm_manager.page_table);
|
||||||
|
|
||||||
// Initialize new "main" thread
|
// Initialize new "main" thread
|
||||||
auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0,
|
auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0,
|
||||||
Memory::STACK_AREA_VADDR_END, std::move(owner_process));
|
Memory::STACK_AREA_VADDR_END, &owner_process);
|
||||||
|
|
||||||
SharedPtr<Thread> thread = std::move(thread_res).Unwrap();
|
SharedPtr<Thread> thread = std::move(thread_res).Unwrap();
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,7 @@ private:
|
||||||
* @return A shared pointer to the main thread
|
* @return A shared pointer to the main thread
|
||||||
*/
|
*/
|
||||||
SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority,
|
SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority,
|
||||||
SharedPtr<Process> owner_process);
|
Process& owner_process);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current thread
|
* Gets the current thread
|
||||||
|
|
Loading…
Reference in New Issue