summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
authorGravatar bunnei2022-02-21 12:33:17 -0800
committerGravatar bunnei2022-02-21 12:41:31 -0800
commita74fddc98f5c02b2d0be90c6d87ec3779300ee11 (patch)
treeb801352807790e645bca502bdfb0b9ad1195fef6 /src/core/hle/kernel
parentcore: hle: kernel: KEvent: Pass in owner KProcess on event creation. (diff)
downloadyuzu-a74fddc98f5c02b2d0be90c6d87ec3779300ee11.tar.gz
yuzu-a74fddc98f5c02b2d0be90c6d87ec3779300ee11.tar.xz
yuzu-a74fddc98f5c02b2d0be90c6d87ec3779300ee11.zip
core: hle: kernel: KProcess: Pass in KResourceLimit on process creation.
- This allows us to have a resource limit per process, rather than use the global system resource limit.
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/k_process.cpp11
-rw-r--r--src/core/hle/kernel/k_process.h2
2 files changed, 6 insertions, 7 deletions
diff --git a/src/core/hle/kernel/k_process.cpp b/src/core/hle/kernel/k_process.cpp
index 85c506979..9233261cd 100644
--- a/src/core/hle/kernel/k_process.cpp
+++ b/src/core/hle/kernel/k_process.cpp
@@ -123,12 +123,11 @@ private:
123}; 123};
124 124
125ResultCode KProcess::Initialize(KProcess* process, Core::System& system, std::string process_name, 125ResultCode KProcess::Initialize(KProcess* process, Core::System& system, std::string process_name,
126 ProcessType type) { 126 ProcessType type, KResourceLimit* res_limit) {
127 auto& kernel = system.Kernel(); 127 auto& kernel = system.Kernel();
128 128
129 process->name = std::move(process_name); 129 process->name = std::move(process_name);
130 130 process->resource_limit = res_limit;
131 process->resource_limit = kernel.GetSystemResourceLimit();
132 process->status = ProcessStatus::Created; 131 process->status = ProcessStatus::Created;
133 process->program_id = 0; 132 process->program_id = 0;
134 process->process_id = type == ProcessType::KernelInternal ? kernel.CreateNewKernelProcessID() 133 process->process_id = type == ProcessType::KernelInternal ? kernel.CreateNewKernelProcessID()
@@ -143,9 +142,6 @@ ResultCode KProcess::Initialize(KProcess* process, Core::System& system, std::st
143 142
144 kernel.AppendNewProcess(process); 143 kernel.AppendNewProcess(process);
145 144
146 // Open a reference to the resource limit.
147 process->resource_limit->Open();
148
149 // Clear remaining fields. 145 // Clear remaining fields.
150 process->num_running_threads = 0; 146 process->num_running_threads = 0;
151 process->is_signaled = false; 147 process->is_signaled = false;
@@ -153,6 +149,9 @@ ResultCode KProcess::Initialize(KProcess* process, Core::System& system, std::st
153 process->is_suspended = false; 149 process->is_suspended = false;
154 process->schedule_count = 0; 150 process->schedule_count = 0;
155 151
152 // Open a reference to the resource limit.
153 process->resource_limit->Open();
154
156 return ResultSuccess; 155 return ResultSuccess;
157} 156}
158 157
diff --git a/src/core/hle/kernel/k_process.h b/src/core/hle/kernel/k_process.h
index 38b446350..cf1b67428 100644
--- a/src/core/hle/kernel/k_process.h
+++ b/src/core/hle/kernel/k_process.h
@@ -91,7 +91,7 @@ public:
91 static constexpr std::size_t RANDOM_ENTROPY_SIZE = 4; 91 static constexpr std::size_t RANDOM_ENTROPY_SIZE = 4;
92 92
93 static ResultCode Initialize(KProcess* process, Core::System& system, std::string process_name, 93 static ResultCode Initialize(KProcess* process, Core::System& system, std::string process_name,
94 ProcessType type); 94 ProcessType type, KResourceLimit* res_limit);
95 95
96 /// Gets a reference to the process' page table. 96 /// Gets a reference to the process' page table.
97 KPageTable& PageTable() { 97 KPageTable& PageTable() {