diff options
| author | liamwhite <liamwhite@users.noreply.github.com> | 2023-01-01 10:24:07 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-01 10:24:07 -0500 | 
| commit | 92103d4ff3dfff541a6cb1b2c54a9b0646a35806 (patch) | |
| tree | 770fe1892e16878aa26e130935e93f76ce6e6841 /src/common | |
| parent | b2d8bbe0e0072f8596c7f5665cf0706384b70321 (diff) | |
| parent | fd1831b65bc8a0817776ac41f82b6ff053247b1b (diff) | |
Merge pull request #9533 from merryhime/overcommit
host_memory: mmap changes for virtual_base
Diffstat (limited to 'src/common')
| -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:          }          // Virtual memory initialization -        virtual_base = static_cast<u8*>( -            mmap(nullptr, virtual_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); +#if defined(__FreeBSD__) +        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) {              LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));              throw std::bad_alloc{};          } +        madvise(virtual_base, virtual_size, MADV_HUGEPAGE); +#endif          good = true;      } | 
