diff options
| author | 2021-02-12 19:05:24 -0500 | |
|---|---|---|
| committer | 2021-02-12 19:05:24 -0500 | |
| commit | ec9b6641b12aa04ae3d7782b0423037dbc1400ac (patch) | |
| tree | fc563f28673dfe851cfaf665951423e0ad759025 /src/core/hle/kernel/kernel.cpp | |
| parent | kernel: KScopedReservation implementation (diff) | |
| download | yuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.tar.gz yuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.tar.xz yuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.zip | |
kernel: More accurately reserve and release resources
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 8da5a5c86..b6e6f115e 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -141,11 +141,17 @@ struct KernelCore::Impl { | |||
| 141 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::Events, 700).IsSuccess()); | 141 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::Events, 700).IsSuccess()); |
| 142 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::TransferMemory, 200) | 142 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::TransferMemory, 200) |
| 143 | .IsSuccess()); | 143 | .IsSuccess()); |
| 144 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::Sessions, 900).IsSuccess()); | 144 | ASSERT(system_resource_limit->SetLimitValue(LimitableResource::Sessions, 933).IsSuccess()); |
| 145 | 145 | ||
| 146 | if (!system_resource_limit->Reserve(LimitableResource::PhysicalMemory, 0x60000)) { | 146 | // Derived from recent software updates. The kernel reserves 27MB |
| 147 | constexpr u64 kernel_size{0x1b00000}; | ||
| 148 | if (!system_resource_limit->Reserve(LimitableResource::PhysicalMemory, kernel_size)) { | ||
| 147 | UNREACHABLE(); | 149 | UNREACHABLE(); |
| 148 | } | 150 | } |
| 151 | // Reserve secure applet memory, introduced in firmware 5.0.0 | ||
| 152 | constexpr u64 secure_applet_memory_size{0x400000}; | ||
| 153 | ASSERT(system_resource_limit->Reserve(LimitableResource::PhysicalMemory, | ||
| 154 | secure_applet_memory_size)); | ||
| 149 | } | 155 | } |
| 150 | 156 | ||
| 151 | void InitializePreemption(KernelCore& kernel) { | 157 | void InitializePreemption(KernelCore& kernel) { |
| @@ -302,8 +308,11 @@ struct KernelCore::Impl { | |||
| 302 | // Allocate slab heaps | 308 | // Allocate slab heaps |
| 303 | user_slab_heap_pages = std::make_unique<Memory::SlabHeap<Memory::Page>>(); | 309 | user_slab_heap_pages = std::make_unique<Memory::SlabHeap<Memory::Page>>(); |
| 304 | 310 | ||
| 311 | constexpr u64 user_slab_heap_size{0x1ef000}; | ||
| 312 | // Reserve slab heaps | ||
| 313 | ASSERT( | ||
| 314 | system_resource_limit->Reserve(LimitableResource::PhysicalMemory, user_slab_heap_size)); | ||
| 305 | // Initialize slab heaps | 315 | // Initialize slab heaps |
| 306 | constexpr u64 user_slab_heap_size{0x3de000}; | ||
| 307 | user_slab_heap_pages->Initialize( | 316 | user_slab_heap_pages->Initialize( |
| 308 | system.DeviceMemory().GetPointer(Core::DramMemoryMap::SlabHeapBase), | 317 | system.DeviceMemory().GetPointer(Core::DramMemoryMap::SlabHeapBase), |
| 309 | user_slab_heap_size); | 318 | user_slab_heap_size); |