diff options
| author | bunnei <bunneidev@gmail.com> | 2021-02-27 12:48:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-27 12:48:35 -0700 |
| commit | 09f7c355c6d7e3c7845ba96d9704489d2d5853f4 (patch) | |
| tree | b12127263c0e4999f0a6e9edfe7f8f25adef9d37 /src/core/hle/kernel/shared_memory.cpp | |
| parent | bfa16444640049b2c265fb3f2491252a1d1fe5fd (diff) | |
| parent | 93e20867b0ab2e737e231a9b5bb29d40947fb311 (diff) | |
Merge pull request #5953 from bunnei/memory-refactor-1
Kernel Rework: Memory updates and refactoring (Part 1)
Diffstat (limited to 'src/core/hle/kernel/shared_memory.cpp')
| -rw-r--r-- | src/core/hle/kernel/shared_memory.cpp | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp deleted file mode 100644 index 2eadd51d7..000000000 --- a/src/core/hle/kernel/shared_memory.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "common/assert.h" -#include "core/core.h" -#include "core/hle/kernel/k_scoped_resource_reservation.h" -#include "core/hle/kernel/kernel.h" -#include "core/hle/kernel/memory/page_table.h" -#include "core/hle/kernel/shared_memory.h" - -namespace Kernel { - -SharedMemory::SharedMemory(KernelCore& kernel, Core::DeviceMemory& device_memory) - : Object{kernel}, device_memory{device_memory} {} - -SharedMemory::~SharedMemory() { - kernel.GetSystemResourceLimit()->Release(LimitableResource::PhysicalMemory, size); -} - -std::shared_ptr<SharedMemory> SharedMemory::Create( - KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, - Memory::PageLinkedList&& page_list, Memory::MemoryPermission owner_permission, - Memory::MemoryPermission user_permission, PAddr physical_address, std::size_t size, - std::string name) { - - const auto resource_limit = kernel.GetSystemResourceLimit(); - KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory, - size); - ASSERT(memory_reservation.Succeeded()); - - std::shared_ptr<SharedMemory> shared_memory{ - std::make_shared<SharedMemory>(kernel, device_memory)}; - - shared_memory->owner_process = owner_process; - shared_memory->page_list = std::move(page_list); - shared_memory->owner_permission = owner_permission; - shared_memory->user_permission = user_permission; - shared_memory->physical_address = physical_address; - shared_memory->size = size; - shared_memory->name = name; - - memory_reservation.Commit(); - return shared_memory; -} - -ResultCode SharedMemory::Map(Process& target_process, VAddr address, std::size_t size, - Memory::MemoryPermission permissions) { - const u64 page_count{(size + Memory::PageSize - 1) / Memory::PageSize}; - - if (page_list.GetNumPages() != page_count) { - UNIMPLEMENTED_MSG("Page count does not match"); - } - - const Memory::MemoryPermission expected = - &target_process == owner_process ? owner_permission : user_permission; - - if (permissions != expected) { - UNIMPLEMENTED_MSG("Permission does not match"); - } - - return target_process.PageTable().MapPages(address, page_list, Memory::MemoryState::Shared, - permissions); -} - -} // namespace Kernel |
