summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorGravatar ameerj2021-02-12 19:05:24 -0500
committerGravatar ameerj2021-02-12 19:05:24 -0500
commitec9b6641b12aa04ae3d7782b0423037dbc1400ac (patch)
treefc563f28673dfe851cfaf665951423e0ad759025 /src/core/hle/kernel/kernel.cpp
parentkernel: KScopedReservation implementation (diff)
downloadyuzu-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.cpp15
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);