bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] physmem: use sysinfo on linux for physmem_total


From: Natanael Copa
Subject: [PATCH v2] physmem: use sysinfo on linux for physmem_total
Date: Fri, 18 Apr 2014 09:16:27 +0000

* lib/physmem.c (physmem_total): Some systems like musl libc does not
(yet) support _SC_PHYS_PAGES. Use the linux syscall sysinfo as fallback
if _SC_PHYS_PAGES or _SC_PAGESIZE fails.

Signed-off-by: Natanael Copa <address@hidden>
---
Changes since v1:
 - prefer use _SC_PHYS_PAGES * _SC_PAGESIZE if available and use
   sysinfo as fallback.
 - check for and use mem_unit, member of struct sysinfo.

 lib/physmem.c | 13 ++++++++++++-
 m4/physmem.m4 |  3 ++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/physmem.c b/lib/physmem.c
index 7a67fb3..53afdd9 100644
--- a/lib/physmem.c
+++ b/lib/physmem.c
@@ -32,8 +32,11 @@
 # include <sys/sysmp.h>
 #endif
 
-#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
+#if HAVE_SYS_SYSINFO_H
 # include <sys/sysinfo.h>
+#endif
+
+#if HAVE_MACHINE_HAL_SYSINFO_H
 # include <machine/hal_sysinfo.h>
 #endif
 
@@ -90,6 +93,14 @@ physmem_total (void)
   }
 #endif
 
+#if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT
+  { /* This works on linux */
+    struct sysinfo si;
+    if (sysinfo(&si) == 0)
+      return (double) si.totalram * (double) si.mem_unit;
+  }
+#endif
+
 #if HAVE_PSTAT_GETSTATIC
   { /* This works on hpux11.  */
     struct pst_static pss;
diff --git a/m4/physmem.m4 b/m4/physmem.m4
index ff3d268..a1179eb 100644
--- a/m4/physmem.m4
+++ b/m4/physmem.m4
@@ -40,6 +40,7 @@ AC_DEFUN([gl_PHYSMEM],
      #endif
     ])
 
-  AC_CHECK_FUNCS([pstat_getstatic pstat_getdynamic sysmp getsysinfo sysctl 
table])
+  AC_CHECK_FUNCS([pstat_getstatic pstat_getdynamic sysmp getsysinfo sysctl 
table sysinfo])
+  AC_CHECK_MEMBERS([struct sysinfo.mem_unit],,, [[#include <sys/sysinfo.h>]])
   AC_REQUIRE([gl_SYS__SYSTEM_CONFIGURATION])
 ])
-- 
1.9.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]