summaryrefslogtreecommitdiff
path: root/src/common/host_memory.cpp
diff options
context:
space:
mode:
authorGravatar Jan Beich2023-12-02 00:21:20 +0100
committerGravatar Jan Beich2023-12-02 00:25:50 +0100
commit01d3e250ab41622742ccb5bf93819ae364a65310 (patch)
tree1d43da86096a9d5f429ef1869c0ff7cfa02a8d46 /src/common/host_memory.cpp
parenthost_memory: allow missing MAP_NORESERVE on FreeBSD after 448d4815dece (diff)
downloadyuzu-01d3e250ab41622742ccb5bf93819ae364a65310.tar.gz
yuzu-01d3e250ab41622742ccb5bf93819ae364a65310.tar.xz
yuzu-01d3e250ab41622742ccb5bf93819ae364a65310.zip
host_memory: move MAP_ALIGNED_SUPER attempt after 448d4815dece
src/common/host_memory.cpp:410:14: error: unused function 'ChooseVirtualBase' [-Werror,-Wunused-function] 410 | static void* ChooseVirtualBase(size_t virtual_size) { | ^~~~~~~~~~~~~~~~~
Diffstat (limited to '')
-rw-r--r--src/common/host_memory.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp
index 179f6ab11..4bfc64f2d 100644
--- a/src/common/host_memory.cpp
+++ b/src/common/host_memory.cpp
@@ -408,6 +408,16 @@ static void* ChooseVirtualBase(size_t virtual_size) {
408#else 408#else
409 409
410static void* ChooseVirtualBase(size_t virtual_size) { 410static void* ChooseVirtualBase(size_t virtual_size) {
411#if defined(__FreeBSD__)
412 void* virtual_base =
413 mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE,
414 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_ALIGNED_SUPER, -1, 0);
415
416 if (virtual_base != MAP_FAILED) {
417 return virtual_base;
418 }
419#endif
420
411 return mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE, 421 return mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE,
412 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); 422 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
413} 423}
@@ -463,24 +473,12 @@ public:
463 } 473 }
464 474
465 // Virtual memory initialization 475 // Virtual memory initialization
466#if defined(__FreeBSD__)
467 virtual_base =
468 static_cast<u8*>(mmap(nullptr, virtual_size, PROT_NONE,
469 MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER, -1, 0));
470 if (virtual_base == MAP_FAILED) {
471 virtual_base = static_cast<u8*>(
472 mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
473 if (virtual_base == MAP_FAILED) {
474 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
475 throw std::bad_alloc{};
476 }
477 }
478#else
479 virtual_base = virtual_map_base = static_cast<u8*>(ChooseVirtualBase(virtual_size)); 476 virtual_base = virtual_map_base = static_cast<u8*>(ChooseVirtualBase(virtual_size));
480 if (virtual_base == MAP_FAILED) { 477 if (virtual_base == MAP_FAILED) {
481 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno)); 478 LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
482 throw std::bad_alloc{}; 479 throw std::bad_alloc{};
483 } 480 }
481#if defined(__linux__)
484 madvise(virtual_base, virtual_size, MADV_HUGEPAGE); 482 madvise(virtual_base, virtual_size, MADV_HUGEPAGE);
485#endif 483#endif
486 484