diff options
author | bunnei <bunneidev@gmail.com> | 2021-04-21 06:28:11 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-05-06 01:40:52 +0200 |
commit | b57c5a9b54b23a348d7e80e51943f27a54fb8c2f (patch) | |
tree | e3f3c81a2fddb94c43b6a1dd641c61a7ca9c8225 /src/core/hle/kernel/k_shared_memory.cpp | |
parent | hle: kernel: svc: Migrate WaitSynchronization. (diff) | |
download | yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar.gz yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar.bz2 yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar.lz yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar.xz yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.tar.zst yuzu-b57c5a9b54b23a348d7e80e51943f27a54fb8c2f.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/k_shared_memory.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/core/hle/kernel/k_shared_memory.cpp b/src/core/hle/kernel/k_shared_memory.cpp index 9e20c2350..e91bc94bd 100644 --- a/src/core/hle/kernel/k_shared_memory.cpp +++ b/src/core/hle/kernel/k_shared_memory.cpp @@ -8,6 +8,7 @@ #include "core/hle/kernel/k_scoped_resource_reservation.h" #include "core/hle/kernel/k_shared_memory.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/svc_results.h" namespace Kernel { @@ -22,12 +23,7 @@ ResultCode KSharedMemory::Initialize(KernelCore& kernel_, Core::DeviceMemory& de KMemoryPermission owner_permission_, KMemoryPermission user_permission_, PAddr physical_address_, std::size_t size_, std::string name_) { - - resource_limit = kernel_.GetSystemResourceLimit(); - KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory, - size_); - ASSERT(memory_reservation.Succeeded()); - + // Set members. owner_process = owner_process_; device_memory = &device_memory_; page_list = std::move(page_list_); @@ -36,10 +32,28 @@ ResultCode KSharedMemory::Initialize(KernelCore& kernel_, Core::DeviceMemory& de physical_address = physical_address_; size = size_; name = name_; - is_initialized = true; + // Get the resource limit. + KResourceLimit* reslimit = kernel.GetSystemResourceLimit(); + + // Reserve memory for ourselves. + KScopedResourceReservation memory_reservation(reslimit, LimitableResource::PhysicalMemory, + size_); + R_UNLESS(memory_reservation.Succeeded(), ResultLimitReached); + + // Commit our reservation. memory_reservation.Commit(); + // Set our resource limit. + resource_limit = reslimit; + resource_limit->Open(); + + // Mark initialized. + is_initialized = true; + + // Clear all pages in the memory. + std::memset(device_memory_.GetPointer(physical_address_), 0, size_); + return RESULT_SUCCESS; } |