(address . guix-patches@gnu.org)(name . Philippe SWARTVAGHER)(address . philippe.swartvagher@inria.fr)
gnu/packages/mpi.scm (hwloc-1):
* Update to 1.11.13
* Add upstream patch not in the release to fix one test on BTRFS filesystems
* Use the target of the redirection in the source URL, as advised by `guix lint`
* Apply `guix style`
---
gnu/packages/mpi.scm | 72 +++++++++----------
gnu/packages/patches/hwloc-1-test-btrfs.patch | 55 ++++++++++++++
2 files changed, 87 insertions(+), 40 deletions(-)
create mode 100644 gnu/packages/patches/hwloc-1-test-btrfs.patch
Toggle diff (176 lines)
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 94c32684fb..b0ec1b17ca 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -57,41 +57,37 @@ (define-public hwloc-1
;; to migrate to 2.0.
(package
(name "hwloc")
- (version "1.11.12")
+ (version "1.11.13")
(source (origin
(method url-fetch)
- (uri (string-append "https://www.open-mpi.org/software/hwloc/v"
- (version-major+minor version)
- "/downloads/hwloc-" version ".tar.bz2"))
+ (uri (string-append
+ "https://download.open-mpi.org/release/hwloc/v"
+ (version-major+minor version) "/hwloc-" version ".tar.bz2"))
(sha256
(base32
- "0za1b9lvrm3rhn0lrxja5f64r0aq1qs4m0pxn1ji2mbi8ndppyyx"))))
-
+ "1j69p8a1pjpbpwn4w7l4dfxmaxxqikchjzqw1ncw05zmcmvlnjd4"))
+ (patches (search-patches "hwloc-1-test-btrfs.patch"))))
(properties
- ;; Tell the 'generic-html' updater to monitor this URL for updates.
- `((release-monitoring-url
- . "https://www-lb.open-mpi.org/software/hwloc/current")))
-
+ ;; Tell the 'generic-html' updater to monitor this URL for updates.
+ `((release-monitoring-url #{.}#
+ "https://www-lb.open-mpi.org/software/hwloc/current")))
(build-system gnu-build-system)
- (outputs '("out" ;'lstopo' & co., depends on Cairo, libx11, etc.
- "lib" ;small closure
- "doc" ;400+ section 3 man pages
+ (outputs '("out" ;'lstopo' & co., depends on Cairo, libx11, etc.
+ "lib" ;small closure
+ "doc" ;400+ section 3 man pages
"debug"))
- (inputs
- `(("libx11" ,libx11)
- ("cairo" ,cairo)
- ("ncurses" ,ncurses)
- ("expat" ,expat)
- ,@(if (not (string-prefix? "armhf"
- (or (%current-target-system)
- (%current-system))))
- `(("numactl" ,numactl))
- '())))
+ (inputs `(("libx11" ,libx11) ("cairo" ,cairo)
+ ("ncurses" ,ncurses)
+ ("expat" ,expat)
+ ,@(if (not (string-prefix? "armhf"
+ (or (%current-target-system)
+ (%current-system))))
+ `(("numactl" ,numactl))
+ '())))
(propagated-inputs
- ;; hwloc.pc lists it in 'Requires.private'.
- (list libpciaccess))
- (native-inputs
- (list pkg-config))
+ ;; hwloc.pc lists it in 'Requires.private'.
+ (list libpciaccess))
+ (native-inputs (list pkg-config))
(arguments
`(#:configure-flags '("--localstatedir=/var")
#:phases
@@ -101,32 +97,28 @@ (define-public hwloc-1
;; Arrange to skip 'tests/linux-libnuma', which fails on some
;; machines: <https://github.com/open-mpi/hwloc/issues/213>.
(substitute* "tests/linux-libnuma.c"
- (("numa_available\\(\\)")
- "-1"))
- #t))
+ (("numa_available\\(\\)") "-1")) #t))
(add-after 'install 'refine-libnuma
;; Give -L arguments for libraries to avoid propagation
(lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "lib"))
- (numa (assoc-ref inputs "numactl")))
- (substitute* (map (lambda (f) (string-append out "/" f))
+ (let ((out (assoc-ref outputs "lib")) (numa (assoc-ref inputs
+ "numactl")))
+ (substitute* (map (lambda (f)
+ (string-append out "/" f))
'("lib/pkgconfig/hwloc.pc" "lib/libhwloc.la"))
- (("-lnuma" lib)
- (string-append "-L" numa "/lib " lib))))))
+ (("-lnuma" lib) (string-append "-L" numa "/lib " lib))))))
(add-after 'install 'avoid-circular-references
(lambda* (#:key outputs #:allow-other-keys)
(let ((lib (assoc-ref outputs "lib")))
;; Suppress the 'prefix=' and 'exec_prefix=' lines so that the
;; "lib" output doesn't refer to "out".
(substitute* (string-append lib "/lib/pkgconfig/hwloc.pc")
- (("^.*prefix=.*$")
- ""))
- #t)))
+ (("^.*prefix=.*$") "")) #t)))
(add-after 'install 'move-man3-pages
(lambda* (#:key outputs #:allow-other-keys)
;; Move section 3 man pages to the "doc" output.
- (let ((out (assoc-ref outputs "out"))
- (doc (assoc-ref outputs "doc")))
+ (let ((out (assoc-ref outputs "out")) (doc (assoc-ref outputs
+ "doc")))
(copy-recursively (string-append out "/share/man/man3")
(string-append doc "/share/man/man3"))
(delete-file-recursively (string-append out "/share/man/man3"))
diff --git a/gnu/packages/patches/hwloc-1-test-btrfs.patch b/gnu/packages/patches/hwloc-1-test-btrfs.patch
new file mode 100644
index 0000000000..32f2919abc
--- /dev/null
+++ b/gnu/packages/patches/hwloc-1-test-btrfs.patch
@@ -0,0 +1,55 @@
+From 093316a897a2eb4972a7a3a5888f40975d03f6bf Mon Sep 17 00:00:00 2001
+From: Brice Goglin <Brice.Goglin@inria.fr>
+Date: Tue, 5 Apr 2022 17:39:50 +0200
+Subject: [PATCH] linux: (partial) fix the discovery of hugepages on btrfs
+ fsroot
+
+btrfs always returns 1 in directory stat.st_nlink.
+It breaks make check in tests/linux/ because the hugepages discovery
+uses st_nlink to allocate the memory page_types array.
+
+Always allocate at least 3 page_types slots
+(enough for all known cases, 1 for normal, 2 for huge pages)
+
+(partially cherry-picked from commit 7f351cec9bfe54a031f35ad16c9cfb99784d76dc)
+
+We don't reallocate later if needed as in 2.x commit 7f351cec9bfe54a031f35ad16c9cfb99784d76dc
+because v1.11 doesn't deserve a complete fix. Just commit the minimal change
+so that tests/linux/2i386-2t-hugepagesizecount with HWLOC_PAGESIZE_DEBUG=4096
+doesn't crash in btrfs anymore (test-topology.sh fails during make check if /tmp is in btrfs).
+
+Thanks to Philippe Swartvagher for the report.
+
+Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
+---
+ src/topology-linux.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/topology-linux.c b/src/topology-linux.c
+index 58c275fea..269eca7f5 100644
+--- a/src/topology-linux.c
++++ b/src/topology-linux.c
+@@ -1,6 +1,6 @@
+ /*
+ * Copyright © 2009 CNRS
+- * Copyright © 2009-2019 Inria. All rights reserved.
++ * Copyright © 2009-2022 Inria. All rights reserved.
+ * Copyright © 2009-2013, 2015 Université Bordeaux
+ * Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
+ * Copyright © 2015 Intel, Inc. All rights reserved.
+@@ -2329,7 +2329,14 @@ hwloc_get_procfs_meminfo_info(struct hwloc_topology *topology,
+
+ err = hwloc_stat("/sys/kernel/mm/hugepages", &st, data->root_fd);
+ if (!err) {
+- types = 1 + st.st_nlink-2;
++ types = 1 /* normal non-huge size */ + st.st_nlink - 2 /* ignore . and .. */;
++ if (types < 3)
++ /* some buggy filesystems (e.g. btrfs when reading from fsroot)
++ * return wrong st_nlink for directories (always 1 for btrfs).
++ * use 3 as a sane default (default page + 2 huge sizes).
++ * hwloc_parse_hugepages_info() will extend it if needed.
++ */
++ types = 3;
+ has_sysfs_hugepages = 1;
+ }
+
base-commit: 7409f246e2b0be9a2b3b6ae246385f3f197e5fbb
--
2.30.2