summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar liamwhite2023-01-01 10:24:07 -0500
committerGravatar GitHub2023-01-01 10:24:07 -0500
commit92103d4ff3dfff541a6cb1b2c54a9b0646a35806 (patch)
tree770fe1892e16878aa26e130935e93f76ce6e6841 /src
parentMerge pull request #9532 from zhaobot/tx-update-20230101024213 (diff)
parenthost_memory: Use transparent huge pages where available (diff)
downloadyuzu-92103d4ff3dfff541a6cb1b2c54a9b0646a35806.tar.gz
yuzu-92103d4ff3dfff541a6cb1b2c54a9b0646a35806.tar.xz
yuzu-92103d4ff3dfff541a6cb1b2c54a9b0646a35806.zip
Merge pull request #9533 from merryhime/overcommit
host_memory: mmap changes for virtual_base
Diffstat (limited to '')
-rw-r--r--src/common/host_memory.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp
index 909f6cf3f..611c7d1a3 100644
--- a/src/common/host_memory.cpp
+++ b/src/common/host_memory.cpp
@@ -393,12 +393,27 @@ public:
393 } 393 }
394 394
395 // Virtual memory initialization 395 // Virtual memory initialization
396 virtual_base = static_cast<u8*>( 396#if defined(__FreeBSD__)
397 mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); 397 virtual_base =
398 static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
399 MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER, -1, 0));
400 if (virtual_base == MAP_FAILED) {
401 virtual_base = static_cast<u8*>(
402 mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
403 if (virtual_base == MAP_FAILED) {
404 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
405 throw std::bad_alloc{};
406 }
407 }
408#else
409 virtual_base = static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
410 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0));
398 if (virtual_base == MAP_FAILED) { 411 if (virtual_base == MAP_FAILED) {
399 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno)); 412 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
400 throw std::bad_alloc{}; 413 throw std::bad_alloc{};
401 } 414 }
415 madvise(virtual_base, virtual_size, MADV_HUGEPAGE);
416#endif
402 417
403 good = true; 418 good = true;
404 } 419 }