Merge pull request #2575 from DarkLordZach/process-id-types
kernel: Differentiate kernel and user processes when picking ID
This commit is contained in:
		@@ -99,7 +99,8 @@ struct KernelCore::Impl {
 | 
			
		||||
 | 
			
		||||
    void Shutdown() {
 | 
			
		||||
        next_object_id = 0;
 | 
			
		||||
        next_process_id = Process::ProcessIDMin;
 | 
			
		||||
        next_kernel_process_id = Process::InitialKIPIDMin;
 | 
			
		||||
        next_user_process_id = Process::ProcessIDMin;
 | 
			
		||||
        next_thread_id = 1;
 | 
			
		||||
 | 
			
		||||
        process_list.clear();
 | 
			
		||||
@@ -132,7 +133,8 @@ struct KernelCore::Impl {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::atomic<u32> next_object_id{0};
 | 
			
		||||
    std::atomic<u64> next_process_id{Process::ProcessIDMin};
 | 
			
		||||
    std::atomic<u64> next_kernel_process_id{Process::InitialKIPIDMin};
 | 
			
		||||
    std::atomic<u64> next_user_process_id{Process::ProcessIDMin};
 | 
			
		||||
    std::atomic<u64> next_thread_id{1};
 | 
			
		||||
 | 
			
		||||
    // Lists all processes that exist in the current session.
 | 
			
		||||
@@ -226,8 +228,12 @@ u64 KernelCore::CreateNewThreadID() {
 | 
			
		||||
    return impl->next_thread_id++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 KernelCore::CreateNewProcessID() {
 | 
			
		||||
    return impl->next_process_id++;
 | 
			
		||||
u64 KernelCore::CreateNewKernelProcessID() {
 | 
			
		||||
    return impl->next_kernel_process_id++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 KernelCore::CreateNewUserProcessID() {
 | 
			
		||||
    return impl->next_user_process_id++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Core::Timing::EventType* KernelCore::ThreadWakeupCallbackEventType() const {
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,10 @@ private:
 | 
			
		||||
    u32 CreateNewObjectID();
 | 
			
		||||
 | 
			
		||||
    /// Creates a new process ID, incrementing the internal process ID counter;
 | 
			
		||||
    u64 CreateNewProcessID();
 | 
			
		||||
    u64 CreateNewKernelProcessID();
 | 
			
		||||
 | 
			
		||||
    /// Creates a new process ID, incrementing the internal process ID counter;
 | 
			
		||||
    u64 CreateNewUserProcessID();
 | 
			
		||||
 | 
			
		||||
    /// Creates a new thread ID, incrementing the internal thread ID counter.
 | 
			
		||||
    u64 CreateNewThreadID();
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,8 @@ void SetupMainThread(Process& owner_process, KernelCore& kernel, u32 priority) {
 | 
			
		||||
}
 | 
			
		||||
} // Anonymous namespace
 | 
			
		||||
 | 
			
		||||
SharedPtr<Process> Process::Create(Core::System& system, std::string name) {
 | 
			
		||||
SharedPtr<Process> Process::Create(Core::System& system, std::string name,
 | 
			
		||||
                                   Process::ProcessType type) {
 | 
			
		||||
    auto& kernel = system.Kernel();
 | 
			
		||||
 | 
			
		||||
    SharedPtr<Process> process(new Process(system));
 | 
			
		||||
@@ -56,7 +57,8 @@ SharedPtr<Process> Process::Create(Core::System& system, std::string name) {
 | 
			
		||||
    process->resource_limit = kernel.GetSystemResourceLimit();
 | 
			
		||||
    process->status = ProcessStatus::Created;
 | 
			
		||||
    process->program_id = 0;
 | 
			
		||||
    process->process_id = kernel.CreateNewProcessID();
 | 
			
		||||
    process->process_id = type == ProcessType::KernelInternal ? kernel.CreateNewKernelProcessID()
 | 
			
		||||
                                                              : kernel.CreateNewUserProcessID();
 | 
			
		||||
    process->capabilities.InitializeForMetadatalessProcess();
 | 
			
		||||
 | 
			
		||||
    std::mt19937 rng(Settings::values.rng_seed.value_or(0));
 | 
			
		||||
 
 | 
			
		||||
@@ -73,9 +73,15 @@ public:
 | 
			
		||||
        ProcessIDMax = 0xFFFFFFFFFFFFFFFF,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Used to determine how process IDs are assigned.
 | 
			
		||||
    enum class ProcessType {
 | 
			
		||||
        KernelInternal,
 | 
			
		||||
        Userland,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static constexpr std::size_t RANDOM_ENTROPY_SIZE = 4;
 | 
			
		||||
 | 
			
		||||
    static SharedPtr<Process> Create(Core::System& system, std::string name);
 | 
			
		||||
    static SharedPtr<Process> Create(Core::System& system, std::string name, ProcessType type);
 | 
			
		||||
 | 
			
		||||
    std::string GetTypeName() const override {
 | 
			
		||||
        return "Process";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user