@@ -103,12 +103,30 @@ AS_IF([test "x$enable_test" = "xyes"],
AM_CONDITIONAL([ENABLE_TEST], [test "x$enable_test" = "xyes"])
AC_CHECK_DECLS([BUS_MCEERR_AR], [enable_bus_mc_err=yes], [], [[#include <signal.h>]])
+AC_CHECK_DECLS([MAP_SHARED_VALIDATE], [kernel_map_shared_validate=yes], [], [[#include <linux/mman.h>]])
+AC_CHECK_DECLS([MAP_SYNC], [kernel_map_sync=yes], [], [[#include <linux/mman.h>]])
+AS_UNSET([ac_cv_have_decl_MAP_SHARED_VALIDATE])
+AS_UNSET([ac_cv_have_decl_MAP_SYNC])
+AC_CHECK_DECLS([MAP_SHARED_VALIDATE], [enable_map_shared_validate=yes], [], [[#include <sys/mman.h>]])
AC_CHECK_DECLS([MAP_SYNC], [enable_map_sync=yes], [], [[#include <sys/mman.h>]])
-AS_IF([test "x$enable_bus_mc_err" = "xyes" -a "x$enable_map_sync" = "xyes"],
+if test "x$kernel_map_shared_validate" = "xyes" -a "x$enable_map_shared_validate" != "xyes" ; then
+ AC_MSG_WARN([MAP_SHARED_VALIDATE supported by kernel but not by <sys/mman.h>, consider installing glibc-2.28 or later.])
+fi
+if test "x$kernel_map_shared_validate" != "xyes" -a "x$enable_map_shared_validate" != "xyes" ; then
+ AC_MSG_WARN([MAP_SHARED_VALIDATE not supported by kernel, consider installing kernel-4.15 or later.])
+fi
+if test "x$kernel_map_sync" = "xyes" -a "x$enable_map_sync" != "xyes" ; then
+ AC_MSG_WARN([MAP_SYNC supported by kernel but not by <sys/mman.h>, consider installing glibc-2.28 or later.])
+fi
+if test "x$kernel_map_sync" != "xyes" -a "x$enable_map_sync" != "xyes" ; then
+ AC_MSG_WARN([MAP_SYNC not supported by kernel or architecture, consider installing kernel-4.15 or later.])
+fi
+
+AS_IF([test "x$enable_bus_mc_err" = "xyes" -a "x$enable_map_sync" = "xyes" -a "x$enable_map_shared_validate" = "xyes"],
[AC_DEFINE([ENABLE_POISON], [1], [ndctl test poison support])])
AM_CONDITIONAL([ENABLE_POISON],
- [test "x$enable_bus_mc_err" = "xyes" -a "x$enable_map_sync" = "xyes"])
+ [test "x$enable_bus_mc_err" = "xyes" -a "x$enable_map_sync" = "xyes" -a "x$enable_map_shared_validate" = "xyes"])
PKG_CHECK_MODULES([KMOD], [libkmod])
PKG_CHECK_MODULES([UDEV], [libudev])
Some ndctl tests use two new mmap() flags named MAP_SHARED_VALIDATE and MAP_SYNC that were added by linux kernel-4.15, intended to be defined for applications by sys/mman.h. However, these do not always exist; the distro must have glibc-2.28 and the architecture must support MAP_SYNC. In glibc-2.28, MAP_SHARED_VALIDATE was incorporated for all architectures while MAP_SYNC was left out for these: alpha hppa mips powerpc sparc tile See these git://sourceware.org/git/glibc.git commits on 2018-02-06: e76def72eb74 ("Add MAP_SYNC from Linux 4.15.") 92669d6ee3f2 ("Add MAP_SHARED_VALIDATE from Linux 4.15.") Expand the current check for MAP_SYNC to check both MAP_SHARED_VALIDATE and MAP_SYNC in <linux/mman.h> and <sys/mman.h> and suggest remedies for each possible combination of results: kernel glibc where defined? 4.14 2.17 neither 4.14 2.18 neither 4.15 2.17 <linux/mman.h> 4.15 2.18 <sys/mman.h> and <linux/mman.h> Fixes: 94679e6b78aa ("ndctl, test: check availability of MAP_SYNC for poison test") Signed-off-by: Robert Elliott <elliott@hpe.com> --- configure.ac | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)