diff options
Diffstat (limited to 'src/common/host_memory.cpp')
| -rw-r--r-- | src/common/host_memory.cpp | 19 |
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 | } |