Instead of just failing to find namespaces when trying to filter by NUMA
node when CONFIG_NUMA wasn't enabled in the kernel, instead fail loudly as
numactl does:

  # numactl --cpunodebind=0 ls
  numactl: This system does not support NUMA policy

Signed-off-by: Ross Zwisler <[email protected]>
---

This enabling requires numactl to create a pkg-config file, which it
currently does not.  This support is added by the following patch which
I just sent out:

https://patchwork.kernel.org/patch/10302135/

---
 Makefile.am.in    |  3 ++-
 autogen.sh        |  3 ++-
 configure.ac      | 12 ++++++++++++
 ndctl.spec.in     |  3 ++-
 ndctl/Makefile.am |  3 ++-
 util/filter.c     | 11 +++++++++++
 6 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/Makefile.am.in b/Makefile.am.in
index 6c5229d..b927e17 100644
--- a/Makefile.am.in
+++ b/Makefile.am.in
@@ -15,7 +15,8 @@ AM_CPPFLAGS = \
        $(KMOD_CFLAGS) \
        $(UDEV_CFLAGS) \
        $(UUID_CFLAGS) \
-       $(JSON_CFLAGS)
+       $(JSON_CFLAGS) \
+       $(NUMA_CFLAGS)
 
 AM_CFLAGS = ${my_CFLAGS} \
        -fvisibility=hidden \
diff --git a/autogen.sh b/autogen.sh
index a23cf53..46515b2 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -17,7 +17,8 @@ libdir() {
 
 args="--prefix=/usr \
 --sysconfdir=/etc \
---libdir=$(libdir /usr/lib)"
+--libdir=$(libdir /usr/lib) \
+--with-numa"
 
 echo
 echo "----------------------------------------------------------------"
diff --git a/configure.ac b/configure.ac
index 3eaac32..af21cb6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,6 +94,18 @@ PKG_CHECK_MODULES([UDEV], [libudev])
 PKG_CHECK_MODULES([UUID], [uuid])
 PKG_CHECK_MODULES([JSON], [json-c])
 
+AC_ARG_WITH([numa],
+       AS_HELP_STRING([--with-numa],
+                      [Install with NUMA support. @<:@default=no@:>@]),
+       [],
+       [with_numa=no])
+
+if test "x$with_numa" = "xyes"; then
+       PKG_CHECK_MODULES([NUMA], [numa])
+       AC_DEFINE([WITH_NUMA], [1], [with NUMA support])
+fi
+AM_CONDITIONAL([WITH_NUMA], [test "x$with_numa" = "xyes"])
+
 AC_ARG_WITH([bash-completion-dir],
        AS_HELP_STRING([--with-bash-completion-dir[=PATH]],
                [Install the bash auto-completion script in this directory. 
@<:@default=yes@:>@]),
diff --git a/ndctl.spec.in b/ndctl.spec.in
index e2c879c..3fcb4d8 100644
--- a/ndctl.spec.in
+++ b/ndctl.spec.in
@@ -20,6 +20,7 @@ BuildRequires:        pkgconfig(libudev)
 BuildRequires: pkgconfig(uuid)
 BuildRequires: pkgconfig(json-c)
 BuildRequires: pkgconfig(bash-completion)
+BuildRequires: pkgconfig(numa)
 
 %description
 Utility library for managing the "libnvdimm" subsystem.  The "libnvdimm"
@@ -90,7 +91,7 @@ control API for these devices.
 %build
 echo %{version} > version
 ./autogen.sh
-%configure --disable-static --disable-silent-rules
+%configure --disable-static --disable-silent-rules --with-numa
 make %{?_smp_mflags}
 
 %install
diff --git a/ndctl/Makefile.am b/ndctl/Makefile.am
index 213cabd..6b891f8 100644
--- a/ndctl/Makefile.am
+++ b/ndctl/Makefile.am
@@ -29,7 +29,8 @@ ndctl_LDADD =\
        ../libutil.a \
        $(UUID_LIBS) \
        $(KMOD_LIBS) \
-       $(JSON_LIBS)
+       $(JSON_LIBS) \
+       $(NUMA_LIBS)
 
 if ENABLE_TEST
 ndctl_SOURCES += ../test/libndctl.c \
diff --git a/util/filter.c b/util/filter.c
index 291d7ed..512f927 100644
--- a/util/filter.c
+++ b/util/filter.c
@@ -10,6 +10,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  */
+#include <numa.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -328,6 +329,16 @@ int util_filter_walk(struct ndctl_ctx *ctx, struct 
util_filter_ctx *fctx,
        }
 
        if (param->numa_node && strcmp(param->numa_node, "all") != 0) {
+#ifdef WITH_NUMA
+               if (numa_available() < 0) {
+                       error("This system does not support NUMA");
+#else
+               {
+                       error("ndctl was not configured with NUMA support");
+#endif
+                       return -EINVAL;
+               }
+
                numa_node = strtol(param->numa_node, &end, 0);
                if (end == param->numa_node || end[0]) {
                        error("invalid numa_node: '%s'\n", param->numa_node);
-- 
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to