summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/hle/kernel/k_memory_manager.cpp (renamed from src/core/hle/kernel/memory/memory_manager.cpp)32
-rw-r--r--src/core/hle/kernel/k_memory_manager.h (renamed from src/core/hle/kernel/memory/memory_manager.h)10
-rw-r--r--src/core/hle/kernel/kernel.cpp16
-rw-r--r--src/core/hle/kernel/kernel.h16
-rw-r--r--src/core/hle/kernel/memory/page_table.cpp2
-rw-r--r--src/core/hle/kernel/memory/page_table.h6
-rw-r--r--src/core/hle/kernel/process.cpp9
8 files changed, 48 insertions, 47 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 70dab3f74..2976187c0 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -170,6 +170,8 @@ add_library(core STATIC
170 hle/kernel/k_memory_block_manager.cpp 170 hle/kernel/k_memory_block_manager.cpp
171 hle/kernel/k_memory_block_manager.h 171 hle/kernel/k_memory_block_manager.h
172 hle/kernel/k_memory_layout.h 172 hle/kernel/k_memory_layout.h
173 hle/kernel/k_memory_manager.cpp
174 hle/kernel/k_memory_manager.h
173 hle/kernel/k_page_bitmap.h 175 hle/kernel/k_page_bitmap.h
174 hle/kernel/k_page_linked_list.h 176 hle/kernel/k_page_linked_list.h
175 hle/kernel/k_priority_queue.h 177 hle/kernel/k_priority_queue.h
@@ -200,8 +202,6 @@ add_library(core STATIC
200 hle/kernel/kernel.cpp 202 hle/kernel/kernel.cpp
201 hle/kernel/kernel.h 203 hle/kernel/kernel.h
202 hle/kernel/memory_types.h 204 hle/kernel/memory_types.h
203 hle/kernel/memory/memory_manager.cpp
204 hle/kernel/memory/memory_manager.h
205 hle/kernel/memory/page_heap.cpp 205 hle/kernel/memory/page_heap.cpp
206 hle/kernel/memory/page_heap.h 206 hle/kernel/memory/page_heap.h
207 hle/kernel/memory/page_table.cpp 207 hle/kernel/memory/page_table.cpp
diff --git a/src/core/hle/kernel/memory/memory_manager.cpp b/src/core/hle/kernel/k_memory_manager.cpp
index 00d5b15f3..5ea11a918 100644
--- a/src/core/hle/kernel/memory/memory_manager.cpp
+++ b/src/core/hle/kernel/k_memory_manager.cpp
@@ -8,20 +8,20 @@
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "common/scope_exit.h" 10#include "common/scope_exit.h"
11#include "core/hle/kernel/k_memory_manager.h"
11#include "core/hle/kernel/k_page_linked_list.h" 12#include "core/hle/kernel/k_page_linked_list.h"
12#include "core/hle/kernel/memory/memory_manager.h"
13#include "core/hle/kernel/svc_results.h" 13#include "core/hle/kernel/svc_results.h"
14 14
15namespace Kernel::Memory { 15namespace Kernel {
16 16
17std::size_t MemoryManager::Impl::Initialize(Pool new_pool, u64 start_address, u64 end_address) { 17std::size_t KMemoryManager::Impl::Initialize(Pool new_pool, u64 start_address, u64 end_address) {
18 const auto size{end_address - start_address}; 18 const auto size{end_address - start_address};
19 19
20 // Calculate metadata sizes 20 // Calculate metadata sizes
21 const auto ref_count_size{(size / PageSize) * sizeof(u16)}; 21 const auto ref_count_size{(size / PageSize) * sizeof(u16)};
22 const auto optimize_map_size{(Common::AlignUp((size / PageSize), 64) / 64) * sizeof(u64)}; 22 const auto optimize_map_size{(Common::AlignUp((size / PageSize), 64) / 64) * sizeof(u64)};
23 const auto manager_size{Common::AlignUp(optimize_map_size + ref_count_size, PageSize)}; 23 const auto manager_size{Common::AlignUp(optimize_map_size + ref_count_size, PageSize)};
24 const auto page_heap_size{PageHeap::CalculateManagementOverheadSize(size)}; 24 const auto page_heap_size{Memory::PageHeap::CalculateManagementOverheadSize(size)};
25 const auto total_metadata_size{manager_size + page_heap_size}; 25 const auto total_metadata_size{manager_size + page_heap_size};
26 ASSERT(manager_size <= total_metadata_size); 26 ASSERT(manager_size <= total_metadata_size);
27 ASSERT(Common::IsAligned(total_metadata_size, PageSize)); 27 ASSERT(Common::IsAligned(total_metadata_size, PageSize));
@@ -41,13 +41,13 @@ std::size_t MemoryManager::Impl::Initialize(Pool new_pool, u64 start_address, u6
41 return total_metadata_size; 41 return total_metadata_size;
42} 42}
43 43
44void MemoryManager::InitializeManager(Pool pool, u64 start_address, u64 end_address) { 44void KMemoryManager::InitializeManager(Pool pool, u64 start_address, u64 end_address) {
45 ASSERT(pool < Pool::Count); 45 ASSERT(pool < Pool::Count);
46 managers[static_cast<std::size_t>(pool)].Initialize(pool, start_address, end_address); 46 managers[static_cast<std::size_t>(pool)].Initialize(pool, start_address, end_address);
47} 47}
48 48
49VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_t align_pages, 49VAddr KMemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_t align_pages,
50 u32 option) { 50 u32 option) {
51 // Early return if we're allocating no pages 51 // Early return if we're allocating no pages
52 if (num_pages == 0) { 52 if (num_pages == 0) {
53 return {}; 53 return {};
@@ -59,7 +59,7 @@ VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_
59 std::lock_guard lock{pool_locks[pool_index]}; 59 std::lock_guard lock{pool_locks[pool_index]};
60 60
61 // Choose a heap based on our page size request 61 // Choose a heap based on our page size request
62 const s32 heap_index{PageHeap::GetAlignedBlockIndex(num_pages, align_pages)}; 62 const s32 heap_index{Memory::PageHeap::GetAlignedBlockIndex(num_pages, align_pages)};
63 63
64 // Loop, trying to iterate from each block 64 // Loop, trying to iterate from each block
65 // TODO (bunnei): Support multiple managers 65 // TODO (bunnei): Support multiple managers
@@ -72,7 +72,7 @@ VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_
72 } 72 }
73 73
74 // If we allocated more than we need, free some 74 // If we allocated more than we need, free some
75 const auto allocated_pages{PageHeap::GetBlockNumPages(heap_index)}; 75 const auto allocated_pages{Memory::PageHeap::GetBlockNumPages(heap_index)};
76 if (allocated_pages > num_pages) { 76 if (allocated_pages > num_pages) {
77 chosen_manager.Free(allocated_block + num_pages * PageSize, allocated_pages - num_pages); 77 chosen_manager.Free(allocated_block + num_pages * PageSize, allocated_pages - num_pages);
78 } 78 }
@@ -80,8 +80,8 @@ VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_
80 return allocated_block; 80 return allocated_block;
81} 81}
82 82
83ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, 83ResultCode KMemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
84 Direction dir) { 84 Direction dir) {
85 ASSERT(page_list.GetNumPages() == 0); 85 ASSERT(page_list.GetNumPages() == 0);
86 86
87 // Early return if we're allocating no pages 87 // Early return if we're allocating no pages
@@ -94,7 +94,7 @@ ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_p
94 std::lock_guard lock{pool_locks[pool_index]}; 94 std::lock_guard lock{pool_locks[pool_index]};
95 95
96 // Choose a heap based on our page size request 96 // Choose a heap based on our page size request
97 const s32 heap_index{PageHeap::GetBlockIndex(num_pages)}; 97 const s32 heap_index{Memory::PageHeap::GetBlockIndex(num_pages)};
98 if (heap_index < 0) { 98 if (heap_index < 0) {
99 return ResultOutOfMemory; 99 return ResultOutOfMemory;
100 } 100 }
@@ -113,7 +113,7 @@ ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_p
113 113
114 // Keep allocating until we've allocated all our pages 114 // Keep allocating until we've allocated all our pages
115 for (s32 index{heap_index}; index >= 0 && num_pages > 0; index--) { 115 for (s32 index{heap_index}; index >= 0 && num_pages > 0; index--) {
116 const auto pages_per_alloc{PageHeap::GetBlockNumPages(index)}; 116 const auto pages_per_alloc{Memory::PageHeap::GetBlockNumPages(index)};
117 117
118 while (num_pages >= pages_per_alloc) { 118 while (num_pages >= pages_per_alloc) {
119 // Allocate a block 119 // Allocate a block
@@ -149,8 +149,8 @@ ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_p
149 return RESULT_SUCCESS; 149 return RESULT_SUCCESS;
150} 150}
151 151
152ResultCode MemoryManager::Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, 152ResultCode KMemoryManager::Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool,
153 Direction dir) { 153 Direction dir) {
154 // Early return if we're freeing no pages 154 // Early return if we're freeing no pages
155 if (!num_pages) { 155 if (!num_pages) {
156 return RESULT_SUCCESS; 156 return RESULT_SUCCESS;
@@ -173,4 +173,4 @@ ResultCode MemoryManager::Free(KPageLinkedList& page_list, std::size_t num_pages
173 return RESULT_SUCCESS; 173 return RESULT_SUCCESS;
174} 174}
175 175
176} // namespace Kernel::Memory 176} // namespace Kernel
diff --git a/src/core/hle/kernel/memory/memory_manager.h b/src/core/hle/kernel/k_memory_manager.h
index d090979bd..377f642d8 100644
--- a/src/core/hle/kernel/memory/memory_manager.h
+++ b/src/core/hle/kernel/k_memory_manager.h
@@ -17,9 +17,9 @@ namespace Kernel {
17class KPageLinkedList; 17class KPageLinkedList;
18} 18}
19 19
20namespace Kernel::Memory { 20namespace Kernel {
21 21
22class MemoryManager final : NonCopyable { 22class KMemoryManager final : NonCopyable {
23public: 23public:
24 enum class Pool : u32 { 24 enum class Pool : u32 {
25 Application = 0, 25 Application = 0,
@@ -41,7 +41,7 @@ public:
41 Mask = (0xF << Shift), 41 Mask = (0xF << Shift),
42 }; 42 };
43 43
44 MemoryManager() = default; 44 KMemoryManager() = default;
45 45
46 constexpr std::size_t GetSize(Pool pool) const { 46 constexpr std::size_t GetSize(Pool pool) const {
47 return managers[static_cast<std::size_t>(pool)].GetSize(); 47 return managers[static_cast<std::size_t>(pool)].GetSize();
@@ -84,7 +84,7 @@ private:
84 using RefCount = u16; 84 using RefCount = u16;
85 85
86 private: 86 private:
87 PageHeap heap; 87 Memory::PageHeap heap;
88 Pool pool{}; 88 Pool pool{};
89 89
90 public: 90 public:
@@ -118,4 +118,4 @@ private:
118 std::array<Impl, MaxManagerCount> managers; 118 std::array<Impl, MaxManagerCount> managers;
119}; 119};
120 120
121} // namespace Kernel::Memory 121} // namespace Kernel
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index eab73c46c..453695545 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -28,13 +28,13 @@
28#include "core/hle/kernel/client_port.h" 28#include "core/hle/kernel/client_port.h"
29#include "core/hle/kernel/handle_table.h" 29#include "core/hle/kernel/handle_table.h"
30#include "core/hle/kernel/k_memory_layout.h" 30#include "core/hle/kernel/k_memory_layout.h"
31#include "core/hle/kernel/k_memory_manager.h"
31#include "core/hle/kernel/k_resource_limit.h" 32#include "core/hle/kernel/k_resource_limit.h"
32#include "core/hle/kernel/k_scheduler.h" 33#include "core/hle/kernel/k_scheduler.h"
33#include "core/hle/kernel/k_shared_memory.h" 34#include "core/hle/kernel/k_shared_memory.h"
34#include "core/hle/kernel/k_slab_heap.h" 35#include "core/hle/kernel/k_slab_heap.h"
35#include "core/hle/kernel/k_thread.h" 36#include "core/hle/kernel/k_thread.h"
36#include "core/hle/kernel/kernel.h" 37#include "core/hle/kernel/kernel.h"
37#include "core/hle/kernel/memory/memory_manager.h"
38#include "core/hle/kernel/physical_core.h" 38#include "core/hle/kernel/physical_core.h"
39#include "core/hle/kernel/process.h" 39#include "core/hle/kernel/process.h"
40#include "core/hle/kernel/service_thread.h" 40#include "core/hle/kernel/service_thread.h"
@@ -277,14 +277,14 @@ struct KernelCore::Impl {
277 constexpr PAddr time_addr{layout.System().StartAddress() + hid_size + font_size + irs_size}; 277 constexpr PAddr time_addr{layout.System().StartAddress() + hid_size + font_size + irs_size};
278 278
279 // Initialize memory manager 279 // Initialize memory manager
280 memory_manager = std::make_unique<Memory::MemoryManager>(); 280 memory_manager = std::make_unique<KMemoryManager>();
281 memory_manager->InitializeManager(Memory::MemoryManager::Pool::Application, 281 memory_manager->InitializeManager(KMemoryManager::Pool::Application,
282 layout.Application().StartAddress(), 282 layout.Application().StartAddress(),
283 layout.Application().EndAddress()); 283 layout.Application().EndAddress());
284 memory_manager->InitializeManager(Memory::MemoryManager::Pool::Applet, 284 memory_manager->InitializeManager(KMemoryManager::Pool::Applet,
285 layout.Applet().StartAddress(), 285 layout.Applet().StartAddress(),
286 layout.Applet().EndAddress()); 286 layout.Applet().EndAddress());
287 memory_manager->InitializeManager(Memory::MemoryManager::Pool::System, 287 memory_manager->InitializeManager(KMemoryManager::Pool::System,
288 layout.System().StartAddress(), 288 layout.System().StartAddress(),
289 layout.System().EndAddress()); 289 layout.System().EndAddress());
290 290
@@ -348,7 +348,7 @@ struct KernelCore::Impl {
348 std::atomic<u32> next_host_thread_id{Core::Hardware::NUM_CPU_CORES}; 348 std::atomic<u32> next_host_thread_id{Core::Hardware::NUM_CPU_CORES};
349 349
350 // Kernel memory management 350 // Kernel memory management
351 std::unique_ptr<Memory::MemoryManager> memory_manager; 351 std::unique_ptr<KMemoryManager> memory_manager;
352 std::unique_ptr<KSlabHeap<Page>> user_slab_heap_pages; 352 std::unique_ptr<KSlabHeap<Page>> user_slab_heap_pages;
353 353
354 // Shared memory for services 354 // Shared memory for services
@@ -573,11 +573,11 @@ KThread* KernelCore::GetCurrentEmuThread() const {
573 return impl->GetCurrentEmuThread(); 573 return impl->GetCurrentEmuThread();
574} 574}
575 575
576Memory::MemoryManager& KernelCore::MemoryManager() { 576KMemoryManager& KernelCore::MemoryManager() {
577 return *impl->memory_manager; 577 return *impl->memory_manager;
578} 578}
579 579
580const Memory::MemoryManager& KernelCore::MemoryManager() const { 580const KMemoryManager& KernelCore::MemoryManager() const {
581 return *impl->memory_manager; 581 return *impl->memory_manager;
582} 582}
583 583
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 498f94417..56906f2da 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -27,22 +27,18 @@ struct EventType;
27 27
28namespace Kernel { 28namespace Kernel {
29 29
30namespace Memory {
31class MemoryManager;
32
33} // namespace Memory
34
35class ClientPort; 30class ClientPort;
36class GlobalSchedulerContext; 31class GlobalSchedulerContext;
37class HandleTable; 32class HandleTable;
38class PhysicalCore; 33class KMemoryManager;
39class Process;
40class KResourceLimit; 34class KResourceLimit;
41class KScheduler; 35class KScheduler;
42class KSharedMemory; 36class KSharedMemory;
37class KThread;
38class PhysicalCore;
39class Process;
43class ServiceThread; 40class ServiceThread;
44class Synchronization; 41class Synchronization;
45class KThread;
46class TimeManager; 42class TimeManager;
47 43
48template <typename T> 44template <typename T>
@@ -180,10 +176,10 @@ public:
180 void RegisterHostThread(); 176 void RegisterHostThread();
181 177
182 /// Gets the virtual memory manager for the kernel. 178 /// Gets the virtual memory manager for the kernel.
183 Memory::MemoryManager& MemoryManager(); 179 KMemoryManager& MemoryManager();
184 180
185 /// Gets the virtual memory manager for the kernel. 181 /// Gets the virtual memory manager for the kernel.
186 const Memory::MemoryManager& MemoryManager() const; 182 const KMemoryManager& MemoryManager() const;
187 183
188 /// Gets the slab heap allocated for user space pages. 184 /// Gets the slab heap allocated for user space pages.
189 KSlabHeap<Page>& GetUserSlabHeapPages(); 185 KSlabHeap<Page>& GetUserSlabHeapPages();
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/memory/page_table.cpp
index c1efc23de..ef9d97413 100644
--- a/src/core/hle/kernel/memory/page_table.cpp
+++ b/src/core/hle/kernel/memory/page_table.cpp
@@ -62,7 +62,7 @@ PageTable::PageTable(Core::System& system) : system{system} {}
62 62
63ResultCode PageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, 63ResultCode PageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type,
64 bool enable_aslr, VAddr code_addr, std::size_t code_size, 64 bool enable_aslr, VAddr code_addr, std::size_t code_size,
65 Memory::MemoryManager::Pool pool) { 65 KMemoryManager::Pool pool) {
66 66
67 const auto GetSpaceStart = [this](KAddressSpaceInfo::Type type) { 67 const auto GetSpaceStart = [this](KAddressSpaceInfo::Type type) {
68 return KAddressSpaceInfo::GetAddressSpaceStart(address_space_width, type); 68 return KAddressSpaceInfo::GetAddressSpaceStart(address_space_width, type);
diff --git a/src/core/hle/kernel/memory/page_table.h b/src/core/hle/kernel/memory/page_table.h
index 736583b81..a9e850e01 100644
--- a/src/core/hle/kernel/memory/page_table.h
+++ b/src/core/hle/kernel/memory/page_table.h
@@ -11,7 +11,7 @@
11#include "common/page_table.h" 11#include "common/page_table.h"
12#include "core/file_sys/program_metadata.h" 12#include "core/file_sys/program_metadata.h"
13#include "core/hle/kernel/k_memory_block.h" 13#include "core/hle/kernel/k_memory_block.h"
14#include "core/hle/kernel/memory/memory_manager.h" 14#include "core/hle/kernel/k_memory_manager.h"
15#include "core/hle/result.h" 15#include "core/hle/result.h"
16 16
17namespace Core { 17namespace Core {
@@ -30,7 +30,7 @@ public:
30 30
31 ResultCode InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr, 31 ResultCode InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr,
32 VAddr code_addr, std::size_t code_size, 32 VAddr code_addr, std::size_t code_size,
33 Memory::MemoryManager::Pool pool); 33 KMemoryManager::Pool pool);
34 ResultCode MapProcessCode(VAddr addr, std::size_t pages_count, KMemoryState state, 34 ResultCode MapProcessCode(VAddr addr, std::size_t pages_count, KMemoryState state,
35 KMemoryPermission perm); 35 KMemoryPermission perm);
36 ResultCode MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size); 36 ResultCode MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size);
@@ -271,7 +271,7 @@ private:
271 bool is_kernel{}; 271 bool is_kernel{};
272 bool is_aslr_enabled{}; 272 bool is_aslr_enabled{};
273 273
274 MemoryManager::Pool memory_pool{MemoryManager::Pool::Application}; 274 KMemoryManager::Pool memory_pool{KMemoryManager::Pool::Application};
275 275
276 Common::PageTable page_table_impl; 276 Common::PageTable page_table_impl;
277 277
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp
index f83977a8e..e0359eb3c 100644
--- a/src/core/hle/kernel/process.cpp
+++ b/src/core/hle/kernel/process.cpp
@@ -274,7 +274,7 @@ ResultCode Process::LoadFromMetadata(const FileSys::ProgramMetadata& metadata,
274 // Set initial resource limits 274 // Set initial resource limits
275 resource_limit->SetLimitValue( 275 resource_limit->SetLimitValue(
276 LimitableResource::PhysicalMemory, 276 LimitableResource::PhysicalMemory,
277 kernel.MemoryManager().GetSize(Memory::MemoryManager::Pool::Application)); 277 kernel.MemoryManager().GetSize(KMemoryManager::Pool::Application));
278 KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory, 278 KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory,
279 code_size + system_resource_size); 279 code_size + system_resource_size);
280 if (!memory_reservation.Succeeded()) { 280 if (!memory_reservation.Succeeded()) {
@@ -285,7 +285,7 @@ ResultCode Process::LoadFromMetadata(const FileSys::ProgramMetadata& metadata,
285 // Initialize proces address space 285 // Initialize proces address space
286 if (const ResultCode result{ 286 if (const ResultCode result{
287 page_table->InitializeForProcess(metadata.GetAddressSpaceType(), false, 0x8000000, 287 page_table->InitializeForProcess(metadata.GetAddressSpaceType(), false, 0x8000000,
288 code_size, Memory::MemoryManager::Pool::Application)}; 288 code_size, KMemoryManager::Pool::Application)};
289 result.IsError()) { 289 result.IsError()) {
290 return result; 290 return result;
291 } 291 }
@@ -323,6 +323,11 @@ ResultCode Process::LoadFromMetadata(const FileSys::ProgramMetadata& metadata,
323 UNREACHABLE(); 323 UNREACHABLE();
324 } 324 }
325 325
326 // Set initial resource limits
327 resource_limit->SetLimitValue(
328 LimitableResource::PhysicalMemory,
329 kernel.MemoryManager().GetSize(KMemoryManager::Pool::Application));
330
326 resource_limit->SetLimitValue(LimitableResource::Threads, 608); 331 resource_limit->SetLimitValue(LimitableResource::Threads, 608);
327 resource_limit->SetLimitValue(LimitableResource::Events, 700); 332 resource_limit->SetLimitValue(LimitableResource::Events, 700);
328 resource_limit->SetLimitValue(LimitableResource::TransferMemory, 128); 333 resource_limit->SetLimitValue(LimitableResource::TransferMemory, 128);