kernel/process: Move main thread stack allocation to its own function
Keeps this particular set of behavior isolated to its own function.
This commit is contained in:
		
							parent
							
								
									9e689a81f8
								
							
						
					
					
						commit
						eb6f55d880
					
				@ -186,19 +186,9 @@ ResultCode Process::LoadFromMetadata(const FileSys::ProgramMetadata& metadata) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Process::Run(s32 main_thread_priority, u64 stack_size) {
 | 
			
		||||
    // The kernel always ensures that the given stack size is page aligned.
 | 
			
		||||
    main_thread_stack_size = Common::AlignUp(stack_size, Memory::PAGE_SIZE);
 | 
			
		||||
 | 
			
		||||
    // Allocate and map the main thread stack
 | 
			
		||||
    // TODO(bunnei): This is heap area that should be allocated by the kernel and not mapped as part
 | 
			
		||||
    // of the user address space.
 | 
			
		||||
    const VAddr mapping_address = vm_manager.GetTLSIORegionEndAddress() - main_thread_stack_size;
 | 
			
		||||
    vm_manager
 | 
			
		||||
        .MapMemoryBlock(mapping_address, std::make_shared<std::vector<u8>>(main_thread_stack_size),
 | 
			
		||||
                        0, main_thread_stack_size, MemoryState::Stack)
 | 
			
		||||
        .Unwrap();
 | 
			
		||||
 | 
			
		||||
    AllocateMainThreadStack(stack_size);
 | 
			
		||||
    vm_manager.LogLayout();
 | 
			
		||||
 | 
			
		||||
    ChangeStatus(ProcessStatus::Running);
 | 
			
		||||
 | 
			
		||||
    SetupMainThread(*this, kernel, main_thread_priority);
 | 
			
		||||
@ -327,4 +317,16 @@ void Process::ChangeStatus(ProcessStatus new_status) {
 | 
			
		||||
    WakeupAllWaitingThreads();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Process::AllocateMainThreadStack(u64 stack_size) {
 | 
			
		||||
    // The kernel always ensures that the given stack size is page aligned.
 | 
			
		||||
    main_thread_stack_size = Common::AlignUp(stack_size, Memory::PAGE_SIZE);
 | 
			
		||||
 | 
			
		||||
    // Allocate and map the main thread stack
 | 
			
		||||
    const VAddr mapping_address = vm_manager.GetTLSIORegionEndAddress() - main_thread_stack_size;
 | 
			
		||||
    vm_manager
 | 
			
		||||
        .MapMemoryBlock(mapping_address, std::make_shared<std::vector<u8>>(main_thread_stack_size),
 | 
			
		||||
                        0, main_thread_stack_size, MemoryState::Stack)
 | 
			
		||||
        .Unwrap();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Kernel
 | 
			
		||||
 | 
			
		||||
@ -280,6 +280,9 @@ private:
 | 
			
		||||
    /// a process signal.
 | 
			
		||||
    void ChangeStatus(ProcessStatus new_status);
 | 
			
		||||
 | 
			
		||||
    /// Allocates the main thread stack for the process, given the stack size in bytes.
 | 
			
		||||
    void AllocateMainThreadStack(u64 stack_size);
 | 
			
		||||
 | 
			
		||||
    /// Memory manager for this process.
 | 
			
		||||
    Kernel::VMManager vm_manager;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user