Merge pull request #9533 from merryhime/overcommit

host_memory: mmap changes for virtual_base
This commit is contained in:
liamwhite 2023-01-01 10:24:07 -05:00 committed by GitHub
commit 92103d4ff3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -393,12 +393,27 @@ public:
} }
// Virtual memory initialization // Virtual memory initialization
virtual_base = static_cast<u8*>( #if defined(__FreeBSD__)
mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); virtual_base =
static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER, -1, 0));
if (virtual_base == MAP_FAILED) {
virtual_base = static_cast<u8*>(
mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
if (virtual_base == MAP_FAILED) {
LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
throw std::bad_alloc{};
}
}
#else
virtual_base = static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0));
if (virtual_base == MAP_FAILED) { if (virtual_base == MAP_FAILED) {
LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno)); LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
throw std::bad_alloc{}; throw std::bad_alloc{};
} }
madvise(virtual_base, virtual_size, MADV_HUGEPAGE);
#endif
good = true; good = true;
} }