nvdimm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Dan Williams <dan.j.williams@intel.com>,
	linux-nvdimm@lists.01.org, "Jiang, Dave" <dave.jiang@intel.com>
Subject: [ndctl PATCH 2/2] ndctl: fail NUMA filtering when unavailable
Date: Thu, 22 Mar 2018 12:40:07 -0600	[thread overview]
Message-ID: <20180322184007.25667-2-ross.zwisler@linux.intel.com> (raw)
In-Reply-To: <20180322184007.25667-1-ross.zwisler@linux.intel.com>

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 <ross.zwisler@linux.intel.com>
---

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
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

  reply	other threads:[~2018-03-22 18:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-22 18:40 [ndctl PATCH 1/2] ndctl: complete removal of daxctl io Ross Zwisler
2018-03-22 18:40 ` Ross Zwisler [this message]
2018-03-22 22:47   ` [ndctl PATCH 2/2] ndctl: fail NUMA filtering when unavailable Dan Williams
2018-03-22 23:27     ` Ross Zwisler
2018-03-22 23:44       ` Dan Williams
2018-03-22 22:23 ` [ndctl PATCH 1/2] ndctl: complete removal of daxctl io Dan Williams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180322184007.25667-2-ross.zwisler@linux.intel.com \
    --to=ross.zwisler@linux.intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=linux-nvdimm@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).