summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MemArenaUnix.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2021-06-21 02:13:00 +0200
committerAdmiral H. Curtiss <pikachu025@gmail.com>2021-12-25 20:20:36 +0100
commit155412856072c07521536d5a07117c400c0ce131 (patch)
treedb49950c562e5d4d572d469fc333c195cd681ff5 /Source/Core/Common/MemArenaUnix.cpp
parent812cc8b6322fa72982a3084bb3de4bdb564331fe (diff)
MemArena: Prepare interface for proper memory reservation.
Diffstat (limited to 'Source/Core/Common/MemArenaUnix.cpp')
-rw-r--r--Source/Core/Common/MemArenaUnix.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/Source/Core/Common/MemArenaUnix.cpp b/Source/Core/Common/MemArenaUnix.cpp
index 63465a5e22..1743c2ace0 100644
--- a/Source/Core/Common/MemArenaUnix.cpp
+++ b/Source/Core/Common/MemArenaUnix.cpp
@@ -22,6 +22,9 @@
namespace Common
{
+MemArena::MemArena() = default;
+MemArena::~MemArena() = default;
+
void MemArena::GrabSHMSegment(size_t size)
{
const std::string file_name = "/dolphin-emu." + std::to_string(getpid());
@@ -41,35 +44,18 @@ void MemArena::ReleaseSHMSegment()
close(fd);
}
-void* MemArena::CreateView(s64 offset, size_t size, void* base)
+void* MemArena::CreateView(s64 offset, size_t size)
{
- void* retval = mmap(base, size, PROT_READ | PROT_WRITE,
- MAP_SHARED | ((base == nullptr) ? 0 : MAP_FIXED), fd, offset);
-
- if (retval == MAP_FAILED)
- {
- NOTICE_LOG_FMT(MEMMAP, "mmap failed");
- return nullptr;
- }
- else
- {
- return retval;
- }
+ return MapInMemoryRegion(offset, size, nullptr);
}
void MemArena::ReleaseView(void* view, size_t size)
{
- munmap(view, size);
+ UnmapFromMemoryRegion(view, size);
}
-u8* MemArena::FindMemoryBase()
+u8* MemArena::ReserveMemoryRegion(size_t memory_size)
{
-#if _ARCH_32
- const size_t memory_size = 0x31000000;
-#else
- const size_t memory_size = 0x400000000;
-#endif
-
const int flags = MAP_ANON | MAP_PRIVATE;
void* base = mmap(nullptr, memory_size, PROT_NONE, flags, -1, 0);
if (base == MAP_FAILED)
@@ -80,4 +66,29 @@ u8* MemArena::FindMemoryBase()
munmap(base, memory_size);
return static_cast<u8*>(base);
}
+
+void MemArena::ReleaseMemoryRegion()
+{
+}
+
+void* MemArena::MapInMemoryRegion(s64 offset, size_t size, void* base)
+{
+ void* retval = mmap(base, size, PROT_READ | PROT_WRITE,
+ MAP_SHARED | ((base == nullptr) ? 0 : MAP_FIXED), fd, offset);
+
+ if (retval == MAP_FAILED)
+ {
+ NOTICE_LOG_FMT(MEMMAP, "mmap failed");
+ return nullptr;
+ }
+ else
+ {
+ return retval;
+ }
+}
+
+void MemArena::UnmapFromMemoryRegion(void* view, size_t size)
+{
+ munmap(view, size);
+}
} // namespace Common