commit:     3fb47a688395b40a6cdb5927dce68be79555d62c
Author:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 15 22:42:19 2023 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Sun Jan 15 22:50:05 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3fb47a68

sys-process/numad: add 0.5_p20180531

add a non-ancient version of numad. We take current stable from Fedora
and add just couple of commits on top, nothing major.
current gentoo versions do not even support cgroupv2 and crash on
startup.

remove conf file. systemd unit no longer reads it, systemd users can use
'systemctl edit numad.service' to override args as needed.
openrc file uses conf.d and never used conf file.

add ppc64le patch where node ids can be sparse.

add temporary F_S=3 workaround until #890985 is solved.

Bug: https://bugs.gentoo.org/890985
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 sys-process/numad/Manifest                         |  1 +
 .../files/numad-0.5-fix-sparse-node-ids.patch      | 53 ++++++++++++++++++++
 sys-process/numad/numad-0.5_p20180531.ebuild       | 56 ++++++++++++++++++++++
 3 files changed, 110 insertions(+)

diff --git a/sys-process/numad/Manifest b/sys-process/numad/Manifest
index 9ca70d36ccab..937bd58cf6f8 100644
--- a/sys-process/numad/Manifest
+++ b/sys-process/numad/Manifest
@@ -1 +1,2 @@
 DIST numad-0.5-334278f.tar.bz2 21007 BLAKE2B 
f226e90e0ad664b0cccd82c060b21cc8b7c4b086220f6eee1cd6e421b32f0efe2be11e66ce749142315f8207e19e635a718a41e5a8dd3ecfda02a96dfbd62798
 SHA512 
1b4a577f0713bae1386f2064fcb2dcbfb9453e23e7617f40cfff4e56d02a8c26a48c8d03f1ac7aa36e4ba168824572377f84bc669d1dabdc1820c2cdc4c57911
+DIST numad-0.5_p20180531.tar.gz 29797 BLAKE2B 
455feba97685b0f0c6dd8ce10227d397b14d51d6fc128805648dd94b627ae61c4889ea4cc17667b9a1953c5122d39972172e05d3e782a313ecedbe7f85bfce41
 SHA512 
36b0387369b7d23b28ad8b4bd8b27089c304efb8357ad9f6693ff3098c56a3a88e39b30f70d35688e6090f4917250fd40d1aaac084a91310450412a05b8d6746

diff --git a/sys-process/numad/files/numad-0.5-fix-sparse-node-ids.patch 
b/sys-process/numad/files/numad-0.5-fix-sparse-node-ids.patch
new file mode 100644
index 000000000000..d7d438457826
--- /dev/null
+++ b/sys-process/numad/files/numad-0.5-fix-sparse-node-ids.patch
@@ -0,0 +1,53 @@
+From ab79ec5b6389507b4970d68862abb95d0b2b94c9 Mon Sep 17 00:00:00 2001
+From: Christian Ehrhardt <christian.ehrha...@canonical.com>
+Date: Jun 17 2019 10:37:48 +0000
+Subject: fix sparse node ids
+
+
+CPU-ids can be sparse due to disabling a subset of CPUs.
+On ppc64le this even will make the node_ids sparse, this is actually pretty
+common on ppc64 when SMT is disabled.
+
+Numad has the assumption of cpu/node-ids always being linear and due to that
+accesses the 'node' array out of bounds. That triggers crashes like the
+following:
+
+  Thread 1 "numad" received signal SIGSEGV, Segmentation fault.
+  #0 0x00000fb6cd2779f4 in bind_process_and_migrate_memory (p=0xfb6fc1e0f70)
+    at numad.c:998
+  #1 0x00000fb6cd27d148 in manage_loads () at numad.c:2225
+  #2 0x00000fb6cd2734dc in main (argc=<optimized out>, argv=<optimized out>)
+    at numad.c:2654
+
+Instead of directly indexing with node_id we need to detect which array
+element has the matching node_id and use that.
+
+Signed-off-by: Christian Ehrhardt <christian.ehrha...@canonical.com>
+
+---
+
+diff --git a/numad.c b/numad.c
+index a6a7a5d..524bf61 100644
+--- a/numad.c
++++ b/numad.c
+@@ -995,7 +995,18 @@ int bind_process_and_migrate_memory(process_data_p p) {
+     int node_id = 0;
+     while (nodes) {
+         if (ID_IS_IN_LIST(node_id, p->node_list_p)) {
+-            OR_LISTS(cpu_bind_list_p, cpu_bind_list_p, 
node[node_id].cpu_list_p);
++            int id = -1;
++            for (int node_ix = 0;  (node_ix < num_nodes);  node_ix++) {
++                if (node[node_ix].node_id == node_id) {
++                    id = node_ix;
++                    break;
++                }
++        }
++            if (id == -1) {
++                numad_log(LOG_CRIT, "Node %d is requested, but unknown\n", 
node_id);
++                exit(EXIT_FAILURE);
++            }
++            OR_LISTS(cpu_bind_list_p, cpu_bind_list_p, node[id].cpu_list_p);
+             nodes -= 1;
+         }
+         node_id += 1;
+

diff --git a/sys-process/numad/numad-0.5_p20180531.ebuild 
b/sys-process/numad/numad-0.5_p20180531.ebuild
new file mode 100644
index 000000000000..a778299f0ae4
--- /dev/null
+++ b/sys-process/numad/numad-0.5_p20180531.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic linux-info systemd toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+       EGIT_REPO_URI="https://pagure.io/numad.git";
+       inherit git-r3
+else
+       # sync with fedora (as numad upstream) and add couple of commis.
+       # at time of writing f37 uses 20150602
+       # git archive --format=tar.gz --prefix="${P}/" -o ${P}.tar.gz 
${EGIT_COMMIT}
+       EGIT_COMMIT="d696d6c413c5b47b4bbae79e29ea132e52095af3"
+       SRC_URI="https://dev.gentoo.org/~gyakovlev/distfiles/${P}.tar.gz";
+       KEYWORDS="~amd64 -arm ~arm64 ~ppc64 ~s390 ~x86"
+fi
+
+DESCRIPTION="The NUMA daemon that manages application locality"
+HOMEPAGE="http://fedoraproject.org/wiki/Features/numad";
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+CONFIG_CHECK="~NUMA ~CPUSETS"
+
+PATCHES=(
+       # https://pagure.io/numad/pull-request/3
+       "${FILESDIR}/${PN}-0.5-fix-sparse-node-ids.patch"
+)
+
+src_configure() {
+       tc-export AR CC RANLIB
+
+       # FIXME: https://bugs.gentoo.org/890985
+       # temp workaround
+       filter-flags -D_FORTIFY_SOURCE=3
+       append-cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
+}
+
+src_compile() {
+       emake OPT_CFLAGS="${CFLAGS}"
+}
+
+src_install() {
+       emake prefix="${ED}"/usr install
+
+       newinitd "${FILESDIR}"/numad.initd numad
+       newconfd "${FILESDIR}"/numad.confd numad
+
+       insinto /etc/logrotate.d
+       newins "${FILESDIR}"/numad.logrotated numad
+
+       systemd_dounit numad.service
+}

Reply via email to