Explorar o código

Merge pull request #12259 from jbeich/freebsd-mmap

host_memory: unbreak build on FreeBSD x86_64
liamwhite %!s(int64=2) %!d(string=hai) anos
pai
achega
7fb6fbcd87
Modificáronse 1 ficheiros con 15 adicións e 13 borrados
  1. 15 13
      src/common/host_memory.cpp

+ 15 - 13
src/common/host_memory.cpp

@@ -25,6 +25,10 @@
 #include <unistd.h>
 #include "common/scope_exit.h"
 
+#ifndef MAP_NORESERVE
+#define MAP_NORESERVE 0
+#endif
+
 #endif // ^^^ Linux ^^^
 
 #include <mutex>
@@ -404,6 +408,16 @@ static void* ChooseVirtualBase(size_t virtual_size) {
 #else
 
 static void* ChooseVirtualBase(size_t virtual_size) {
+#if defined(__FreeBSD__)
+    void* virtual_base =
+        mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE,
+             MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_ALIGNED_SUPER, -1, 0);
+
+    if (virtual_base != MAP_FAILED) {
+        return virtual_base;
+    }
+#endif
+
     return mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE,
                 MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
 }
@@ -459,24 +473,12 @@ public:
         }
 
         // Virtual memory initialization
-#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 = virtual_map_base = static_cast<u8*>(ChooseVirtualBase(virtual_size));
         if (virtual_base == MAP_FAILED) {
             LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
             throw std::bad_alloc{};
         }
+#if defined(__linux__)
         madvise(virtual_base, virtual_size, MADV_HUGEPAGE);
 #endif