summaryrefslogtreecommitdiff
path: root/rts/posix/OSMem.c
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2013-09-12 23:04:10 -0400
committerAustin Seipp <austin@well-typed.com>2013-10-25 09:14:29 -0500
commit72f8b8d694362890a424f5fa21fef37cee921ecf (patch)
treedf0af2a39e3472d22a0c7b261b40b68adf9412cf /rts/posix/OSMem.c
parent453a092e5f2b7abf35e7b0baa642658e0d545e9d (diff)
downloadhaskell-72f8b8d694362890a424f5fa21fef37cee921ecf.tar.gz
rts: Add getPhysicalMemorySize
Diffstat (limited to 'rts/posix/OSMem.c')
-rw-r--r--rts/posix/OSMem.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c
index 4328d9d262..21d4e5443c 100644
--- a/rts/posix/OSMem.c
+++ b/rts/posix/OSMem.c
@@ -263,6 +263,26 @@ W_ getPageSize (void)
}
}
+/* Returns 0 if physical memory size cannot be identified */
+StgWord64 getPhysicalMemorySize (void)
+{
+ static StgWord64 physMemSize = 0;
+ if (!physMemSize) {
+ long ret;
+ W_ pageSize = getPageSize();
+
+ ret = sysconf(_SC_PHYS_PAGES);
+ if (ret == -1) {
+#if defined(DEBUG)
+ errorBelch("warning: getPhysicsMemorySize: cannot get physical memory size");
+#endif
+ return 0;
+ }
+ physMemSize = ret * pageSize;
+ }
+ return physMemSize;
+}
+
void setExecutable (void *p, W_ len, rtsBool exec)
{
StgWord pageSize = getPageSize();