diff options
author | Erik de Castro Lopo <erikd@mega-nerd.com> | 2016-06-13 19:24:18 +1000 |
---|---|---|
committer | Erik de Castro Lopo <erikd@mega-nerd.com> | 2016-06-13 19:24:19 +1000 |
commit | 2bb6ba62b8d0e9c79b59e39e225758cf999eff83 (patch) | |
tree | a4ca5693274b43dc0e6250c71028406c42343d02 /rts | |
parent | 29e1464319f40fe30fd63d8648f0d0a05541abe0 (diff) | |
download | haskell-2bb6ba62b8d0e9c79b59e39e225758cf999eff83.tar.gz |
rts: Fix NUMA when cross compiling
The NUMA code was enabled whenever numa.h and numaif.h are detected.
Unfortunately, the hosts' header files were being detected even then
cross compiling in the absence of a target libnuma.
Fix that by relying on the the presence of libnuma instead of the
presence of the header files. The test for libnuma does `AC_TRY_LINK`
which will fail if the test program (compiled for the target) can't
be linked against libnuma.
Test Plan:
Build on x86_64/linux and make sure NUMA works and cross compile to
armhf/linux.
Reviewers: austin, bgamari, hvr, simonmar
Reviewed By: simonmar
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D2329
Diffstat (limited to 'rts')
-rw-r--r-- | rts/posix/OSMem.c | 8 | ||||
-rw-r--r-- | rts/posix/OSThreads.c | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c index 58310fe0ea..99620ee31e 100644 --- a/rts/posix/OSMem.c +++ b/rts/posix/OSMem.c @@ -306,7 +306,7 @@ void osBindMBlocksToNode( StgWord size STG_UNUSED, uint32_t node STG_UNUSED) { -#ifdef HAVE_NUMAIF_H +#if HAVE_LIBNUMA int ret; StgWord mask = 0; mask |= 1 << node; @@ -548,7 +548,7 @@ void osReleaseHeapMemory(void) rtsBool osNumaAvailable(void) { -#ifdef HAVE_NUMA_H +#if HAVE_LIBNUMA return (numa_available() != -1); #else return rtsFalse; @@ -557,7 +557,7 @@ rtsBool osNumaAvailable(void) uint32_t osNumaNodes(void) { -#ifdef HAVE_NUMA_H +#if HAVE_LIBNUMA return numa_num_configured_nodes(); #else return 1; @@ -566,7 +566,7 @@ uint32_t osNumaNodes(void) StgWord osNumaMask(void) { -#ifdef HAVE_NUMA_H +#if HAVE_LIBNUMA struct bitmask *mask; mask = numa_get_mems_allowed(); if (mask->size > sizeof(StgWord)*8) { diff --git a/rts/posix/OSThreads.c b/rts/posix/OSThreads.c index 72538c1bf3..35ea2bde21 100644 --- a/rts/posix/OSThreads.c +++ b/rts/posix/OSThreads.c @@ -318,7 +318,7 @@ setThreadAffinity (uint32_t n STG_UNUSED, } #endif -#ifdef HAVE_NUMA_H +#if HAVE_LIBNUMA void setThreadNode (uint32_t node) { ASSERT(node < RtsFlags.GcFlags.nNumaNodes); |