summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2018-05-03 12:42:24 -0400
committerBen Gamari <ben@smart-cactus.org>2018-05-03 15:01:17 -0400
commit6462d90d01bcb07b8bff63689e8f2c8c20044952 (patch)
treee198502f5c132160ef888c24196625a910bb525e
parent721e82644b49da59e84c409562a63e7df75068bb (diff)
downloadhaskell-6462d90d01bcb07b8bff63689e8f2c8c20044952.tar.gz
rts: Throw better error if --numa is used without libnuma support
Test Plan: Validate, run program with `+RTS --numa` without libnuma support compiled in Reviewers: erikd, simonmar Subscribers: thomie, carter GHC Trac Issues: #14956 Differential Revision: https://phabricator.haskell.org/D4556
-rw-r--r--rts/RtsFlags.c6
-rw-r--r--rts/posix/OSMem.c9
-rw-r--r--rts/sm/OSMem.h1
-rw-r--r--rts/win32/OSMem.c5
4 files changed, 21 insertions, 0 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index 461c41643c..7c292d2044 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -906,6 +906,12 @@ error = true;
}
#if defined(THREADED_RTS)
else if (!strncmp("numa", &rts_argv[arg][2], 4)) {
+ if (!osBuiltWithNumaSupport()) {
+ errorBelch("%s: This GHC build was compiled without NUMA support.",
+ rts_argv[arg]);
+ error = true;
+ break;
+ }
OPTION_SAFE;
StgWord mask;
if (rts_argv[arg][6] == '=') {
diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c
index f603644375..9ecd53e9db 100644
--- a/rts/posix/OSMem.c
+++ b/rts/posix/OSMem.c
@@ -591,6 +591,15 @@ void osReleaseHeapMemory(void)
#endif
+bool osBuiltWithNumaSupport(void)
+{
+#if HAVE_LIBNUMA
+ return true;
+#else
+ return false;
+#endif
+}
+
bool osNumaAvailable(void)
{
#if HAVE_LIBNUMA
diff --git a/rts/sm/OSMem.h b/rts/sm/OSMem.h
index 3b0cee9630..7dd0efdc23 100644
--- a/rts/sm/OSMem.h
+++ b/rts/sm/OSMem.h
@@ -18,6 +18,7 @@ void osFreeAllMBlocks(void);
size_t getPageSize (void);
StgWord64 getPhysicalMemorySize (void);
void setExecutable (void *p, W_ len, bool exec);
+bool osBuiltWithNumaSupport(void); // See #14956
bool osNumaAvailable(void);
uint32_t osNumaNodes(void);
uint64_t osNumaMask(void);
diff --git a/rts/win32/OSMem.c b/rts/win32/OSMem.c
index d05151ce61..c62ee3b7a4 100644
--- a/rts/win32/OSMem.c
+++ b/rts/win32/OSMem.c
@@ -499,6 +499,11 @@ void osReleaseHeapMemory (void)
#endif
+bool osBuiltWithNumaSupport(void)
+{
+ return true;
+}
+
bool osNumaAvailable(void)
{
return osNumaNodes() > 1;