From b8ec4808e0f8352dc4aa7f4dff067be56232179d Mon Sep 17 00:00:00 2001 From: basebuilder_pel7ppc64bebuilder0 Date: Thu, 31 May 2018 22:38:40 +0200 Subject: [PATCH] numactl package update Signed-off-by: basebuilder_pel7ppc64bebuilder0 --- ...ma_node_to_cpu_skip_over_nonexisting.patch | 50 +++ ...en-numa-nodes-not-sequential-or-cont.patch | 130 ++++++++ ...press-warnings-for-non-existing-node.patch | 59 ++++ SOURCES/numactl-2.0.8-localalloc-man.patch | 17 + .../numactl-2.0.9-hw-detect-segfault.patch | 30 ++ .../numactl-2.0.9-mpol-bind-preferred.patch | 312 ++++++++++++++++++ SPECS/numactl.spec | 295 +++++++++++++++++ 7 files changed, 893 insertions(+) create mode 100644 SOURCES/numactl-2.0.10-numa_node_to_cpu_skip_over_nonexisting.patch create mode 100644 SOURCES/numactl-2.0.11-Segment-fault-when-numa-nodes-not-sequential-or-cont.patch create mode 100644 SOURCES/numactl-2.0.11-libnuma-supress-warnings-for-non-existing-node.patch create mode 100644 SOURCES/numactl-2.0.8-localalloc-man.patch create mode 100644 SOURCES/numactl-2.0.9-hw-detect-segfault.patch create mode 100644 SOURCES/numactl-2.0.9-mpol-bind-preferred.patch create mode 100644 SPECS/numactl.spec diff --git a/SOURCES/numactl-2.0.10-numa_node_to_cpu_skip_over_nonexisting.patch b/SOURCES/numactl-2.0.10-numa_node_to_cpu_skip_over_nonexisting.patch new file mode 100644 index 00000000..77b2798d --- /dev/null +++ b/SOURCES/numactl-2.0.10-numa_node_to_cpu_skip_over_nonexisting.patch @@ -0,0 +1,50 @@ +From 32075635db57c3d5efe12f8fb569af857e01ccad Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Wed, 14 Jan 2015 09:53:47 +0100 +Subject: [PATCH] libnuma: add check for return value of numa_node_to_cpus + +When numa_node_to_cpu() has been called on machine with non-contiguous +nodes, it returned the first node which wasn't present on machine. +Now, return code is checked and code skips over non-existing nodes to +the right one. + +Also, caching of numa_node_to_cpus_v2() result while non-zero error had +been returned was disabled. + +Signed-off-by: Petr Holasek + +Tested by Cliff Wickman (on attica.sgi.com) +--- + libnuma.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff -up numactl-2.0.9/libnuma.c.orig numactl-2.0.9/libnuma.c +--- numactl-2.0.9/libnuma.c.orig 2013-10-08 23:34:57.000000000 +0200 ++++ numactl-2.0.9/libnuma.c 2015-07-01 15:14:44.937178134 +0200 +@@ -1380,8 +1380,12 @@ numa_node_to_cpus_v2(int node, struct bi + if (mask != buffer) + numa_bitmask_free(mask); + } else { +- node_cpu_mask_v2[node] = mask; +- } ++ /* we don't want to cache faulty result */ ++ if (!err) ++ node_cpu_mask_v2[node] = mask; ++ else ++ numa_bitmask_free(mask); ++ } + return err; + } + __asm__(".symver numa_node_to_cpus_v2,numa_node_to_cpus@@libnuma_1.2"); +@@ -1403,7 +1407,10 @@ int numa_node_of_cpu(int cpu) + bmp = numa_bitmask_alloc(ncpus); + nnodes = numa_max_node(); + for (node = 0; node <= nnodes; node++){ +- numa_node_to_cpus_v2_int(node, bmp); ++ if (numa_node_to_cpus_v2_int(node, bmp) < 0) { ++ /* It's possible for the node to not exist */ ++ continue; ++ } + if (numa_bitmask_isbitset(bmp, cpu)){ + ret = node; + goto end; diff --git a/SOURCES/numactl-2.0.11-Segment-fault-when-numa-nodes-not-sequential-or-cont.patch b/SOURCES/numactl-2.0.11-Segment-fault-when-numa-nodes-not-sequential-or-cont.patch new file mode 100644 index 00000000..973a0f91 --- /dev/null +++ b/SOURCES/numactl-2.0.11-Segment-fault-when-numa-nodes-not-sequential-or-cont.patch @@ -0,0 +1,130 @@ +From b608687037d873ad82d6318f231b3d6612e8601d Mon Sep 17 00:00:00 2001 +From: Seeteena Thoufeek +Date: Wed, 21 Dec 2016 12:48:11 +0530 +Subject: [PATCH 1/1] Segment fault when numa nodes not sequential or + contiguous + +While trying to get stat of the guest process (configured with hugepages), numastat fails + +==================== +Environment details +==================== +Linux lep8b 4.8.0-30-generic #32-Ubuntu SMP Fri Dec 2 03:43:46 UTC 2016 ppc64le ppc64le ppc64le GNU/Linu + +===== +Issue +===== +2016-12-14 07:02:56,396 process L0368 INFO | Running 'numastat 61257' +2016-12-14 07:02:56,402 process L0462 DEBUG| [stderr] *** Error in `numastat': double free or corruption (out): 0x00000100265005a0 *** +2016-12-14 07:02:56,403 process L0462 DEBUG| [stdout] +2016-12-14 07:02:56,403 process L0482 INFO | Command 'numastat 61257' finished with -6 after 0.00309896469116s +2016-12-14 07:02:56,403 process L0462 DEBUG| [stdout] Per-node process memory usage (in MBs) for PID 61257 (qemu-system-ppc) +2016-12-14 07:02:56,404 process L0462 DEBUG| [stderr] ======= Backtrace: ========= +2016-12-14 07:02:56,404 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(+0x86d54)[0x3fff9a736d54] +2016-12-14 07:02:56,404 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(+0x93c30)[0x3fff9a743c30] +2016-12-14 07:02:56,404 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(cfree+0x68)[0x3fff9a748218] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(fclose+0x1c8)[0x3fff9a727d68] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] numastat(+0x7aa4)[0x401d7aa4] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] numastat(+0x2388)[0x401d2388] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(+0x2291c)[0x3fff9a6d291c] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] /lib/powerpc64le-linux-gnu/libc.so.6(__libc_start_main+0xb8)[0x3fff9a6d2b18] +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] ======= Memory map: ======== +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] 401d0000-401e0000 r-xp 00000000 08:92 40325510 /usr/bin/numastat +2016-12-14 07:02:56,405 process L0462 DEBUG| [stderr] 401e0000-401f0000 r--p 00000000 08:92 40325510 /usr/bin/numastat +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 401f0000-40200000 rw-p 00010000 08:92 40325510 /usr/bin/numastat +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 10026500000-10026530000 rw-p 00000000 00:00 0 [heap] +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 3fff9a6b0000-3fff9a860000 r-xp 00000000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 3fff9a860000-3fff9a870000 ---p 001b0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 3fff9a870000-3fff9a880000 r--p 001b0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 3fff9a880000-3fff9a890000 rw-p 001c0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +2016-12-14 07:02:56,406 process L0462 DEBUG| [stderr] 3fff9a8b0000-3fff9a8c0000 rw-p 00000000 00:00 0 +2016-12-14 07:02:56,407 process L0462 DEBUG| [stderr] 3fff9a8c0000-3fff9a8e0000 r-xp 00000000 00:00 0 [vdso] +2016-12-14 07:02:56,407 process L0462 DEBUG| [stderr] 3fff9a8e0000-3fff9a920000 r-xp 00000000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +2016-12-14 07:02:56,407 process L0462 DEBUG| [stderr] 3fff9a920000-3fff9a930000 r--p 00030000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +2016-12-14 07:02:56,407 process L0462 DEBUG| [stderr] 3fff9a930000-3fff9a940000 rw-p 00040000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +2016-12-14 07:02:56,407 process L0462 DEBUG| [stderr] 3fffdd320000-3fffdd350000 rw-p 00000000 00:00 0 [stack] + +============= +Recreation Steps +============= +1. Configure host with hugepages +2. Start a guest and attach following memory device xml, + +83886080163840 +3. Set the rules in guest +4. execute numastat of guest pid + +Expected Result : +Provide PID numastat + +Per-node process memory usage (in MBs) for PID 55119 (qemu-system-ppc) +Node 0 Node 1 Node 16 +--------------- --------------- --------------- +Huge 0.00 0.00 0.00 +Heap 2.00 0.38 0.00 +Stack 0.00 0.00 0.00 +Private 31800.12 183.06 0.00 +---------------- --------------- --------------- --------------- +Total 31802.12 183.44 0.00 + +Node 17 Total +--------------- --------------- +Huge 0.00 0.00 +Heap 0.00 15.25 +Stack 0.00 0.06 +Private 0.00 33169.31 +---------------- --------------- --------------- +Total 0.00 34345.00 +*** Error in `numastat': free(): invalid next size (fast): 0x000001003f2c0580 *** +======= Backtrace: ========= +/lib/powerpc64le-linux-gnu/libc.so.6(+0x86d54)[0x3fff82866d54] +/lib/powerpc64le-linux-gnu/libc.so.6(+0x93c30)[0x3fff82873c30] +/lib/powerpc64le-linux-gnu/libc.so.6(cfree+0x68)[0x3fff82878218] +numastat(+0x4244)[0x5adc4244] +numastat(+0x7d24)[0x5adc7d24] +numastat(+0x2388)[0x5adc2388] +/lib/powerpc64le-linux-gnu/libc.so.6(+0x2291c)[0x3fff8280291c] +/lib/powerpc64le-linux-gnu/libc.so.6(__libc_start_main+0xb8)[0x3fff82802b18] +======= Memory map: ======== +5adc0000-5add0000 r-xp 00000000 08:92 40325510 /usr/bin/numastat +5add0000-5ade0000 r--p 00000000 08:92 40325510 /usr/bin/numastat +5ade0000-5adf0000 rw-p 00010000 08:92 40325510 /usr/bin/numastat +1003f2c0000-1003f2f0000 rw-p 00000000 00:00 0 [heap] +3fff827e0000-3fff82990000 r-xp 00000000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +3fff82990000-3fff829a0000 ---p 001b0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +3fff829a0000-3fff829b0000 r--p 001b0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +3fff829b0000-3fff829c0000 rw-p 001c0000 08:92 25745199 /lib/powerpc64le-linux-gnu/libc-2.24.so +3fff829e0000-3fff829f0000 rw-p 00000000 00:00 0 +3fff829f0000-3fff82a10000 r-xp 00000000 00:00 0 [vdso] +3fff82a10000-3fff82a50000 r-xp 00000000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +3fff82a50000-3fff82a60000 r--p 00030000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +3fff82a60000-3fff82a70000 rw-p 00040000 08:92 25745195 /lib/powerpc64le-linux-gnu/ld-2.24.so +3fffc3b90000-3fffc3bc0000 rw-p 00000000 00:00 0 [stack] +Aborted + +Signed-off-by: Seeteena Thoufeek +Signed-off-by: Andi Kleen +--- + numastat.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/numastat.c b/numastat.c +index 1924dba..e0a5639 100644 +--- a/numastat.c ++++ b/numastat.c +@@ -1054,7 +1054,12 @@ void show_process_info() { + } else { + tmp_row = header_rows + pid_ix; + } +- int tmp_col = header_cols + node_num; ++ // Don't assume nodes are sequential or contiguous. ++ // Need to find correct tmp_col from node_ix_map ++ int i = 0; ++ while(node_ix_map[i++] != node_num) ++ ; ++ int tmp_col = header_cols + i - 1; + double_addto(&table, tmp_row, tmp_col, value); + double_addto(&table, tmp_row, total_col_ix, value); + double_addto(&table, total_row_ix, tmp_col, value); +-- +2.14.0 diff --git a/SOURCES/numactl-2.0.11-libnuma-supress-warnings-for-non-existing-node.patch b/SOURCES/numactl-2.0.11-libnuma-supress-warnings-for-non-existing-node.patch new file mode 100644 index 00000000..575fdeec --- /dev/null +++ b/SOURCES/numactl-2.0.11-libnuma-supress-warnings-for-non-existing-node.patch @@ -0,0 +1,59 @@ +From a69169698c4c086b7a74602938b329fb055fdf60 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Mon, 7 Dec 2015 15:32:29 +0100 +Subject: [PATCH] libnuma: supress warnings for non-existing node + +When calling numa_node_to_cpus on non-existing node number (e.g. for +non-contiguous node numbers), a bit confusing warning is supressed. Since +warnings are implemented as weak functions they cannot be overriden when +using dlsym interface. + +Signed-off-by: Petr Holasek +--- + libnuma.c | 24 ++++++++++++++---------- + 1 file changed, 14 insertions(+), 10 deletions(-) + +diff --git a/libnuma.c b/libnuma.c +index 3717d5b..549525c 100644 +--- a/libnuma.c ++++ b/libnuma.c +@@ -1276,11 +1276,13 @@ numa_node_to_cpus_v1(int node, unsigned long *buffer, int bufferlen) + sprintf(fn, "/sys/devices/system/node/node%d/cpumap", node); + f = fopen(fn, "r"); + if (!f || getdelim(&line, &len, '\n', f) < 1) { +- numa_warn(W_nosysfs2, +- "/sys not mounted or invalid. Assuming one node: %s", +- strerror(errno)); +- numa_warn(W_nosysfs2, +- "(cannot open or correctly parse %s)", fn); ++ if (numa_bitmask_isbitset(numa_nodes_ptr, node)) { ++ numa_warn(W_nosysfs2, ++ "/sys not mounted or invalid. Assuming one node: %s", ++ strerror(errno)); ++ numa_warn(W_nosysfs2, ++ "(cannot open or correctly parse %s)", fn); ++ } + bitmask.maskp = (unsigned long *)mask; + bitmask.size = buflen_needed * 8; + numa_bitmask_setall(&bitmask); +@@ -1355,11 +1357,13 @@ numa_node_to_cpus_v2(int node, struct bitmask *buffer) + sprintf(fn, "/sys/devices/system/node/node%d/cpumap", node); + f = fopen(fn, "r"); + if (!f || getdelim(&line, &len, '\n', f) < 1) { +- numa_warn(W_nosysfs2, +- "/sys not mounted or invalid. Assuming one node: %s", +- strerror(errno)); +- numa_warn(W_nosysfs2, +- "(cannot open or correctly parse %s)", fn); ++ if (numa_bitmask_isbitset(numa_nodes_ptr, node)) { ++ numa_warn(W_nosysfs2, ++ "/sys not mounted or invalid. Assuming one node: %s", ++ strerror(errno)); ++ numa_warn(W_nosysfs2, ++ "(cannot open or correctly parse %s)", fn); ++ } + numa_bitmask_setall(mask); + err = -1; + } +-- +2.4.3 diff --git a/SOURCES/numactl-2.0.8-localalloc-man.patch b/SOURCES/numactl-2.0.8-localalloc-man.patch new file mode 100644 index 00000000..34493cfb --- /dev/null +++ b/SOURCES/numactl-2.0.8-localalloc-man.patch @@ -0,0 +1,17 @@ +diff -up numactl-2.0.8/numactl.8.orig numactl-2.0.8/numactl.8 +--- numactl-2.0.8/numactl.8.orig 2013-08-19 18:09:06.810007252 +0200 ++++ numactl-2.0.8/numactl.8 2013-08-19 18:09:36.746029049 +0200 +@@ -153,7 +153,11 @@ A !N-N notation indicates the inverse of + except N-N. If used with + notation, specify !+N-N. + .TP + .B \-\-localalloc, \-l +-Always allocate on the current node. ++Falls back to the system default which is local allocation by using ++.I MPOL_DEFAULT ++policy. See ++.I mbind(2) ++for details. + .TP + .B \-\-preferred=node + Preferably allocate memory on +diff -up numactl-2.0.8/numactl.8.orig.orig numactl-2.0.8/numactl.8.orig diff --git a/SOURCES/numactl-2.0.9-hw-detect-segfault.patch b/SOURCES/numactl-2.0.9-hw-detect-segfault.patch new file mode 100644 index 00000000..7ddf3f5b --- /dev/null +++ b/SOURCES/numactl-2.0.9-hw-detect-segfault.patch @@ -0,0 +1,30 @@ +From: Elena Ufimtseva +To: linux-numa@vger.kernel.org +Cc: cpw@sgi.com, Elena Ufimtseva +Subject: [PATCH] numactl: checks for numa when showing hardware +Date: Sat, 23 Nov 2013 03:10:41 -0500 + +Checks if NUMA is available before printing hardware, +otherwise segfault occurs. + +Signed-off-by: Elena Ufimtseva +--- + numactl.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/numactl.c b/numactl.c +index 97955a4..f30b53c 100755 +--- a/numactl.c ++++ b/numactl.c +@@ -242,6 +242,11 @@ void hardware(void) + int prevnode=-1; + int skip=0; + int maxnode = numa_max_node(); ++ ++ if (numa_available() < 0) { ++ printf("No NUMA available on this system\n"); ++ exit(1); ++ } + + for (i=0; i<=maxnode; i++) + if (numa_bitmask_isbitset(numa_nodes_ptr, i)) diff --git a/SOURCES/numactl-2.0.9-mpol-bind-preferred.patch b/SOURCES/numactl-2.0.9-mpol-bind-preferred.patch new file mode 100644 index 00000000..b29e9724 --- /dev/null +++ b/SOURCES/numactl-2.0.9-mpol-bind-preferred.patch @@ -0,0 +1,312 @@ +Date: Tue, 15 Jul 2014 13:53:14 -0400 +From: Bill Gray +To: linux-numa@vger.kernel.org +Cc: Cliff Wickman +Subject: [PATCH] Fix numactl --show preferred node for case MPOL_BIND + +This patch is mostly to fix an issue in "numactl --show" which did not +print the correct preferred node: + +# for i in 0 1 2 3 4 5 6 7 ; do numactl -N$i -m$i numactl -s; done | +grep preferred +preferred node: 4 +preferred node: 4 +preferred node: 4 +preferred node: 4 +preferred node: 4 +preferred node: 4 +preferred node: 4 +preferred node: 4 + +# for i in 0 1 2 3 4 5 6 7 ; do ./numactl -N$i -m$i ./numactl -s; done | +grep preferred +preferred node: 0 +preferred node: 1 +preferred node: 2 +preferred node: 3 +preferred node: 4 +preferred node: 5 +preferred node: 6 +preferred node: 7 + +Patch Changes: +- eliminated bitops.[cho] +- eliminated redundant printcpumask() (which duplicated printmask()) +- added find_first() to util.[ch] +- fixed some compiler warnings + +These files can be deleted: +- Only in numactl-2.0.9-orig/: bitops.c +- Only in numactl-2.0.9-orig/: bitops.h +- Only in numactl-2.0.9-orig/: numastat +- Only in numactl-2.0.9-orig/test: move_pages + +diffstats: + Makefile | 12 ++++++------ + bitops.c | 13 ------------- + bitops.h | 13 ------------- + migspeed.c | 4 +--- + numactl.c | 5 ++--- + numaint.h | 2 +- + test/move_pages |binary + Makefile | 12 ++++++------ + bitops.c | 13 ------------- + bitops.h | 13 ------------- + migspeed.c | 4 +--- + numactl.c | 5 ++--- + numaint.h | 2 +- + test/nodemap.c | 1 - + test/tbitmap.c | 10 +++++++++- + util.c | 14 +++++--------- + util.h | 2 +- + 10 files changed, 25 insertions(+), 51 deletions(-) + +Signed-off-by: Bill Gray + +Index: numactl-dev/bitops.c +=================================================================== +--- numactl-dev.orig/bitops.c ++++ /dev/null +@@ -1,13 +0,0 @@ +-#include "bitops.h" +- +-/* extremly dumb */ +-int find_first_bit(void *m, int max) +-{ +- unsigned long *mask = m; +- int i; +- for (i = 0; i < max; i++) { +- if (test_bit(i, mask)) +- break; +- } +- return i; +-} +Index: numactl-dev/bitops.h +=================================================================== +--- numactl-dev.orig/bitops.h ++++ /dev/null +@@ -1,13 +0,0 @@ +-#ifndef BITOPS_H +-#define BITOPS_H 1 +- +-#define BITS_PER_LONG (sizeof(unsigned long) * 8) +-#define BYTES_PER_LONG (sizeof(long)) +- +-#define test_bit(i,p) ((p)[(i) / BITS_PER_LONG] & (1UL << ((i)%BITS_PER_LONG))) +-#define set_bit(i,p) ((p)[(i) / BITS_PER_LONG] |= (1UL << ((i)%BITS_PER_LONG))) +-#define clear_bit(i,p) ((p)[(i) / BITS_PER_LONG] &= ~(1UL << ((i)%BITS_PER_LONG))) +- +-extern int find_first_bit(void *mask, int max); +- +-#endif +Index: numactl-dev/Makefile +=================================================================== +--- numactl-dev.orig/Makefile ++++ numactl-dev/Makefile +@@ -23,7 +23,7 @@ ifeq ($(THREAD_SUPPORT),yes) + endif + + CLEANFILES := numactl.o libnuma.o numactl numademo numademo.o distance.o \ +- memhog libnuma.so libnuma.so.1 numamon numamon.o syscall.o bitops.o \ ++ memhog libnuma.so libnuma.so.1 numamon numamon.o syscall.o \ + memhog.o util.o stream_main.o stream_lib.o shm.o stream clearcache.o \ + test/pagesize test/tshared test/mynode.o test/tshared.o mt.o empty.o empty.c \ + test/mynode test/ftok test/prefered test/randmap \ +@@ -32,8 +32,8 @@ CLEANFILES := numactl.o libnuma.o numact + test/mbind_mig_pages test/migrate_pages \ + migratepages migspeed migspeed.o libnuma.a \ + test/move_pages test/realloc_test sysfs.o affinity.o \ +- test/node-parse rtnetlink.o test/A numastat +-SOURCES := bitops.c libnuma.c distance.c memhog.c numactl.c numademo.c \ ++ test/node-parse rtnetlink.o test/A numastat numastat.o ++SOURCES := libnuma.c distance.c memhog.c numactl.c numademo.c \ + numamon.c shm.c stream_lib.c stream_main.c syscall.c util.c mt.c \ + clearcache.c test/*.c affinity.c sysfs.c rtnetlink.c numastat.c + +@@ -51,11 +51,11 @@ all: numactl migratepages migspeed libnu + test/mbind_mig_pages test/migrate_pages test/realloc_test libnuma.a \ + test/node-parse numastat + +-numactl: numactl.o util.o shm.o bitops.o libnuma.so ++numactl: numactl.o util.o shm.o libnuma.so + + numastat: CFLAGS += -std=gnu99 + +-migratepages: migratepages.c util.o bitops.o libnuma.so ++migratepages: migratepages.c util.o libnuma.so + + migspeed: LDLIBS += -lrt + migspeed: migspeed.o util.o libnuma.so +@@ -129,7 +129,7 @@ test/nodemap: test/nodemap.c libnuma.so + + test/distance: test/distance.c libnuma.so + +-test/tbitmap: test/tbitmap.c libnuma.so ++test/tbitmap: test/tbitmap.c libnuma.so util.o + + test/move_pages: test/move_pages.c libnuma.so + +Index: numactl-dev/migspeed.c +=================================================================== +--- numactl-dev.orig/migspeed.c ++++ numactl-dev/migspeed.c +@@ -65,7 +65,6 @@ int main(int argc, char *argv[]) + { + char *p; + int option; +- int error = 0; + struct timespec result; + unsigned long bytes; + double duration, mbytes; +@@ -82,8 +81,7 @@ int main(int argc, char *argv[]) + switch (option) { + case 'h' : + case '?' : +- error = 1; +- break; ++ usage(); + case 'v' : + verbose++; + break; +Index: numactl-dev/numactl.c +=================================================================== +--- numactl-dev.orig/numactl.c ++++ numactl-dev/numactl.c +@@ -119,7 +119,7 @@ void show_physcpubind(void) + } + err("sched_get_affinity"); + } +- printcpumask("physcpubind", cpubuf); ++ printmask("physcpubind", cpubuf); + break; + } + } +@@ -130,7 +130,6 @@ void show(void) + struct bitmask *membind, *interleave, *cpubind; + unsigned long cur; + int policy; +- int numa_num_nodes = numa_num_possible_nodes(); + + if (numa_available() < 0) { + show_physcpubind(); +@@ -166,7 +165,7 @@ void show(void) + printf("%ld (interleave next)\n",cur); + break; + case MPOL_BIND: +- printf("%d\n", find_first_bit(&membind, numa_num_nodes)); ++ printf("%d\n", find_first(membind)); + break; + } + if (policy == MPOL_INTERLEAVE) { +Index: numactl-dev/numaint.h +=================================================================== +--- numactl-dev.orig/numaint.h ++++ numactl-dev/numaint.h +@@ -1,5 +1,4 @@ + /* Internal interfaces of libnuma */ +-#include "bitops.h" + + extern int numa_sched_setaffinity_v1(pid_t pid, unsigned len, const unsigned long *mask); + extern int numa_sched_getaffinity_v1(pid_t pid, unsigned len, const unsigned long *mask); +@@ -12,6 +11,7 @@ extern int numa_sched_getaffinity_v2_int + + #define SHM_HUGETLB 04000 /* segment will use huge TLB pages */ + ++#define BITS_PER_LONG (sizeof(unsigned long) * 8) + #define CPU_BYTES(x) (round_up(x, BITS_PER_LONG)/8) + #define CPU_LONGS(x) (CPU_BYTES(x) / sizeof(long)) + +Index: numactl-dev/test/nodemap.c +=================================================================== +--- numactl-dev.orig/test/nodemap.c ++++ numactl-dev/test/nodemap.c +@@ -1,5 +1,4 @@ + #include "numa.h" +-#include "bitops.h" + #include + #include + +Index: numactl-dev/test/tbitmap.c +=================================================================== +--- numactl-dev.orig/test/tbitmap.c ++++ numactl-dev/test/tbitmap.c +@@ -7,6 +7,13 @@ + #include + #include + #include "numa.h" ++#include "util.h" ++ ++/* For util.c. Fixme. */ ++void usage(void) ++{ ++ exit(1); ++} + + #define ALIGN(x,a) (((x)+(a)-1)&~((a)-1)) + +@@ -81,11 +88,12 @@ int main(void) + numa_bitmask_clearall(mask); + numa_bitmask_clearall(mask2); + numa_bitmask_setbit(mask, i); ++ assert(find_first(mask) == i); + bitmap_scnprintf(buf, sizeof(buf), mask); + strcat(buf,"\n"); + if (numa_parse_bitmap(buf, mask2) < 0) + assert(0); +- if (memcmp(mask, mask2, sizeof(mask))) { ++ if (memcmp(mask->maskp, mask2->maskp, numa_bitmask_nbytes(mask))) { + bitmap_scnprintf(buf, sizeof(buf), mask2); + printf("mask2 differs: %s\n", buf); + assert(0); +Index: numactl-dev/util.c +=================================================================== +--- numactl-dev.orig/util.c ++++ numactl-dev/util.c +@@ -16,7 +16,6 @@ + #include "numa.h" + #include "numaif.h" + #include "util.h" +-#include "bitops.h" + #include + #include + #include +@@ -28,23 +27,20 @@ + void printmask(char *name, struct bitmask *mask) + { + int i; +- + printf("%s: ", name); +- for (i = 0; i <= mask->size; i++) ++ for (i = 0; i < mask->size; i++) + if (numa_bitmask_isbitset(mask, i)) + printf("%d ", i); + putchar('\n'); + } + +-void printcpumask(char *name, struct bitmask *mask) ++int find_first(struct bitmask *mask) + { + int i; +- printf("%s: ", name); +- for (i = 0; i < mask->size; i++) { ++ for (i = 0; i < mask->size; i++) + if (numa_bitmask_isbitset(mask, i)) +- printf("%d ", i); +- } +- putchar('\n'); ++ return i; ++ return -1; + } + + void complain(char *fmt, ...) +Index: numactl-dev/util.h +=================================================================== +--- numactl-dev.orig/util.h ++++ numactl-dev/util.h +@@ -1,5 +1,5 @@ + extern void printmask(char *name, struct bitmask *mask); +-extern void printcpumask(char *name, struct bitmask *mask); ++extern int find_first(struct bitmask *mask); + extern struct bitmask *nodemask(char *s); + extern struct bitmask *cpumask(char *s, int *ncpus); + extern int read_sysctl(char *name); diff --git a/SPECS/numactl.spec b/SPECS/numactl.spec new file mode 100644 index 00000000..ac184169 --- /dev/null +++ b/SPECS/numactl.spec @@ -0,0 +1,295 @@ +Name: numactl +Summary: Library for tuning for Non Uniform Memory Access machines +Version: 2.0.9 +Release: 7%{?dist} +# libnuma is LGPLv2 and GPLv2 +# numactl binaries are GPLv2 only +License: GPLv2 +Group: System Environment/Base +URL: ftp://oss.sgi.com/www/projects/libnuma/download +Source0: ftp://oss.sgi.com/www/projects/libnuma/download/numactl-%{version}.tar.gz +Buildroot: %{_tmppath}/%{name}-buildroot + +ExcludeArch: s390 s390x %{arm} + +Patch1: numactl-2.0.8-localalloc-man.patch +Patch2: numactl-2.0.9-hw-detect-segfault.patch +Patch3: numactl-2.0.9-mpol-bind-preferred.patch +Patch4: numactl-2.0.10-numa_node_to_cpu_skip_over_nonexisting.patch +Patch5: numactl-2.0.11-libnuma-supress-warnings-for-non-existing-node.patch +Patch6: numactl-2.0.11-Segment-fault-when-numa-nodes-not-sequential-or-cont.patch + +%description +Simple NUMA policy support. It consists of a numactl program to run +other programs with a specific NUMA policy. + +%package libs +Summary: libnuma libraries +# There is a tiny bit of GPLv2 code in libnuma.c +License: LGPLv2 and GPLv2 +Group: System Environment/Libraries + +%description libs +numactl-libs provides libnuma, a library to do allocations with +NUMA policy in applications. + +%package devel +Summary: Development package for building Applications that use numa +Group: System Environment/Libraries +Requires: %{name}-libs = %{version}-%{release} +License: LGPLv2 and GPLv2 + +%description devel +Provides development headers for numa library calls + +%prep +%setup -q -n %{name}-%{version} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 + +%build +make clean +make CFLAGS="$RPM_OPT_FLAGS -I." + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_bindir} +mkdir -p $RPM_BUILD_ROOT%{_libdir} +mkdir -p $RPM_BUILD_ROOT%{_includedir} +mkdir -p $RPM_BUILD_ROOT%{_mandir}/man8 + +make prefix=$RPM_BUILD_ROOT/usr libdir=$RPM_BUILD_ROOT/%{_libdir} install + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig +%post libs -p /sbin/ldconfig + +%postun -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%files +%defattr(-,root,root,-) +%doc README +%{_bindir}/numactl +%{_bindir}/numademo +%{_bindir}/numastat +%{_bindir}/memhog +%{_bindir}/migspeed +%{_bindir}/migratepages +%{_mandir}/man8/*.8* + +%files libs +%defattr(-,root,root,-) +%{_libdir}/libnuma.so.1 + +%files devel +%defattr(-,root,root,-) +%{_libdir}/libnuma.so +%exclude %{_libdir}/libnuma.a +%{_includedir}/numa.h +%{_includedir}/numaif.h +%{_includedir}/numacompat1.h +%{_mandir}/man3/*.3* + +%changelog +* Tue Aug 8 2017 Petr Oros - 2.0.9-7 +- Segment fault when numa nodes not sequential or contiguous +- Resolves: #1219445 + +* Mon Dec 14 2015 Petr Holasek - 2.0.9-6 +- confusing warning supressed (bz1270734) + +* Wed Jul 01 2015 Petr Holasek - 2.0.9-5 +- numa_node_to_cpu skips over non-existing nodes (bz1180415) + +* Mon Nov 10 2014 Petr Holasek - 2.0.9-4 +- Fixed missing question mark in dist macro + +* Thu Jul 31 2014 Petr Holasek - 2.0.9-3 +- Fixed hw detect segfault (bz1061874) +- Fixed printing of preferred node for MPOL_BIND (bz1119887) + +* Fri Dec 27 2013 Daniel Mach - 2.0.9-2 +- Mass rebuild 2013-12-27 + +* Fri Oct 25 2013 Petr Holasek - 2.0.9-1 +- rebased to version 2.0.9 (bz1017053) + +* Mon Aug 19 2013 Petr Holasek - 2.0.8-6 +- localalloc manpage option is more verbose (bz881779) + +* Tue Jul 30 2013 Petr Holasek - 2.0.8-5 +- numastat minor bugfixes +- manpage and usage fixes (bz948377) + +* Thu Feb 14 2013 Fedora Release Engineering - 2.0.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Tue Jan 22 2013 Petr Holasek - 2.0.8-3 +- deleted empty numastat file + +* Thu Nov 1 2012 Tom Callaway - 2.0.8-2 +- fix license issues + +* Fri Oct 26 2012 Petr Holasek - 2.0.8-1 +- Rebased to version 2.0.8 + +* Fri Jul 20 2012 Fedora Release Engineering - 2.0.7-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sat May 19 2012 Petr Holasek - 2.0.7-6 +- numademo segfault fix (bz823125, bz823127) + +* Sun Apr 15 2012 Petr Holasek - 2.0.7-5 +- Library splitted out of numactl package to numactl-libs + +* Fri Jan 13 2012 Fedora Release Engineering - 2.0.7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Sun Jan 01 2012 Anton Arapov - 2.0.7-3 +- Include missing manpages + +* Sat Jun 18 2011 Peter Robinson - 2.0.7-2 +- Exclude ARM platforms + +* Fri Apr 15 2011 Anton Arapov - 2.0.7-1 +- Update to latest upstream stable version (bz 696703) + +* Tue Mar 22 2011 Anton Arapov - 2.0.6-2 +- Better manpages (bz 673613) + +* Tue Feb 08 2011 Fedora Release Engineering - 2.0.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 04 2011 Neil Horman - 2.0.6-1 +- Update to latest upstream stable version (bz 666379) + +* Mon Oct 18 2010 Neil Horman - 2.0.5-1 +- Update to latest stable upstream source + +* Mon Feb 15 2010 Neil Horman - 2.0.3-8 +- Remove static libs from numactl (bz 556088) + +* Mon Aug 10 2009 Neil Horman - 2.0.3-7 +- Add destructor to libnuma.so to free allocated memory (bz 516227) + +* Mon Aug 10 2009 Neil Horman - 2.0.3-6 +- Fix obo in nodes_allowed_list strncpy (bz 516223) + +* Sat Jul 25 2009 Fedora Release Engineering - 2.0.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri Jun 26 2009 Neil Horman +- Update to full 2.0.3 version (bz 506795) + +* Wed Jun 17 2009 Neil Horman +- Fix silly libnuma warnings again (bz 499633) + +* Fri May 08 2009 Neil Horman +- Update to 2.0.3-rc3 (bz 499633) + +* Wed Mar 25 2009 Mark McLoughlin - 2.0.2-4 +- Remove warning from libnuma (bz 484552) + +* Wed Feb 25 2009 Fedora Release Engineering - 2.0.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Sep 29 2008 Neil Horman - 2.0.2-2 +- Fix build break due to register selection in asm + +* Mon Sep 29 2008 Neil Horman - 2.0.2-1 +- Update rawhide to version 2.0.2 of numactl + +* Fri Apr 25 2008 Neil Horman - 1.0.2-6 +- Fix buffer size passing and arg sanity check for physcpubind (bz 442521) + +* Fri Mar 14 2008 Neil Horman - 1.0.2-5 +- Fixing spec file to actually apply alpha patch :) + +* Fri Mar 14 2008 Neil Horman - 1.0.2-4 +- Add alpha syscalls (bz 396361) + +* Tue Feb 19 2008 Fedora Release Engineering - 1.0.2-3 +- Autorebuild for GCC 4.3 + +* Thu Dec 20 2007 Neil Horman - 1.0.2-1 +- Update numactl to fix get_mempolicy signature (bz 418551) + +* Fri Dec 14 2007 Neil Horman - 1.0.2-1 +- Update numactl to latest version (bz 425281) + +* Tue Aug 07 2007 Neil Horman - 0.9.8-4 +- Fixing some remaining merge review issues (bz 226207) + +* Fri Aug 03 2007 Neil Horman - 0.9.8-3 +- fixing up merge review (bz 226207) + +* Fri Jan 12 2007 Neil Horman - 0.9.8-2 +- Properly fixed bz 221982 +- Updated revision string to include %{dist} + +* Thu Jan 11 2007 Neil Horman - 0.9.8-1.38 +- Fixed -devel to depend on base package so libnuma.so resolves + +* Thu Sep 21 2006 Neil Horman - 0.9.8-1.36 +- adding nodebind patch for bz 207404 + +* Fri Aug 25 2006 Neil Horman - 0.9.8-1.35 +- moving over libnuma.so to -devel package as well + +* Fri Aug 25 2006 Neil Horman - 0.9.8-1.34 +- split out headers/devel man pages to a devel subpackage + +* Tue Aug 15 2006 Neil Horman - 0.9.8-1.32 +- add patch for broken cpu/nodebind output (bz 201906) + +* Wed Jul 12 2006 Jesse Keating - 0.9.8-1.31 +- rebuild + +* Tue Jun 13 2006 Neil Horman +- Rebased numactl to version 0.9.8 for FC6/RHEL5 + +* Wed Apr 26 2006 Neil Horman +- Added patches for 64 bit overflows and cpu mask problem + +* Fri Mar 10 2006 Bill Nottingham +- rebuild for ppc TLS issue (#184446) + +* Fri Feb 10 2006 Jesse Keating - 0.6.4-1.25.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Jul 7 2005 Dave Jones +- numactl doesn't own the manpage dirs. (#161547) + +* Tue Mar 1 2005 Dave Jones +- Rebuild for gcc4 + +* Tue Feb 8 2005 Dave Jones +- rebuild with -D_FORTIFY_SOURCE=2 + +* Wed Nov 10 2004 David Woodhouse +- Fix build on x86_64 + +* Thu Oct 21 2004 David Woodhouse +- Add PPC support + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Sat Jun 05 2004 Warren Togami +- spec cleanup + +* Sat Jun 05 2004 Arjan van de Ven +- initial packaging