Compare commits
No commits in common. "c8" and "c9s" have entirely different histories.
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
SOURCES/v2.4.tar.gz
|
numatop*.tar.?z
|
||||||
|
/v2.3.tar.gz
|
||||||
|
/v2.4.tar.gz
|
||||||
|
34
0001-common-reg.c-use-explicit-format-string.patch
Normal file
34
0001-common-reg.c-use-explicit-format-string.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From 635e2ce2ccb1ac793cc276a7fcb8a92b1ffefa5d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Will Dietz <w@wdtz.org>
|
||||||
|
Date: Mon, 31 Jan 2022 12:43:19 -0600
|
||||||
|
Subject: [PATCH 01/32] common/reg.c: use explicit format string
|
||||||
|
|
||||||
|
---
|
||||||
|
common/reg.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/reg.c b/common/reg.c
|
||||||
|
index 1a87161..ad37274 100644
|
||||||
|
--- a/common/reg.c
|
||||||
|
+++ b/common/reg.c
|
||||||
|
@@ -240,7 +240,7 @@ reg_line_write(win_reg_t *r, int line, reg_align_t align, char *content)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > 0) {
|
||||||
|
- (void) mvwprintw(r->hdl, line, pos_x, content);
|
||||||
|
+ (void) mvwprintw(r->hdl, line, pos_x, "%s", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r->mode != 0) {
|
||||||
|
@@ -267,7 +267,7 @@ reg_highlight_write(win_reg_t *r, int line, int align, char *content)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > 0) {
|
||||||
|
- (void) mvwprintw(r->hdl, line, pos_x, content);
|
||||||
|
+ (void) mvwprintw(r->hdl, line, pos_x, "%s", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
(void) wattroff(r->hdl, A_REVERSE | A_BOLD);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
44
0002-numatop-powerpc-Add-Power11-support.patch
Normal file
44
0002-numatop-powerpc-Add-Power11-support.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 50617b9a0e197a5261b3824d6e6309c034e99134 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kajol Jain <kjain@linux.ibm.com>
|
||||||
|
Date: Fri, 12 Apr 2024 04:46:59 -0400
|
||||||
|
Subject: [PATCH 02/32] numatop/powerpc: Add Power11 support
|
||||||
|
|
||||||
|
Power11 is PowerISA v3.1 compliant processor and support Power10 events.
|
||||||
|
So using Power10 events to enable numatop in Power11 platform and to
|
||||||
|
count the per-process/per-thread memory accesses and CPU usage.
|
||||||
|
|
||||||
|
Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
|
||||||
|
---
|
||||||
|
numatop.8 | 2 +-
|
||||||
|
powerpc/plat.c | 5 +++++
|
||||||
|
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/numatop.8 b/numatop.8
|
||||||
|
index 7237093..b09862e 100644
|
||||||
|
--- a/numatop.8
|
||||||
|
+++ b/numatop.8
|
||||||
|
@@ -500,4 +500,4 @@ in 3.9. The following steps show how to get and apply the patch set.
|
||||||
|
\fBnumatop\fP supports the Intel Xeon processors: 5500-series, 6500/7500-series,
|
||||||
|
5600 series, E7-x8xx-series, and E5-16xx/24xx/26xx/46xx-series.
|
||||||
|
\fBNote\fP: CPU microcode version 0x618 or 0x70c or later is required on
|
||||||
|
-E5-16xx/24xx/26xx/46xx-series. It also supports IBM Power8, Power9 and Power10 processors.
|
||||||
|
+E5-16xx/24xx/26xx/46xx-series. It also supports IBM Power8, Power9, Power10 and Power11 processors.
|
||||||
|
diff --git a/powerpc/plat.c b/powerpc/plat.c
|
||||||
|
index bed27d5..0ea262b 100644
|
||||||
|
--- a/powerpc/plat.c
|
||||||
|
+++ b/powerpc/plat.c
|
||||||
|
@@ -93,6 +93,11 @@ plat_detect(void)
|
||||||
|
s_cpu_type = CPU_POWER10;
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
+
|
||||||
|
+ case 0x82:
|
||||||
|
+ s_cpu_type = CPU_POWER10;
|
||||||
|
+ ret = 0;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From c7d38589c859744c30eeda6f0f775f9c423d4b3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Dower <robert.dower@intel.com>
|
||||||
|
Date: Fri, 3 May 2024 17:14:01 -0700
|
||||||
|
Subject: [PATCH 03/32] add required SECURITY.md file for OSSF Scorecard
|
||||||
|
compliance
|
||||||
|
|
||||||
|
---
|
||||||
|
SECURITY.md | 20 ++------------------
|
||||||
|
1 file changed, 2 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/SECURITY.md b/SECURITY.md
|
||||||
|
index 034e848..373608b 100644
|
||||||
|
--- a/SECURITY.md
|
||||||
|
+++ b/SECURITY.md
|
||||||
|
@@ -1,21 +1,5 @@
|
||||||
|
# Security Policy
|
||||||
|
-
|
||||||
|
-## Supported Versions
|
||||||
|
-
|
||||||
|
-Use this section to tell people about which versions of your project are
|
||||||
|
-currently being supported with security updates.
|
||||||
|
-
|
||||||
|
-| Version | Supported |
|
||||||
|
-| ------- | ------------------ |
|
||||||
|
-| 5.1.x | :white_check_mark: |
|
||||||
|
-| 5.0.x | :x: |
|
||||||
|
-| 4.0.x | :white_check_mark: |
|
||||||
|
-| < 4.0 | :x: |
|
||||||
|
+Intel is committed to rapidly addressing security vulnerabilities affecting our customers and providing clear guidance on the solution, impact, severity and mitigation.
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
-
|
||||||
|
-Use this section to tell people how to report a vulnerability.
|
||||||
|
-
|
||||||
|
-Tell them where to go, how often they can expect to get an update on a
|
||||||
|
-reported vulnerability, what to expect if the vulnerability is accepted or
|
||||||
|
-declined, etc.
|
||||||
|
+Please report any security vulnerabilities in this project utilizing the guidelines [here](https://www.intel.com/content/www/us/en/security-center/vulnerability-handling-guidelines.html).
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
31
0004-x86-zen-Add-Zen-5-and-later-support.patch
Normal file
31
0004-x86-zen-Add-Zen-5-and-later-support.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 5a9c64daa4e146f5b03af5fc9201461a701d208a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sandipan Das <sandipan.das@amd.com>
|
||||||
|
Date: Mon, 3 Jun 2024 13:35:10 +0530
|
||||||
|
Subject: [PATCH 04/32] x86/zen: Add Zen 5 and later support
|
||||||
|
|
||||||
|
Processors based on Zen 5 and future microarchitectures are expected to
|
||||||
|
support events that are already available on Zen 4. Since these events
|
||||||
|
already provide base functionality, keep reusing the Zen 4 CPU model for
|
||||||
|
Family 1Ah and later processors until any changes are required.
|
||||||
|
|
||||||
|
Signed-off-by: Sandipan Das <sandipan.das@amd.com>
|
||||||
|
---
|
||||||
|
x86/plat.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/x86/plat.c b/x86/plat.c
|
||||||
|
index b5dbda4..d0c7cba 100644
|
||||||
|
--- a/x86/plat.c
|
||||||
|
+++ b/x86/plat.c
|
||||||
|
@@ -210,6 +210,8 @@ cpu_type_get(void)
|
||||||
|
} else {
|
||||||
|
type = CPU_ZEN4;
|
||||||
|
}
|
||||||
|
+ } else if (family >= 26) { /* Family 1Ah and later */
|
||||||
|
+ type = CPU_ZEN4;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (type);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
30
0005-readme-Add-note-on-AMD-support.patch
Normal file
30
0005-readme-Add-note-on-AMD-support.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From e6e8c162d2e6a078a330c2b46b2ee9ddcd53b754 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sandipan Das <sandipan.das@amd.com>
|
||||||
|
Date: Mon, 3 Jun 2024 13:44:54 +0530
|
||||||
|
Subject: [PATCH 05/32] readme: Add note on AMD support
|
||||||
|
|
||||||
|
Call out support for AMD EPYC processors from the 7001, 7002, 7003,
|
||||||
|
4004, 8004 and 9004 series.
|
||||||
|
|
||||||
|
Signed-off-by: Sandipan Das <sandipan.das@amd.com>
|
||||||
|
---
|
||||||
|
README.md | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/README.md b/README.md
|
||||||
|
index 9908e92..fc2db9e 100644
|
||||||
|
--- a/README.md
|
||||||
|
+++ b/README.md
|
||||||
|
@@ -77,6 +77,9 @@ numatop is supported on Intel Xeon processors: 5500-series, 6500/7500-series,
|
||||||
|
E5-16xx/24xx/26xx/46xx-series had better be updated to latest CPU microcode
|
||||||
|
(microcode must be 0x618+ or 0x70c+).
|
||||||
|
|
||||||
|
+AMD EPYC processors from the 7001, 7002, 7003, 4004, 8004 and 9004 series are
|
||||||
|
+also supported.
|
||||||
|
+
|
||||||
|
To learn about NumaTOP, please visit http://01.org/numatop
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
86
0006-Fix-several-printf-format-specifiers.patch
Normal file
86
0006-Fix-several-printf-format-specifiers.patch
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
From ee151845bb4b3e735676bef9607a3774a7c0995d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Mon, 13 Jan 2020 16:23:56 +0000
|
||||||
|
Subject: [PATCH 06/32] Fix several printf format specifiers
|
||||||
|
|
||||||
|
There are several format specifiers that are incorrect, use %zu for
|
||||||
|
size_t values and %lx for u64 values.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/pfwrapper.c | 10 +++++-----
|
||||||
|
common/os/sym.c | 4 ++--
|
||||||
|
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/pfwrapper.c b/common/os/pfwrapper.c
|
||||||
|
index d6102be..943820e 100644
|
||||||
|
--- a/common/os/pfwrapper.c
|
||||||
|
+++ b/common/os/pfwrapper.c
|
||||||
|
@@ -166,7 +166,7 @@ pf_profiling_setup(struct _perf_cpu *cpu, int idx, pf_conf_t *conf)
|
||||||
|
PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_TOTAL_TIME_RUNNING;
|
||||||
|
attr.size = sizeof(attr);
|
||||||
|
|
||||||
|
- debug_print(NULL, 2, "pf_profiling_setup: attr.type = 0x%lx, "
|
||||||
|
+ debug_print(NULL, 2, "pf_profiling_setup: attr.type = 0x%x, "
|
||||||
|
"attr.config = 0x%lx, attr.config1 = 0x%lx\n",
|
||||||
|
attr.type, attr.config, attr.config1);
|
||||||
|
|
||||||
|
@@ -773,14 +773,14 @@ pf_uncoreqpi_setup(struct _node *node)
|
||||||
|
if ((qpi->qpi_info[i].fd = pf_event_open(&attr, -1,
|
||||||
|
node->cpus[0].cpuid, -1, 0)) < 0) {
|
||||||
|
debug_print(NULL, 2, "pf_uncoreqpi_setup: pf_event_open is failed "
|
||||||
|
- "for node %d, qpi %d, cpu %d, type %d, config 0x%x\n",
|
||||||
|
+ "for node %d, qpi %d, cpu %d, type %d, config 0x%lx\n",
|
||||||
|
node->nid, i, node->cpus[0].cpuid, attr.type, attr.config);
|
||||||
|
qpi->qpi_info[i].fd = INVALID_FD;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_print(NULL, 2, "pf_uncoreqpi_setup: pf_event_open is successful "
|
||||||
|
- "for node %d, qpi %d, cpu %d, type %d, config 0x%x, fd %d\n",
|
||||||
|
+ "for node %d, qpi %d, cpu %d, type %d, config 0x%lx, fd %d\n",
|
||||||
|
node->nid, i, node->cpus[0].cpuid, attr.type, attr.config,
|
||||||
|
qpi->qpi_info[i].fd);
|
||||||
|
}
|
||||||
|
@@ -897,14 +897,14 @@ pf_uncoreimc_setup(struct _node *node)
|
||||||
|
if ((imc->imc_info[i].fd = pf_event_open(&attr, -1,
|
||||||
|
node->cpus[0].cpuid, -1, 0)) < 0) {
|
||||||
|
debug_print(NULL, 2, "pf_uncoreimc_setup: pf_event_open is failed "
|
||||||
|
- "for node %d, imc %d, cpu %d, type %d, config 0x%x\n",
|
||||||
|
+ "for node %d, imc %d, cpu %d, type %d, config 0x%lx\n",
|
||||||
|
node->nid, i, node->cpus[0].cpuid, attr.type, attr.config);
|
||||||
|
imc->imc_info[i].fd = INVALID_FD;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_print(NULL, 2, "pf_uncoreimc_setup: pf_event_open is successful "
|
||||||
|
- "for node %d, imc %d, cpu %d, type %d, config 0x%x, fd %d\n",
|
||||||
|
+ "for node %d, imc %d, cpu %d, type %d, config 0x%lx, fd %d\n",
|
||||||
|
node->nid, i, node->cpus[0].cpuid, attr.type, attr.config,
|
||||||
|
imc->imc_info[i].fd);
|
||||||
|
}
|
||||||
|
diff --git a/common/os/sym.c b/common/os/sym.c
|
||||||
|
index 9ead1fb..949ce7a 100644
|
||||||
|
--- a/common/os/sym.c
|
||||||
|
+++ b/common/os/sym.c
|
||||||
|
@@ -384,7 +384,7 @@ elf32_binary_read(sym_binary_t *binary, sym_type_t sym_type)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ehdr.e_shentsize != sizeof (Elf32_Shdr)) {
|
||||||
|
- debug_print(NULL, 2, "elf32_binary_read: ehdr.e_shentsize != %d\n",
|
||||||
|
+ debug_print(NULL, 2, "elf32_binary_read: ehdr.e_shentsize != %zu\n",
|
||||||
|
sizeof (Elf32_Shdr));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
@@ -481,7 +481,7 @@ elf64_binary_read(sym_binary_t *binary, unsigned int sym_type)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ehdr.e_shentsize != sizeof (Elf64_Shdr)) {
|
||||||
|
- debug_print(NULL, 2, "elf64_binary_read: ehdr.e_shentsize != %d\n",
|
||||||
|
+ debug_print(NULL, 2, "elf64_binary_read: ehdr.e_shentsize != %zu\n",
|
||||||
|
sizeof (Elf64_Shdr));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
114
0007-Clean-up-32-bit-build-warnings.patch
Normal file
114
0007-Clean-up-32-bit-build-warnings.patch
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
From 3cf69e26e6ffa1a09148da8be0e211dcc699af3c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Mon, 13 Jan 2020 17:07:04 +0000
|
||||||
|
Subject: [PATCH 07/32] Clean up 32 bit build warnings
|
||||||
|
|
||||||
|
The casting of uint64_t sized address values to void * pointers is
|
||||||
|
causing build warnings on 32 bit builds. A simple remedy is to
|
||||||
|
cast uint64_t values to uintptr_t types before casting them to void *
|
||||||
|
pointers.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/map.c | 8 ++++----
|
||||||
|
common/os/os_win.c | 6 +++---
|
||||||
|
common/proc.c | 3 ++-
|
||||||
|
common/win.c | 2 +-
|
||||||
|
4 files changed, 10 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/map.c b/common/os/map.c
|
||||||
|
index 2650864..83fdb88 100644
|
||||||
|
--- a/common/os/map.c
|
||||||
|
+++ b/common/os/map.c
|
||||||
|
@@ -322,7 +322,7 @@ numa_map_update(numa_map_t *numa_map, void **addr_arr, int *node_arr,
|
||||||
|
int i = 0, j;
|
||||||
|
|
||||||
|
if ((entry = last_entry) == NULL) {
|
||||||
|
- if ((entry = numa_entry_add(numa_map, (uint64_t)(addr_arr[i]),
|
||||||
|
+ if ((entry = numa_entry_add(numa_map, (uint64_t)(uintptr_t)addr_arr[i],
|
||||||
|
node_arr[i])) == NULL) {
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
@@ -332,10 +332,10 @@ numa_map_update(numa_map_t *numa_map, void **addr_arr, int *node_arr,
|
||||||
|
|
||||||
|
for (j = i; j < addr_num; j++) {
|
||||||
|
if ((entry->nid == node_arr[j]) &&
|
||||||
|
- (entry->end_addr == (uint64_t)(addr_arr[j]))) {
|
||||||
|
+ (entry->end_addr == (uint64_t)(uintptr_t)addr_arr[j])) {
|
||||||
|
entry->end_addr += g_pagesize;
|
||||||
|
} else {
|
||||||
|
- if ((entry = numa_entry_add(numa_map, (uint64_t)(addr_arr[j]),
|
||||||
|
+ if ((entry = numa_entry_add(numa_map, (uint64_t)(uintptr_t)addr_arr[j],
|
||||||
|
node_arr[j])) == NULL) {
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
@@ -359,7 +359,7 @@ map_map2numa(track_proc_t *proc, map_entry_t *map_entry)
|
||||||
|
while (npages_moved < npages_total) {
|
||||||
|
npages_tomove = MIN(NUMA_MOVE_NPAGES, npages_total - npages_moved);
|
||||||
|
for (i = 0; i < npages_tomove; i++) {
|
||||||
|
- addr_arr[i] = (void *)(map_entry->start_addr +
|
||||||
|
+ addr_arr[i] = (void *)(uintptr_t)(map_entry->start_addr +
|
||||||
|
(i + npages_moved) * g_pagesize);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/common/os/os_win.c b/common/os/os_win.c
|
||||||
|
index de198ca..09d2ed0 100644
|
||||||
|
--- a/common/os/os_win.c
|
||||||
|
+++ b/common/os/os_win.c
|
||||||
|
@@ -561,7 +561,7 @@ os_llcallchain_win_destroy(dyn_win_t *win)
|
||||||
|
static int
|
||||||
|
bufaddr_cmp(const void *p1, const void *p2)
|
||||||
|
{
|
||||||
|
- const uint64_t addr = (const uint64_t)p1;
|
||||||
|
+ const uint64_t addr = (const uint64_t)(uintptr_t)p1;
|
||||||
|
const bufaddr_t *bufaddr = (const bufaddr_t *)p2;
|
||||||
|
|
||||||
|
if (addr < bufaddr->addr) {
|
||||||
|
@@ -621,7 +621,7 @@ llcallchain_bufinfo_show(dyn_llcallchain_t *dyn, track_proc_t *proc,
|
||||||
|
* Check if the linear address is located in a buffer in
|
||||||
|
* process address space.
|
||||||
|
*/
|
||||||
|
- if ((line = bsearch((void *)(dyn->addr), lat_buf, nlines,
|
||||||
|
+ if ((line = bsearch((void *)(uintptr_t)(dyn->addr), lat_buf, nlines,
|
||||||
|
sizeof (lat_line_t), bufaddr_cmp)) != NULL) {
|
||||||
|
win_lat_str_build(content, WIN_LINECHAR_MAX, 0, line);
|
||||||
|
reg_line_write(reg, 0, ALIGN_LEFT, content);
|
||||||
|
@@ -791,7 +791,7 @@ os_lat_buf_hit(lat_line_t *lat_buf, int nlines, os_perf_llrec_t *rec,
|
||||||
|
* Check if the linear address is located in a buffer in
|
||||||
|
* process address space.
|
||||||
|
*/
|
||||||
|
- if ((line = bsearch((void *)(rec->addr), lat_buf, nlines,
|
||||||
|
+ if ((line = bsearch((void *)(uintptr_t)(rec->addr), lat_buf, nlines,
|
||||||
|
sizeof (lat_line_t), bufaddr_cmp)) != NULL) {
|
||||||
|
/*
|
||||||
|
* If the linear address is located in, that means this
|
||||||
|
diff --git a/common/proc.c b/common/proc.c
|
||||||
|
index db450ed..9954eb6 100644
|
||||||
|
--- a/common/proc.c
|
||||||
|
+++ b/common/proc.c
|
||||||
|
@@ -746,7 +746,8 @@ proc_group_refresh(pid_t *procs_new, int nproc_new)
|
||||||
|
proc_group_remove(proc);
|
||||||
|
proc_free(proc);
|
||||||
|
} else {
|
||||||
|
- j = ((uint64_t)p - (uint64_t)procs_new) /
|
||||||
|
+ j = ((uint64_t)(uintptr_t)p -
|
||||||
|
+ (uint64_t)(uintptr_t)procs_new) /
|
||||||
|
sizeof (pid_t);
|
||||||
|
exist_arr[j] = B_TRUE;
|
||||||
|
}
|
||||||
|
diff --git a/common/win.c b/common/win.c
|
||||||
|
index d0a8f3b..910d267 100644
|
||||||
|
--- a/common/win.c
|
||||||
|
+++ b/common/win.c
|
||||||
|
@@ -2668,7 +2668,7 @@ llrec2addr(track_proc_t *proc, track_lwp_t *lwp, void ***addr_arr,
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < grp->nrec_cur; i++) {
|
||||||
|
- addr_buf[i] = (void *)(grp->rec_arr[i].addr);
|
||||||
|
+ addr_buf[i] = (void *)(uintptr_t)(grp->rec_arr[i].addr);
|
||||||
|
lat_buf[i] = grp->rec_arr[i].latency;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
79
0008-common-os-os_win.c-Fix-incorrect-usage-of-strncat.patch
Normal file
79
0008-common-os-os_win.c-Fix-incorrect-usage-of-strncat.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From f2d5d8b575cefb54d641e15fb1b28a0d598fbc83 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Mon, 29 Nov 2021 18:28:09 +0000
|
||||||
|
Subject: [PATCH 08/32] common/os/os_win.c: Fix incorrect usage of strncat
|
||||||
|
|
||||||
|
The wrong buffer size is being used for strncat. Fix this by keeping
|
||||||
|
account of how much space is left and only appending strings if there
|
||||||
|
is enough headroom to avoid a buffer overflow.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/os_win.c | 19 ++++++++++++++-----
|
||||||
|
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_win.c b/common/os/os_win.c
|
||||||
|
index 09d2ed0..69e24be 100644
|
||||||
|
--- a/common/os/os_win.c
|
||||||
|
+++ b/common/os/os_win.c
|
||||||
|
@@ -117,6 +117,7 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
int i, j, k, l, cpuid_start;
|
||||||
|
int *cpuid_arr;
|
||||||
|
int ncpus;
|
||||||
|
+ int s1_len = size;
|
||||||
|
perf_cpu_t *cpus = node_cpus(node);
|
||||||
|
|
||||||
|
s1[0] = 0;
|
||||||
|
@@ -140,8 +141,7 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
cpuid_start = cpuid_arr[0];
|
||||||
|
|
||||||
|
if (ncpus == 1) {
|
||||||
|
- (void) snprintf(s2, sizeof (s2), "%d", cpuid_start);
|
||||||
|
- (void) strncat(s1, s2, strlen(s2));
|
||||||
|
+ (void) snprintf(s1, size, "%d", cpuid_start);
|
||||||
|
free(cpuid_arr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -152,6 +152,8 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
for (j = 1; j < ncpus; j++) {
|
||||||
|
k++;
|
||||||
|
if (cpuid_arr[j] != cpuid_start + l) {
|
||||||
|
+ int s2_len = sizeof(s2);
|
||||||
|
+
|
||||||
|
if (k < ncpus) {
|
||||||
|
if (l == 1) {
|
||||||
|
(void) snprintf(s2, sizeof (s2), "%d ", cpuid_start);
|
||||||
|
@@ -167,20 +169,27 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
(void) snprintf(s2, sizeof (s2), "%d-%d",
|
||||||
|
cpuid_start, cpuid_start + l - 1);
|
||||||
|
}
|
||||||
|
+ s2_len -= strlen(s2);
|
||||||
|
|
||||||
|
(void) snprintf(s3, sizeof (s3), " %d",
|
||||||
|
cpuid_arr[j]);
|
||||||
|
- (void) strncat(s2, s3, strlen(s3));
|
||||||
|
+ s2_len -= strlen(s3);
|
||||||
|
+ if (s2_len > 0)
|
||||||
|
+ (void) strncat(s2, s3, s2_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) strncat(s1, s2, strlen(s2));
|
||||||
|
+ s1_len -= strlen(s2);
|
||||||
|
+ if (s1_len > 0)
|
||||||
|
+ (void) strncat(s1, s2, s1_len);
|
||||||
|
cpuid_start = cpuid_arr[j];
|
||||||
|
l = 1;
|
||||||
|
} else {
|
||||||
|
if (k == ncpus) {
|
||||||
|
(void) snprintf(s2, sizeof (s2), "%d-%d",
|
||||||
|
cpuid_start, cpuid_start + l);
|
||||||
|
- (void) strncat(s1, s2, strlen(s2));
|
||||||
|
+ s1_len -= strlen(s2);
|
||||||
|
+ if (s1_len > 0)
|
||||||
|
+ (void) strncat(s1, s2, s1_len);
|
||||||
|
} else {
|
||||||
|
l++;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 33c2cc629c248c2684069e077c9b9f10b22170d8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Wed, 1 Dec 2021 13:58:10 +0000
|
||||||
|
Subject: [PATCH 09/32] common/os/os_util.c: Fix off-by-one on string length in
|
||||||
|
strncpy call
|
||||||
|
|
||||||
|
The strncpy will miss adding the terminating '\0' to the string because
|
||||||
|
of an off-by-one issue. Most of the time we are lucky this works because
|
||||||
|
the malloc'd data is zero, but we can't assume this.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/os_util.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_util.c b/common/os/os_util.c
|
||||||
|
index f442729..53bf405 100644
|
||||||
|
--- a/common/os/os_util.c
|
||||||
|
+++ b/common/os/os_util.c
|
||||||
|
@@ -391,7 +391,7 @@ str_int_extract(char *str, int *arr, int arr_size, int *num)
|
||||||
|
return (B_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
- strncpy(scopy, str, len);
|
||||||
|
+ strncpy(scopy, str, len + 1);
|
||||||
|
scopy[len] = 0;
|
||||||
|
cur = scopy;
|
||||||
|
|
||||||
|
@@ -447,7 +447,6 @@ file_int_extract(char *path, int *arr, int arr_size, int *num)
|
||||||
|
fclose(fp);
|
||||||
|
return (B_FALSE);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
fclose(fp);
|
||||||
|
return (str_int_extract(buf, arr, arr_size, num));
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 5509f2830b5376ff24690b7bed076053db25232c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Fri, 3 Dec 2021 19:37:30 +0000
|
||||||
|
Subject: [PATCH 10/32] common/reg: Add pragmas to silence false positive
|
||||||
|
warnings
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/reg.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/common/reg.c b/common/reg.c
|
||||||
|
index 1a87161..4a2875c 100644
|
||||||
|
--- a/common/reg.c
|
||||||
|
+++ b/common/reg.c
|
||||||
|
@@ -239,9 +239,12 @@ reg_line_write(win_reg_t *r, int line, reg_align_t align, char *content)
|
||||||
|
pos_x = (r->ncols_scr - len) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#pragma GCC diagnostic push
|
||||||
|
+#pragma GCC diagnostic ignored "-Wformat-security"
|
||||||
|
if (len > 0) {
|
||||||
|
(void) mvwprintw(r->hdl, line, pos_x, content);
|
||||||
|
}
|
||||||
|
+#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
if (r->mode != 0) {
|
||||||
|
(void) wattroff(r->hdl, r->mode);
|
||||||
|
@@ -266,9 +269,12 @@ reg_highlight_write(win_reg_t *r, int line, int align, char *content)
|
||||||
|
pos_x = (r->ncols_scr - len) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#pragma GCC diagnostic push
|
||||||
|
+#pragma GCC diagnostic ignored "-Wformat-security"
|
||||||
|
if (len > 0) {
|
||||||
|
(void) mvwprintw(r->hdl, line, pos_x, content);
|
||||||
|
}
|
||||||
|
+#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
(void) wattroff(r->hdl, A_REVERSE | A_BOLD);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
38
0011-x86-Fix-missing-fields-for-EMR-support.patch
Normal file
38
0011-x86-Fix-missing-fields-for-EMR-support.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 8badd8cfed744c254520808890d7351b88e1b9c4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Wed, 31 Jul 2024 12:02:06 +0100
|
||||||
|
Subject: [PATCH 11/32] x86: Fix missing fields for EMR support
|
||||||
|
|
||||||
|
There are two missing fields in the s_emr_config array causing
|
||||||
|
build issues with modern versions of gcc. Fix this.
|
||||||
|
|
||||||
|
Fixes: d3fcffc6a9cc ("x86: Add initial support for EMR")
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
x86/skl.c | 10 +++++-----
|
||||||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/x86/skl.c b/x86/skl.c
|
||||||
|
index 17cfbcc..a80a868 100644
|
||||||
|
--- a/x86/skl.c
|
||||||
|
+++ b/x86/skl.c
|
||||||
|
@@ -64,11 +64,11 @@ static plat_event_config_t s_spr_config[PERF_COUNT_NUM] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
static plat_event_config_t s_emr_config[PERF_COUNT_NUM] = {
|
||||||
|
- { PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES, 0x53, 0, "cpu_clk_unhalted.core" },
|
||||||
|
- { PERF_TYPE_RAW, 0x012A, 0x53, 0x730000001, "off_core_response_0" },
|
||||||
|
- { PERF_TYPE_HARDWARE, PERF_COUNT_HW_REF_CPU_CYCLES, 0x53, 0, "cpu_clk_unhalted.ref" },
|
||||||
|
- { PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS, 0x53, 0, "instr_retired.any" },
|
||||||
|
- { PERF_TYPE_RAW, 0x012B, 0x53, 0x104000001, "off_core_response_1" }
|
||||||
|
+ { PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES, 0x53, 0, 0, 0, "cpu_clk_unhalted.core" },
|
||||||
|
+ { PERF_TYPE_RAW, 0x012A, 0x53, 0x730000001, 0, 0, "off_core_response_0" },
|
||||||
|
+ { PERF_TYPE_HARDWARE, PERF_COUNT_HW_REF_CPU_CYCLES, 0x53, 0, 0, 0, "cpu_clk_unhalted.ref" },
|
||||||
|
+ { PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS, 0x53, 0, 0, 0, "instr_retired.any" },
|
||||||
|
+ { PERF_TYPE_RAW, 0x012B, 0x53, 0x104000001, 0, 0, "off_core_response_1" }
|
||||||
|
};
|
||||||
|
|
||||||
|
static plat_event_config_t s_skl_ll = {
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From 3836f8be442d2557ee10216327949b9c85792eac Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 22:57:13 +0100
|
||||||
|
Subject: [PATCH 12/32] common: Use sym_type_t in elf64_binary_read() signature
|
||||||
|
|
||||||
|
This silences the enum-int-mismatch warning.
|
||||||
|
---
|
||||||
|
common/os/sym.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/sym.c b/common/os/sym.c
|
||||||
|
index 949ce7a..4626c8d 100644
|
||||||
|
--- a/common/os/sym.c
|
||||||
|
+++ b/common/os/sym.c
|
||||||
|
@@ -463,7 +463,7 @@ L_EXIT:
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
-elf64_binary_read(sym_binary_t *binary, unsigned int sym_type)
|
||||||
|
+elf64_binary_read(sym_binary_t *binary, sym_type_t sym_type)
|
||||||
|
{
|
||||||
|
Elf64_Ehdr ehdr;
|
||||||
|
Elf64_Shdr shdr;
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
32
0013-common-Remove-unnecessary-temp-buffer.patch
Normal file
32
0013-common-Remove-unnecessary-temp-buffer.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From 3eb83bcb5ff91d3390e03acccad0fd8c89171a53 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 23:02:15 +0100
|
||||||
|
Subject: [PATCH 13/32] common: Remove unnecessary temp buffer
|
||||||
|
|
||||||
|
---
|
||||||
|
common/win.c | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/win.c b/common/win.c
|
||||||
|
index 910d267..c06f42d 100644
|
||||||
|
--- a/common/win.c
|
||||||
|
+++ b/common/win.c
|
||||||
|
@@ -484,14 +484,11 @@ topnproc_data_show(dyn_win_t *win)
|
||||||
|
static void
|
||||||
|
load_msg_show(void)
|
||||||
|
{
|
||||||
|
- char content[64];
|
||||||
|
win_reg_t r;
|
||||||
|
|
||||||
|
- (void) snprintf(content, sizeof (content), "Loading ...");
|
||||||
|
-
|
||||||
|
(void) reg_init(&r, 0, 1, g_scr_width, g_scr_height - 1, A_BOLD);
|
||||||
|
reg_erase(&r);
|
||||||
|
- reg_line_write(&r, 1, ALIGN_LEFT, content);
|
||||||
|
+ reg_line_write(&r, 1, ALIGN_LEFT, "Loading ...");
|
||||||
|
reg_refresh(&r);
|
||||||
|
reg_win_destroy(&r);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
51
0014-common-Use-memcpy-to-the-process-name-to-a-line.patch
Normal file
51
0014-common-Use-memcpy-to-the-process-name-to-a-line.patch
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
From e5b69a496bfd9f68ff7a6adbc2062bd875071f0f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 23:03:02 +0100
|
||||||
|
Subject: [PATCH 14/32] common: Use memcpy() to the process name to a line
|
||||||
|
|
||||||
|
The copy will either collect the whole string, and potentially a little
|
||||||
|
more, but from a safe location, or a truncated string with a null char
|
||||||
|
guaranteed by the memset() call above.
|
||||||
|
|
||||||
|
This silences the stringop-truncation warning.
|
||||||
|
---
|
||||||
|
common/win.c | 9 +++------
|
||||||
|
1 file changed, 3 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/win.c b/common/win.c
|
||||||
|
index c06f42d..39909bc 100644
|
||||||
|
--- a/common/win.c
|
||||||
|
+++ b/common/win.c
|
||||||
|
@@ -355,8 +355,7 @@ topnproc_data_save(track_proc_t *proc, int intval, topnproc_line_t *line)
|
||||||
|
/*
|
||||||
|
* Cut off the process name if it's too long.
|
||||||
|
*/
|
||||||
|
- (void) strncpy(line->proc_name, proc->name, sizeof (line->proc_name));
|
||||||
|
- line->proc_name[WIN_PROCNAME_SIZE - 1] = 0;
|
||||||
|
+ memcpy(line->proc_name, proc->name, sizeof (line->proc_name) - 1);
|
||||||
|
line->pid = proc->pid;
|
||||||
|
line->nlwp = proc_nlwp(proc);
|
||||||
|
|
||||||
|
@@ -2892,8 +2891,7 @@ pqos_cmt_proc_data_save(track_proc_t *proc, track_lwp_t *lwp, int intval,
|
||||||
|
{
|
||||||
|
(void) memset(line, 0, sizeof (pqos_cmt_proc_line_t));
|
||||||
|
|
||||||
|
- (void) strncpy(line->proc_name, proc->name, sizeof (line->proc_name));
|
||||||
|
- line->proc_name[WIN_PROCNAME_SIZE - 1] = 0;
|
||||||
|
+ memcpy(line->proc_name, proc->name, sizeof (line->proc_name) - 1);
|
||||||
|
line->pid = proc->pid;
|
||||||
|
line->nlwp = proc_nlwp(proc);
|
||||||
|
|
||||||
|
@@ -3216,8 +3214,7 @@ pqos_mbm_proc_data_save(track_proc_t *proc, track_lwp_t *lwp, int intval,
|
||||||
|
{
|
||||||
|
(void) memset(line, 0, sizeof (pqos_mbm_proc_line_t));
|
||||||
|
|
||||||
|
- (void) strncpy(line->proc_name, proc->name, sizeof (line->proc_name));
|
||||||
|
- line->proc_name[WIN_PROCNAME_SIZE - 1] = 0;
|
||||||
|
+ memcpy(line->proc_name, proc->name, sizeof (line->proc_name) - 1);
|
||||||
|
line->pid = proc->pid;
|
||||||
|
line->nlwp = proc_nlwp(proc);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
29
0015-common-Increase-node-string-buffer-size.patch
Normal file
29
0015-common-Increase-node-string-buffer-size.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
From 58546ce76063d7cc41a6601b44eca9d5502d9da1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 23:16:27 +0100
|
||||||
|
Subject: [PATCH 15/32] common: Increase node string buffer size
|
||||||
|
|
||||||
|
Since the maximum number of CPUs was doubled, it might be reasonable to
|
||||||
|
double the size of the buffer for the string representation.
|
||||||
|
|
||||||
|
Refs 6f6cc3b24d84c413556639b64a62aca6ad0b21cc
|
||||||
|
---
|
||||||
|
common/os/os_win.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_win.c b/common/os/os_win.c
|
||||||
|
index 69e24be..bd6f5ce 100644
|
||||||
|
--- a/common/os/os_win.c
|
||||||
|
+++ b/common/os/os_win.c
|
||||||
|
@@ -215,7 +215,7 @@ nodedetail_line_show(win_reg_t *reg, char *title, char *value, int line)
|
||||||
|
void
|
||||||
|
os_nodedetail_data(dyn_nodedetail_t *dyn, win_reg_t *seg)
|
||||||
|
{
|
||||||
|
- char s1[256], s2[32];
|
||||||
|
+ char s1[512], s2[32];
|
||||||
|
node_t *node;
|
||||||
|
win_countvalue_t value;
|
||||||
|
node_meminfo_t meminfo;
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
50
0016-Fix-remaining-clang-warnings.patch
Normal file
50
0016-Fix-remaining-clang-warnings.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 75e1f8a0cc7531f5d6e38f083d427114025b7c84 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andi Kleen <ak@linux.intel.com>
|
||||||
|
Date: Wed, 31 Jul 2024 08:52:46 -0700
|
||||||
|
Subject: [PATCH 16/32] Fix remaining clang warnings
|
||||||
|
|
||||||
|
Increase mapfile buffer size.
|
||||||
|
Avoid some warnings for pointer truncation.
|
||||||
|
---
|
||||||
|
common/os/map.c | 2 +-
|
||||||
|
common/os/os_perf.c | 4 ++--
|
||||||
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/map.c b/common/os/map.c
|
||||||
|
index 83fdb88..39251a8 100644
|
||||||
|
--- a/common/os/map.c
|
||||||
|
+++ b/common/os/map.c
|
||||||
|
@@ -144,7 +144,7 @@ map_read(pid_t pid, map_proc_t *map)
|
||||||
|
char path[PATH_MAX];
|
||||||
|
char line[MAPFILE_LINE_SIZE];
|
||||||
|
char addr_str[128], attr_str[128], off_str[128];
|
||||||
|
- char fd_str[128], inode_str[128], path_str[PATH_MAX];
|
||||||
|
+ char fd_str[128], inode_str[128], path_str[PATH_MAX*2];
|
||||||
|
char s1[64], s2[64];
|
||||||
|
uint64_t start_addr, end_addr;
|
||||||
|
unsigned int attr;
|
||||||
|
diff --git a/common/os/os_perf.c b/common/os/os_perf.c
|
||||||
|
index 49fdaaa..5a992e4 100644
|
||||||
|
--- a/common/os/os_perf.c
|
||||||
|
+++ b/common/os/os_perf.c
|
||||||
|
@@ -292,7 +292,7 @@ cpu_profiling_setupstart(perf_cpu_t *cpu,
|
||||||
|
static int
|
||||||
|
cpu_profiling_partpause(perf_cpu_t *cpu, void *arg)
|
||||||
|
{
|
||||||
|
- perf_count_id_t perf_count_id = (perf_count_id_t)arg;
|
||||||
|
+ perf_count_id_t perf_count_id = (perf_count_id_t)(uintptr_t)arg;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (perf_count_id == PERF_COUNT_INVALID ||
|
||||||
|
@@ -345,7 +345,7 @@ cpu_profiling_multipause(perf_cpu_t *cpu, void *arg)
|
||||||
|
static int
|
||||||
|
cpu_profiling_restore(perf_cpu_t *cpu, void *arg)
|
||||||
|
{
|
||||||
|
- perf_count_id_t perf_count_id = (perf_count_id_t)arg;
|
||||||
|
+ perf_count_id_t perf_count_id = (perf_count_id_t)(uintptr_t)arg;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (perf_count_id == PERF_COUNT_INVALID ||
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 2410088f0f22f5f76ac860c9c4bb48944c828940 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andi Kleen <ak@linux.intel.com>
|
||||||
|
Date: Wed, 31 Jul 2024 16:28:18 -0700
|
||||||
|
Subject: [PATCH 17/32] Revert "common/reg: Add pragmas to silence false
|
||||||
|
positive warnings"
|
||||||
|
|
||||||
|
This reverts commit 5509f2830b5376ff24690b7bed076053db25232c.
|
||||||
|
---
|
||||||
|
common/reg.c | 6 ------
|
||||||
|
1 file changed, 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/reg.c b/common/reg.c
|
||||||
|
index f969cbc..ad37274 100644
|
||||||
|
--- a/common/reg.c
|
||||||
|
+++ b/common/reg.c
|
||||||
|
@@ -239,12 +239,9 @@ reg_line_write(win_reg_t *r, int line, reg_align_t align, char *content)
|
||||||
|
pos_x = (r->ncols_scr - len) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#pragma GCC diagnostic push
|
||||||
|
-#pragma GCC diagnostic ignored "-Wformat-security"
|
||||||
|
if (len > 0) {
|
||||||
|
(void) mvwprintw(r->hdl, line, pos_x, "%s", content);
|
||||||
|
}
|
||||||
|
-#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
if (r->mode != 0) {
|
||||||
|
(void) wattroff(r->hdl, r->mode);
|
||||||
|
@@ -269,12 +266,9 @@ reg_highlight_write(win_reg_t *r, int line, int align, char *content)
|
||||||
|
pos_x = (r->ncols_scr - len) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#pragma GCC diagnostic push
|
||||||
|
-#pragma GCC diagnostic ignored "-Wformat-security"
|
||||||
|
if (len > 0) {
|
||||||
|
(void) mvwprintw(r->hdl, line, pos_x, "%s", content);
|
||||||
|
}
|
||||||
|
-#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
(void) wattroff(r->hdl, A_REVERSE | A_BOLD);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
31
0018-common-Replace-malloc-strncpy-with-strdup.patch
Normal file
31
0018-common-Replace-malloc-strncpy-with-strdup.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From fb42dae1e7c0c97b9a49a22e8f860882a26b3464 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 23:07:07 +0100
|
||||||
|
Subject: [PATCH 18/32] common: Replace malloc()+strncpy() with strdup()
|
||||||
|
|
||||||
|
This silences the stringop-truncation warning.
|
||||||
|
---
|
||||||
|
common/os/os_util.c | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_util.c b/common/os/os_util.c
|
||||||
|
index 53bf405..3e4d5fc 100644
|
||||||
|
--- a/common/os/os_util.c
|
||||||
|
+++ b/common/os/os_util.c
|
||||||
|
@@ -387,12 +387,10 @@ str_int_extract(char *str, int *arr, int arr_size, int *num)
|
||||||
|
int len = strlen(str);
|
||||||
|
boolean_t ret = B_FALSE;
|
||||||
|
|
||||||
|
- if ((scopy = malloc(len + 1)) == NULL) {
|
||||||
|
+ if ((scopy = strdup(str)) == NULL) {
|
||||||
|
return (B_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
- strncpy(scopy, str, len + 1);
|
||||||
|
- scopy[len] = 0;
|
||||||
|
cur = scopy;
|
||||||
|
|
||||||
|
while (cur < (scopy + len)) {
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
114
0019-common-Build-node-string-with-bound-checks.patch
Normal file
114
0019-common-Build-node-string-with-bound-checks.patch
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
From cf9ca3853a2c801fe04d9bf6d4e2698a00d6de79 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2024 23:11:13 +0100
|
||||||
|
Subject: [PATCH 19/32] common: Build node string with bound checks
|
||||||
|
|
||||||
|
A print_buf() function is added to keep track of progress inside the s1
|
||||||
|
buffer and the remaining space. With s1 acting as a cursor and vsnprintf
|
||||||
|
taking care of formatting, the temp buffers s2 and s3 are no longer
|
||||||
|
needed.
|
||||||
|
|
||||||
|
This silences the stringop-overflow warning.
|
||||||
|
---
|
||||||
|
common/os/os_win.c | 47 ++++++++++++++++++++++++++++------------------
|
||||||
|
1 file changed, 29 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_win.c b/common/os/os_win.c
|
||||||
|
index bd6f5ce..48052c6 100644
|
||||||
|
--- a/common/os/os_win.c
|
||||||
|
+++ b/common/os/os_win.c
|
||||||
|
@@ -29,6 +29,7 @@
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
+#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
@@ -105,6 +106,28 @@ cpuid_cmp(const void *a, const void *b)
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+print_buf(char **destp, int *sizep, const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ va_list ap;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ if (*sizep <= 0)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ va_start(ap, fmt);
|
||||||
|
+ len = vsnprintf(*destp, *sizep, fmt, ap);
|
||||||
|
+ va_end(ap);
|
||||||
|
+
|
||||||
|
+ if (len >= *sizep) {
|
||||||
|
+ *sizep = 0;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *destp += len;
|
||||||
|
+ *sizep -= len;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Build a readable string of CPU ID and try to reduce the string length. e.g.
|
||||||
|
* For cpu1, cpu2, cpu3, cpu4, the string is "CPU(1-4)",
|
||||||
|
@@ -113,7 +136,6 @@ cpuid_cmp(const void *a, const void *b)
|
||||||
|
static void
|
||||||
|
node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
{
|
||||||
|
- char s2[128], s3[128];
|
||||||
|
int i, j, k, l, cpuid_start;
|
||||||
|
int *cpuid_arr;
|
||||||
|
int ncpus;
|
||||||
|
@@ -156,40 +178,29 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
|
||||||
|
if (k < ncpus) {
|
||||||
|
if (l == 1) {
|
||||||
|
- (void) snprintf(s2, sizeof (s2), "%d ", cpuid_start);
|
||||||
|
+ print_buf(&s1, &size, "%d ", cpuid_start);
|
||||||
|
} else {
|
||||||
|
- (void) snprintf(s2, sizeof (s2),
|
||||||
|
+ print_buf(&s1, &size,
|
||||||
|
"%d-%d ", cpuid_start, cpuid_start + l - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (l == 1) {
|
||||||
|
- (void) snprintf(s2, sizeof (s2), "%d",
|
||||||
|
- cpuid_start);
|
||||||
|
+ print_buf(&s1, &size, "%d", cpuid_start);
|
||||||
|
} else {
|
||||||
|
- (void) snprintf(s2, sizeof (s2), "%d-%d",
|
||||||
|
+ print_buf(&s1, &size, "%d-%d",
|
||||||
|
cpuid_start, cpuid_start + l - 1);
|
||||||
|
}
|
||||||
|
s2_len -= strlen(s2);
|
||||||
|
|
||||||
|
- (void) snprintf(s3, sizeof (s3), " %d",
|
||||||
|
- cpuid_arr[j]);
|
||||||
|
- s2_len -= strlen(s3);
|
||||||
|
- if (s2_len > 0)
|
||||||
|
- (void) strncat(s2, s3, s2_len);
|
||||||
|
+ print_buf(&s1, &size, " %d", cpuid_arr[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- s1_len -= strlen(s2);
|
||||||
|
- if (s1_len > 0)
|
||||||
|
- (void) strncat(s1, s2, s1_len);
|
||||||
|
cpuid_start = cpuid_arr[j];
|
||||||
|
l = 1;
|
||||||
|
} else {
|
||||||
|
if (k == ncpus) {
|
||||||
|
- (void) snprintf(s2, sizeof (s2), "%d-%d",
|
||||||
|
+ print_buf(&s1, &size, "%d-%d",
|
||||||
|
cpuid_start, cpuid_start + l);
|
||||||
|
- s1_len -= strlen(s2);
|
||||||
|
- if (s1_len > 0)
|
||||||
|
- (void) strncat(s1, s2, s1_len);
|
||||||
|
} else {
|
||||||
|
l++;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
42
0020-Add-missing-hunks-from-last-change.patch
Normal file
42
0020-Add-missing-hunks-from-last-change.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From e1bc987c482bd8f0eadae88a78d3fc91c1c27de3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andi Kleen <ak@linux.intel.com>
|
||||||
|
Date: Thu, 1 Aug 2024 01:30:40 -0700
|
||||||
|
Subject: [PATCH 20/32] Add missing hunks from last change
|
||||||
|
|
||||||
|
---
|
||||||
|
common/os/os_win.c | 5 -----
|
||||||
|
1 file changed, 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_win.c b/common/os/os_win.c
|
||||||
|
index 48052c6..9aaefae 100644
|
||||||
|
--- a/common/os/os_win.c
|
||||||
|
+++ b/common/os/os_win.c
|
||||||
|
@@ -139,7 +139,6 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
int i, j, k, l, cpuid_start;
|
||||||
|
int *cpuid_arr;
|
||||||
|
int ncpus;
|
||||||
|
- int s1_len = size;
|
||||||
|
perf_cpu_t *cpus = node_cpus(node);
|
||||||
|
|
||||||
|
s1[0] = 0;
|
||||||
|
@@ -174,8 +173,6 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
for (j = 1; j < ncpus; j++) {
|
||||||
|
k++;
|
||||||
|
if (cpuid_arr[j] != cpuid_start + l) {
|
||||||
|
- int s2_len = sizeof(s2);
|
||||||
|
-
|
||||||
|
if (k < ncpus) {
|
||||||
|
if (l == 1) {
|
||||||
|
print_buf(&s1, &size, "%d ", cpuid_start);
|
||||||
|
@@ -190,8 +187,6 @@ node_cpu_string(node_t *node, char *s1, int size)
|
||||||
|
print_buf(&s1, &size, "%d-%d",
|
||||||
|
cpuid_start, cpuid_start + l - 1);
|
||||||
|
}
|
||||||
|
- s2_len -= strlen(s2);
|
||||||
|
-
|
||||||
|
print_buf(&s1, &size, " %d", cpuid_arr[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From 41db077a4c36e6f28ea55c5df7d6f34c886d5a0a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Thu, 1 Aug 2024 09:41:27 +0100
|
||||||
|
Subject: [PATCH 21/32] common: remove extra %d from debug_print and fix
|
||||||
|
grammar
|
||||||
|
|
||||||
|
The debug_print print formats two integers using %d/%d but only
|
||||||
|
one integer is being passed as an argument. Remove the send %d.
|
||||||
|
Also fix grammar in the debug message.
|
||||||
|
|
||||||
|
Fixes: 8a4a6c57a74d ("Add a feature to show per-Node QPI bandwidth")
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/os_perf.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_perf.c b/common/os/os_perf.c
|
||||||
|
index 5a992e4..d8d634f 100644
|
||||||
|
--- a/common/os/os_perf.c
|
||||||
|
+++ b/common/os/os_perf.c
|
||||||
|
@@ -1510,7 +1510,7 @@ os_uncore_start(perf_ctl_t *ctl, perf_task_t *task)
|
||||||
|
|
||||||
|
if (uncore_start(ctl, t->nid) != 0) {
|
||||||
|
debug_print(NULL, 2,
|
||||||
|
- "os_uncore_start is failed for node %d/%d\n",
|
||||||
|
+ "os_uncore_start failed for node %d\n",
|
||||||
|
t->nid);
|
||||||
|
perf_status_set(PERF_STATUS_UNCORE_FAILED);
|
||||||
|
return (-1);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From d52038ca7af3198dc8797841f2b25f2cd862f5df Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Thu, 1 Aug 2024 09:45:32 +0100
|
||||||
|
Subject: [PATCH 22/32] common: fix uninitialized string content in dyn->pid ==
|
||||||
|
0 case
|
||||||
|
|
||||||
|
In the case where dyn->pid is zero the string content is not initialized
|
||||||
|
and subsequent writing of this string will emit unintialized garbage and
|
||||||
|
potentially leaking data on the stack and/or buffer overflow. Fix this
|
||||||
|
by making it an empty string.
|
||||||
|
|
||||||
|
Fixes: 232711080396 ("Add cache monitoring and memory bandwidth monitoring features")
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/win.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/common/win.c b/common/win.c
|
||||||
|
index 39909bc..c3e8492 100644
|
||||||
|
--- a/common/win.c
|
||||||
|
+++ b/common/win.c
|
||||||
|
@@ -3324,6 +3324,7 @@ pqos_mbm_data_show(dyn_win_t *win, boolean_t *note_out)
|
||||||
|
|
||||||
|
if (dyn->pid == 0) {
|
||||||
|
/* TODO */
|
||||||
|
+ *content = '\0';
|
||||||
|
} else if (dyn->lwpid == 0) {
|
||||||
|
nprocs = 1;
|
||||||
|
data_reg->nlines_total = 1;
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
1046
0023-common-Add-missing-t-from-help-and-manual.patch
Normal file
1046
0023-common-Add-missing-t-from-help-and-manual.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,43 @@
|
|||||||
|
From 1057faab896911fb2d3b5cd98bec15cecbdcc00e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Mon, 5 Aug 2024 17:33:36 +0100
|
||||||
|
Subject: [PATCH 24/32] common: perform sanity check on num to avoid array
|
||||||
|
bounds underflow/overflow
|
||||||
|
|
||||||
|
The integer num is being read from a file and potentially could have values
|
||||||
|
outside of the range of the arrays it is used to index into. To avoid any
|
||||||
|
potential array index underflow or overflow accesses perform some sanity
|
||||||
|
checking.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/node.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/common/os/node.c b/common/os/node.c
|
||||||
|
index 5df1d89..f384e3b 100644
|
||||||
|
--- a/common/os/node.c
|
||||||
|
+++ b/common/os/node.c
|
||||||
|
@@ -167,6 +167,9 @@ cpu_refresh(boolean_t init)
|
||||||
|
if (!os_sysfs_cpu_enum(node->nid, cpu_arr, NCPUS_NODE_MAX, &num)) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
+ if (num < 0 || num >= NCPUS_NODE_MAX) {
|
||||||
|
+ return (-1);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (os_perf_cpuarr_refresh(node->cpus, NCPUS_NODE_MAX, cpu_arr,
|
||||||
|
num, init) != 0) {
|
||||||
|
@@ -225,6 +228,9 @@ node_group_refresh(boolean_t init)
|
||||||
|
if (!os_sysfs_node_enum(node_arr, NNODES_MAX, &num)) {
|
||||||
|
goto L_EXIT;
|
||||||
|
}
|
||||||
|
+ if (num < 0 || num >= NNODES_MAX) {
|
||||||
|
+ goto L_EXIT;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
for (i = 0; i < NNODES_MAX; i++) {
|
||||||
|
node = node_get(i);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From 4cc28a70d711c5e543648c671faf7731af55ddbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Tue, 6 Aug 2024 11:26:03 +0100
|
||||||
|
Subject: [PATCH 25/32] common: ensure the dump and log files are not opened
|
||||||
|
multiple times
|
||||||
|
|
||||||
|
Currently one can pass the -d and -f options multiple times and this
|
||||||
|
leads to the dump and log files being opened more than once. Check
|
||||||
|
for these files being re-opened again to avoid this.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/numatop.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/common/numatop.c b/common/numatop.c
|
||||||
|
index d66e64b..122c187 100644
|
||||||
|
--- a/common/numatop.c
|
||||||
|
+++ b/common/numatop.c
|
||||||
|
@@ -103,6 +103,11 @@ main(int argc, char *argv[])
|
||||||
|
goto L_EXIT0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (log != NULL) {
|
||||||
|
+ stderr_print("Invalid multiple use of -f option.\n");
|
||||||
|
+ goto L_EXIT0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((log = fopen(optarg, "w")) == NULL) {
|
||||||
|
stderr_print("Cannot open '%s' for writing.\n",
|
||||||
|
optarg);
|
||||||
|
@@ -142,6 +147,11 @@ main(int argc, char *argv[])
|
||||||
|
goto L_EXIT0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (dump != NULL) {
|
||||||
|
+ stderr_print("Invalid multiple use of -d option.\n");
|
||||||
|
+ goto L_EXIT0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((dump = fopen(optarg, "w")) == NULL) {
|
||||||
|
stderr_print("Cannot open '%s' for dump.\n",
|
||||||
|
optarg);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 020fe25d0fa7446ebcd7925caeae914ba4481f3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Tue, 6 Aug 2024 11:35:23 +0100
|
||||||
|
Subject: [PATCH 26/32] common: cast difference of data_head and data_tail to
|
||||||
|
int64_t rather than int
|
||||||
|
|
||||||
|
Don't assume int is the same size as the uint64_t data_head and data_tail
|
||||||
|
sizes. Use int64_t and remove the redundant use of variable data_size.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/pfwrapper.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/pfwrapper.c b/common/os/pfwrapper.c
|
||||||
|
index 943820e..10042d9 100644
|
||||||
|
--- a/common/os/pfwrapper.c
|
||||||
|
+++ b/common/os/pfwrapper.c
|
||||||
|
@@ -58,7 +58,7 @@ mmap_buffer_read(struct perf_event_mmap_page *header, void *buf, size_t size)
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
uint64_t data_head, data_tail;
|
||||||
|
- int data_size, ncopies;
|
||||||
|
+ int ncopies;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The first page is a meta-data page (struct perf_event_mmap_page),
|
||||||
|
@@ -79,7 +79,7 @@ mmap_buffer_read(struct perf_event_mmap_page *header, void *buf, size_t size)
|
||||||
|
* The kernel function "perf_output_space()" guarantees no data_head can
|
||||||
|
* wrap over the data_tail.
|
||||||
|
*/
|
||||||
|
- if ((data_size = data_head - data_tail) < (int)size) {
|
||||||
|
+ if ((int64_t)(data_head - data_tail) < (int64_t)size) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From 3095e829f785fefe8618bfd12652eb1ed173f29a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Tue, 6 Aug 2024 14:39:39 +0100
|
||||||
|
Subject: [PATCH 27/32] common: resolve_unique: Fix uninitialised return of
|
||||||
|
pointer item
|
||||||
|
|
||||||
|
In the case where resolve_unique does not resolve a unique symbol
|
||||||
|
the uninitialzed pointer item is returned which is problematic because
|
||||||
|
the caller performs a NULL check on this. Fix this be initializing
|
||||||
|
item to NULL at the start.
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/os/sym.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/sym.c b/common/os/sym.c
|
||||||
|
index 4626c8d..ffd40fc 100644
|
||||||
|
--- a/common/os/sym.c
|
||||||
|
+++ b/common/os/sym.c
|
||||||
|
@@ -842,7 +842,7 @@ sym_resolve(sym_t *sym, uint64_t addr, sym_item_t **item_arr,
|
||||||
|
static sym_item_t *
|
||||||
|
resolve_unique(sym_t *sym, uint64_t addr, sym_item_t **arr, uint64_t *base_addr)
|
||||||
|
{
|
||||||
|
- sym_item_t *item_arr, *item;
|
||||||
|
+ sym_item_t *item_arr, *item = NULL;
|
||||||
|
int num, i;
|
||||||
|
|
||||||
|
if (sym_resolve(sym, addr, &item_arr, &num, base_addr) != 0) {
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
32
0028-common-fix-timeout-option-break-out-of-loop.patch
Normal file
32
0028-common-fix-timeout-option-break-out-of-loop.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From b2206e7780e7074e811ca1159753b0ccfa68cbc5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Tue, 6 Aug 2024 16:37:54 +0100
|
||||||
|
Subject: [PATCH 28/32] common: fix timeout option, break out of loop
|
||||||
|
|
||||||
|
Currently the timeout -t option does not work, the code display
|
||||||
|
loop continues forever when the timeout occurs. Fix this by
|
||||||
|
replacing the continue statement with a break to exit the loop.
|
||||||
|
|
||||||
|
Fixes: https://github.com/intel/numatop/issues/27
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
common/disp.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/disp.c b/common/disp.c
|
||||||
|
index bb0bba2..ea865c3 100644
|
||||||
|
--- a/common/disp.c
|
||||||
|
+++ b/common/disp.c
|
||||||
|
@@ -514,7 +514,7 @@ disp_handler(void *arg __attribute__((unused)))
|
||||||
|
g_run_secs = TIME_NSEC_MAX;
|
||||||
|
debug_print(NULL, 2,
|
||||||
|
"disp: it's time to exit\n");
|
||||||
|
- continue;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((status == ETIMEDOUT) && (flag == DISP_FLAG_NONE)) {
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,76 @@
|
|||||||
|
From 0df5ed7dd09816495596c7b5224b4747713d3766 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.king@intel.com>
|
||||||
|
Date: Wed, 7 Aug 2024 08:55:50 +0100
|
||||||
|
Subject: [PATCH 29/32] common: use mount/umount system calls rather than using
|
||||||
|
commands
|
||||||
|
|
||||||
|
Using the mount and umount commands is slower and less safe than
|
||||||
|
directly using the mount and umount system calls. Fix this by replacing
|
||||||
|
the exec'ing of the commands with direct system calls.
|
||||||
|
|
||||||
|
Fixes: https://github.com/intel/numatop/issues/60
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.king@intel.com>
|
||||||
|
---
|
||||||
|
common/os/os_util.c | 20 +++++++++++---------
|
||||||
|
1 file changed, 11 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_util.c b/common/os/os_util.c
|
||||||
|
index 3e4d5fc..a2212fb 100644
|
||||||
|
--- a/common/os/os_util.c
|
||||||
|
+++ b/common/os/os_util.c
|
||||||
|
@@ -42,6 +42,7 @@
|
||||||
|
#include <locale.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
+#include <sys/mount.h>
|
||||||
|
#include "../include/types.h"
|
||||||
|
#include "../include/util.h"
|
||||||
|
#include "../include/os/os_util.h"
|
||||||
|
@@ -731,33 +732,34 @@ static boolean_t resctrl_mounted(void)
|
||||||
|
|
||||||
|
boolean_t os_cmt_init(void)
|
||||||
|
{
|
||||||
|
- char command[128];
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
g_pqos_moni_id = 0;
|
||||||
|
|
||||||
|
if (resctrl_mounted())
|
||||||
|
return B_TRUE;
|
||||||
|
|
||||||
|
- snprintf(command, sizeof(command),
|
||||||
|
- "mount -t resctrl resctrl /sys/fs/resctrl 2>/dev/null");
|
||||||
|
-
|
||||||
|
- if (!execute_command(command, "r"))
|
||||||
|
+ ret = mount("resctrl", "/sys/fs/resctrl", "resctrl", 0, NULL);
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ debug_print(NULL, 2, "Mount of /sys/fs/resctrl failed (errno = %d)\n", errno);
|
||||||
|
return B_FALSE;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return resctrl_mounted();
|
||||||
|
}
|
||||||
|
|
||||||
|
void os_cmt_fini(void)
|
||||||
|
{
|
||||||
|
- char command[128];
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
if (!resctrl_mounted())
|
||||||
|
return;
|
||||||
|
|
||||||
|
- snprintf(command, sizeof(command),
|
||||||
|
- "umount -f /sys/fs/resctrl 2>/dev/null");
|
||||||
|
+ ret = umount("/sys/fs/resctrl");
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ debug_print(NULL, 2, "Unmount of /sys/fs/resctrl failed (errno = %d)\n", errno);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- execute_command(command, "r");
|
||||||
|
g_pqos_moni_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
152
0030-common-remove-executing-commands-for-directory-and-f.patch
Normal file
152
0030-common-remove-executing-commands-for-directory-and-f.patch
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
From ccece149e1b73a636474b67b641b578f5e7476f5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.king@intel.com>
|
||||||
|
Date: Wed, 7 Aug 2024 10:18:08 +0100
|
||||||
|
Subject: [PATCH 30/32] common: remove executing commands for directory and
|
||||||
|
file operations
|
||||||
|
|
||||||
|
Calling commands using execute_command to remove files and directories,
|
||||||
|
create directories and writing data to a file is just wrong. Replace
|
||||||
|
these with direct system calls and remove the execute_command helper
|
||||||
|
function now that it's not required.
|
||||||
|
|
||||||
|
Fixes: https://github.com/intel/numatop/issues/50
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.king@intel.com>
|
||||||
|
---
|
||||||
|
common/os/os_util.c | 83 ++++++++++++++++++++++++++++++---------------
|
||||||
|
1 file changed, 55 insertions(+), 28 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/os_util.c b/common/os/os_util.c
|
||||||
|
index a2212fb..0b862c2 100644
|
||||||
|
--- a/common/os/os_util.c
|
||||||
|
+++ b/common/os/os_util.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
+#define _XOPEN_SOURCE 500
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
@@ -41,6 +42,7 @@
|
||||||
|
#include <limits.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <math.h>
|
||||||
|
+#include <ftw.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include "../include/types.h"
|
||||||
|
@@ -699,23 +701,6 @@ os_sysfs_uncore_imc_init(imc_info_t *imc, int num)
|
||||||
|
return imc_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static boolean_t execute_command(const char *command, const char *type)
|
||||||
|
-{
|
||||||
|
- FILE *fp;
|
||||||
|
-
|
||||||
|
- fp = popen(command, type);
|
||||||
|
- if (fp == NULL) {
|
||||||
|
- debug_print(NULL, 2, "Execute '%s' failed (errno = %d)\n",
|
||||||
|
- command, errno);
|
||||||
|
- return B_FALSE;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- pclose(fp);
|
||||||
|
- debug_print(NULL, 2, "Execute '%s' ok\n", command);
|
||||||
|
-
|
||||||
|
- return B_TRUE;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static boolean_t resctrl_mounted(void)
|
||||||
|
{
|
||||||
|
char path[128];
|
||||||
|
@@ -763,9 +748,41 @@ void os_cmt_fini(void)
|
||||||
|
g_pqos_moni_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int os_sysfs_nftw_unlink(const char *fpath, const struct stat *statbuf,
|
||||||
|
+ int tflag, struct FTW *ftwbuf)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ (void)statbuf;
|
||||||
|
+ (void)ftwbuf;
|
||||||
|
+
|
||||||
|
+ switch (tflag) {
|
||||||
|
+ case FTW_F:
|
||||||
|
+ case FTW_SL:
|
||||||
|
+ case FTW_SLN:
|
||||||
|
+ default:
|
||||||
|
+ errno = 0;
|
||||||
|
+ ret = unlink(fpath);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ debug_print(NULL, 2, "unlink %s (errno=%d)\n", fpath, errno);
|
||||||
|
+ break;
|
||||||
|
+ case FTW_D:
|
||||||
|
+ case FTW_DP:
|
||||||
|
+ case FTW_DNR:
|
||||||
|
+ errno = 0;
|
||||||
|
+ ret = rmdir(fpath);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ debug_print(NULL, 2, "rmdir %s (errno=%d)\n", fpath, errno);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int os_sysfs_cmt_task_set(int pid, int lwpid, struct _perf_pqos *pqos)
|
||||||
|
{
|
||||||
|
- char command[160], path[128];
|
||||||
|
+ char data[64], path[128];
|
||||||
|
+ int ret, fd;
|
||||||
|
|
||||||
|
if (lwpid)
|
||||||
|
pqos->task_id = lwpid;
|
||||||
|
@@ -777,23 +794,33 @@ int os_sysfs_cmt_task_set(int pid, int lwpid, struct _perf_pqos *pqos)
|
||||||
|
snprintf(path, sizeof(path),
|
||||||
|
"/sys/fs/resctrl/mon_groups/%d", pqos->task_id);
|
||||||
|
|
||||||
|
- snprintf(command, sizeof(command), "rm -rf %s 2>/dev/null", path);
|
||||||
|
- if (!execute_command(command, "r"))
|
||||||
|
+ /* nftw will return -1 if the path does not exist, ignore this */
|
||||||
|
+ (void)nftw(path, os_sysfs_nftw_unlink, 32, FTW_DEPTH | FTW_PHYS);
|
||||||
|
+
|
||||||
|
+ ret = mkdir(path, 0777);
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ debug_print(NULL, 2, "mkdir %s failed, errno=%d\n", path, errno);
|
||||||
|
return -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- snprintf(command, sizeof(command), "mkdir %s 2>/dev/null", path);
|
||||||
|
- if (!execute_command(command, "r"))
|
||||||
|
+ snprintf(path, sizeof(path),
|
||||||
|
+ "/sys/fs/resctrl/mon_groups/%d/tasks", pqos->task_id);
|
||||||
|
+ fd = open(path, O_RDWR);
|
||||||
|
+ if (fd < 0) {
|
||||||
|
+ debug_print(NULL, 2, "open %s failed, errno=%d\n", path, errno);
|
||||||
|
return -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (lwpid == 0)
|
||||||
|
- snprintf(command, sizeof(command),
|
||||||
|
- "echo %d > %s/tasks", pid, path);
|
||||||
|
+ snprintf(data, sizeof(data), "%d\n", pid);
|
||||||
|
else
|
||||||
|
- snprintf(command, sizeof(command),
|
||||||
|
- "echo %d > %s/tasks", lwpid, path);
|
||||||
|
-
|
||||||
|
- if (!execute_command(command, "r"))
|
||||||
|
+ snprintf(data, sizeof(data), "%d\n", lwpid);
|
||||||
|
+ if (write(fd, data, strlen(data)) < 0) {
|
||||||
|
+ debug_print(NULL, 2, "write to %s failed, errno=%d\n", path, errno);
|
||||||
|
+ (void)close(fd);
|
||||||
|
return -1;
|
||||||
|
+ }
|
||||||
|
+ (void)close(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 9c4d14a9c553840022ecb2333b87643370b333d8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
Date: Tue, 13 Aug 2024 14:17:32 +0100
|
||||||
|
Subject: [PATCH 31/32] powerpc/util: fix build warning, cast LHS of expression
|
||||||
|
to size_t
|
||||||
|
|
||||||
|
The powerpc builds are throwing a warning, fix this with a cast.
|
||||||
|
|
||||||
|
Fixes warning:
|
||||||
|
powerpc/util.c:91:34: warning: comparison of integer expressions of different
|
||||||
|
signedness: 'long int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare]
|
||||||
|
91 | if (c - line + 2 < len && ...
|
||||||
|
|
||||||
|
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||||
|
---
|
||||||
|
powerpc/util.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/powerpc/util.c b/powerpc/util.c
|
||||||
|
index f2ff159..6e1fe9d 100644
|
||||||
|
--- a/powerpc/util.c
|
||||||
|
+++ b/powerpc/util.c
|
||||||
|
@@ -88,7 +88,7 @@ arch__cpuinfo_freq(double *freq, char *unit)
|
||||||
|
}
|
||||||
|
|
||||||
|
c = strchr(line, ':');
|
||||||
|
- if (c - line + 2 < len &&
|
||||||
|
+ if ((size_t)(c - line + 2) < len &&
|
||||||
|
!strncmp(c + 2, "pSeries", sizeof ("pSeries") - 1)) {
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
36
0032-common-os-map-Fix-overflow-warning.patch
Normal file
36
0032-common-os-map-Fix-overflow-warning.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
From 7dd67b56333bae4a40d825600c3b7cc7df08068d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pingfan Liu <piliu@redhat.com>
|
||||||
|
Date: Mon, 17 Jun 2024 12:36:39 +0800
|
||||||
|
Subject: [PATCH 32/32] common/os: map: Fix overflow warning
|
||||||
|
|
||||||
|
As we have
|
||||||
|
common/include/types.h:79:#ifndef PATH_MAX
|
||||||
|
common/include/types.h:80:#define PATH_MAX 2048
|
||||||
|
|
||||||
|
The following code has potential issue with overflow:
|
||||||
|
if ((nargs = sscanf(line, "%127[^ ] %127[^ ] %127[^ ] %127[^ ] %127[^ ] %4095[^\n]",
|
||||||
|
addr_str, attr_str, off_str, fd_str, inode_str, path_str)) < 0) {
|
||||||
|
|
||||||
|
Where the capacity of path_str is 2048 instead of 4096.
|
||||||
|
|
||||||
|
Signed-off-by: Pingfan Liu <piliu@redhat.com>
|
||||||
|
---
|
||||||
|
common/os/map.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/os/map.c b/common/os/map.c
|
||||||
|
index 39251a8..29c5a78 100644
|
||||||
|
--- a/common/os/map.c
|
||||||
|
+++ b/common/os/map.c
|
||||||
|
@@ -165,7 +165,7 @@ map_read(pid_t pid, map_proc_t *map)
|
||||||
|
/*
|
||||||
|
* e.g. 00400000-00405000 r-xp 00000000 fd:00 678793 /usr/bin/vmstat
|
||||||
|
*/
|
||||||
|
- if ((nargs = sscanf(line, "%127[^ ] %127[^ ] %127[^ ] %127[^ ] %127[^ ] %4095[^\n]",
|
||||||
|
+ if ((nargs = sscanf(line, "%127[^ ] %127[^ ] %127[^ ] %127[^ ] %127[^ ] %2047[^\n]",
|
||||||
|
addr_str, attr_str, off_str, fd_str, inode_str, path_str)) < 0) {
|
||||||
|
goto L_EXIT;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
6
gating.yaml
Normal file
6
gating.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
--- !Policy
|
||||||
|
product_versions:
|
||||||
|
- rhel-9
|
||||||
|
decision_context: osci_compose_gate
|
||||||
|
rules:
|
||||||
|
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.general-numatop.tier0.functional}
|
@ -3,12 +3,46 @@
|
|||||||
|
|
||||||
Name: numatop
|
Name: numatop
|
||||||
Version: 2.4
|
Version: 2.4
|
||||||
Release: 1%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: Memory access locality characterization and analysis
|
Summary: Memory access locality characterization and analysis
|
||||||
|
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: https://01.org/numatop
|
URL: https://01.org/numatop
|
||||||
Source: https://github.com/intel/numatop/archive/refs/tags/v%{version}.tar.gz
|
Source: https://github.com/intel/numatop/archive/refs/tags/v%{version}.tar.gz
|
||||||
|
# Patch0: format.patch
|
||||||
|
Patch01: 0001-common-reg.c-use-explicit-format-string.patch
|
||||||
|
Patch02: 0002-numatop-powerpc-Add-Power11-support.patch
|
||||||
|
Patch03: 0003-add-required-SECURITY.md-file-for-OSSF-Scorecard-com.patch
|
||||||
|
Patch04: 0004-x86-zen-Add-Zen-5-and-later-support.patch
|
||||||
|
Patch05: 0005-readme-Add-note-on-AMD-support.patch
|
||||||
|
Patch06: 0006-Fix-several-printf-format-specifiers.patch
|
||||||
|
Patch07: 0007-Clean-up-32-bit-build-warnings.patch
|
||||||
|
Patch08: 0008-common-os-os_win.c-Fix-incorrect-usage-of-strncat.patch
|
||||||
|
Patch09: 0009-common-os-os_util.c-Fix-off-by-one-on-string-length-.patch
|
||||||
|
#Patch10: 0010-common-reg-Add-pragmas-to-silence-false-positive-war.patch
|
||||||
|
Patch11: 0011-x86-Fix-missing-fields-for-EMR-support.patch
|
||||||
|
Patch12: 0012-common-Use-sym_type_t-in-elf64_binary_read-signature.patch
|
||||||
|
Patch13: 0013-common-Remove-unnecessary-temp-buffer.patch
|
||||||
|
Patch14: 0014-common-Use-memcpy-to-the-process-name-to-a-line.patch
|
||||||
|
Patch15: 0015-common-Increase-node-string-buffer-size.patch
|
||||||
|
Patch16: 0016-Fix-remaining-clang-warnings.patch
|
||||||
|
#Patch17: 0017-Revert-common-reg-Add-pragmas-to-silence-false-posit.patch
|
||||||
|
Patch18: 0018-common-Replace-malloc-strncpy-with-strdup.patch
|
||||||
|
Patch19: 0019-common-Build-node-string-with-bound-checks.patch
|
||||||
|
Patch20: 0020-Add-missing-hunks-from-last-change.patch
|
||||||
|
Patch21: 0021-common-remove-extra-d-from-debug_print-and-fix-gramm.patch
|
||||||
|
Patch22: 0022-common-fix-uninitialized-string-content-in-dyn-pid-0.patch
|
||||||
|
Patch23: 0023-common-Add-missing-t-from-help-and-manual.patch
|
||||||
|
Patch24: 0024-common-perform-sanity-check-on-num-to-avoid-array-bo.patch
|
||||||
|
Patch25: 0025-common-ensure-the-dump-and-log-files-are-not-opened-.patch
|
||||||
|
Patch26: 0026-common-cast-difference-of-data_head-and-data_tail-to.patch
|
||||||
|
Patch27: 0027-common-resolve_unique-Fix-uninitialised-return-of-po.patch
|
||||||
|
Patch28: 0028-common-fix-timeout-option-break-out-of-loop.patch
|
||||||
|
Patch29: 0029-common-use-mount-umount-system-calls-rather-than-usi.patch
|
||||||
|
Patch30: 0030-common-remove-executing-commands-for-directory-and-f.patch
|
||||||
|
Patch31: 0031-powerpc-util-fix-build-warning-cast-LHS-of-expressio.patch
|
||||||
|
Patch32: 0032-common-os-map-Fix-overflow-warning.patch
|
||||||
|
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
@ -62,14 +96,26 @@ autoreconf --force --install --symlink
|
|||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Feb 1 2024 Pingfan Liu <piliu@redhat.com> - 2.4.1
|
* Thu Feb 1 2024 Pingfan Liu <piliu@redhat.com> - 2.4.1
|
||||||
- Add EMR support
|
- Add initial support for EMR
|
||||||
|
|
||||||
|
* Fri Dec 8 2023 Pingfan Liu <piliu@redhat.com> - 2.3.3
|
||||||
- Add Power10 support
|
- Add Power10 support
|
||||||
|
|
||||||
* Wed Nov 2 2022 Pingfan Liu <piliu@redhat.com> - 2.2-3
|
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 2.1-7
|
||||||
- bump release version to 2.2-3
|
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||||
|
Related: rhbz#1991688
|
||||||
|
|
||||||
* Wed Dec 1 2021 Pingfan Liu <piliu@redhat.com> - 2.2-1
|
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.1-6
|
||||||
- rebase to v2.2
|
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||||
|
|
||||||
|
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-5
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-2
|
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-2
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
1
sources
Normal file
1
sources
Normal file
@ -0,0 +1 @@
|
|||||||
|
SHA512 (v2.4.tar.gz) = eb500424f56a3bcd19375cdca5f1c0d1f4ffbd9817bb0d42bb8224f2929c4cf1cdbb4005adf6a148f6e669db9337175c7dfbd3076aa2d99bfb08f537850efaff
|
64
tests/sanity/Makefile
Normal file
64
tests/sanity/Makefile
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Makefile of /tools/numatop/Sanity/smoke-test
|
||||||
|
# Description: It generates some NUMA load and checks whether numatop sees it.
|
||||||
|
# Author: Michael Petlan <mpetlan@redhat.com>
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 2 of
|
||||||
|
# the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be
|
||||||
|
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE. See the GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see http://www.gnu.org/licenses/.
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
export TEST=/tools/numatop/Sanity/smoke-test
|
||||||
|
export TESTVERSION=1.0
|
||||||
|
|
||||||
|
BUILT_FILES=
|
||||||
|
|
||||||
|
FILES=$(METADATA) runtest.sh Makefile PURPOSE mgen.tar.gz README
|
||||||
|
|
||||||
|
.PHONY: all install download clean
|
||||||
|
|
||||||
|
run: $(FILES) build
|
||||||
|
./runtest.sh
|
||||||
|
|
||||||
|
build: $(BUILT_FILES)
|
||||||
|
test -x runtest.sh || chmod a+x runtest.sh
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ $(BUILT_FILES)
|
||||||
|
|
||||||
|
|
||||||
|
include /usr/share/rhts/lib/rhts-make.include
|
||||||
|
|
||||||
|
$(METADATA): Makefile
|
||||||
|
@echo "Owner: Michael Petlan <mpetlan@redhat.com>" > $(METADATA)
|
||||||
|
@echo "Name: $(TEST)" >> $(METADATA)
|
||||||
|
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
|
||||||
|
@echo "Path: $(TEST_DIR)" >> $(METADATA)
|
||||||
|
@echo "Description: It generates some NUMA load and checks whether numatop sees it." >> $(METADATA)
|
||||||
|
@echo "Type: Sanity" >> $(METADATA)
|
||||||
|
@echo "TestTime: 10m" >> $(METADATA)
|
||||||
|
@echo "RunFor: numatop" >> $(METADATA)
|
||||||
|
@echo "Requires: numatop ncurses-devel numactl-devel git make check-devel" >> $(METADATA)
|
||||||
|
@echo "Priority: Normal" >> $(METADATA)
|
||||||
|
@echo "License: GPLv2+" >> $(METADATA)
|
||||||
|
@echo "Confidential: no" >> $(METADATA)
|
||||||
|
@echo "Architectures: x86_64" >> $(METADATA)
|
||||||
|
@echo "Destructive: no" >> $(METADATA)
|
||||||
|
@echo "Releases: -RHEL4 -RHELClient5 -RHELServer5 -RHEL8" >> $(METADATA)
|
||||||
|
|
||||||
|
rhts-lint $(METADATA)
|
9
tests/sanity/PURPOSE
Normal file
9
tests/sanity/PURPOSE
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
PURPOSE of /tools/numatop/Sanity/smoke-test
|
||||||
|
Description: It generates some NUMA load and checks whether numatop sees it.
|
||||||
|
Author: Michael Petlan <mpetlan@redhat.com>
|
||||||
|
|
||||||
|
The mgen tool has been taken from numatop source package. It should
|
||||||
|
generate some NUMA load, which should be captured by numatop then.
|
||||||
|
|
||||||
|
The test needs at least two NUMA nodes in order to be able to check
|
||||||
|
the RMAs and LMAs (Local and Remote Memory Accesses).
|
42
tests/sanity/README
Normal file
42
tests/sanity/README
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
On some larger systems, memory has non-uniform access times. It is organized
|
||||||
|
in so-called NUMA-nodes. A NUMA node is a part of memory which is accessible
|
||||||
|
faster for some particular subset of processors.
|
||||||
|
|
||||||
|
# lscpu
|
||||||
|
Architecture: x86_64
|
||||||
|
CPU op-mode(s): 32-bit, 64-bit
|
||||||
|
Byte Order: Little Endian
|
||||||
|
CPU(s): 24
|
||||||
|
On-line CPU(s) list: 0-23
|
||||||
|
Thread(s) per core: 2
|
||||||
|
Core(s) per socket: 6
|
||||||
|
Socket(s): 2
|
||||||
|
NUMA node(s): 2
|
||||||
|
Vendor ID: GenuineIntel
|
||||||
|
CPU family: 6
|
||||||
|
Model: 45
|
||||||
|
Stepping: 7
|
||||||
|
CPU MHz: 1200.000
|
||||||
|
BogoMIPS: 4588.34
|
||||||
|
Virtualization: VT-x
|
||||||
|
L1d cache: 32K
|
||||||
|
L1i cache: 32K
|
||||||
|
L2 cache: 256K
|
||||||
|
L3 cache: 15360K
|
||||||
|
NUMA node0 CPU(s): 0-5,12-17
|
||||||
|
NUMA node1 CPU(s): 6-11,18-23
|
||||||
|
|
||||||
|
This machine has two NUMA nodes and 24 processors (they are called CPUs, but
|
||||||
|
that is not very precise). Half of them belongs to NUMA node0 and the second
|
||||||
|
half to node1.
|
||||||
|
|
||||||
|
When a processor accesses data that lies in its NUMA node, it is faster than
|
||||||
|
accessing data from some other node. The local access is called LMA and the
|
||||||
|
remote one is called RMA.
|
||||||
|
|
||||||
|
The NUMATOP tool watches what happens around the NUMA nodes and it sees both
|
||||||
|
LMAs and RMAs. If the machine has only one NUMA node, only LMAs can be seen.
|
||||||
|
|
||||||
|
The test tries to trigger LMAs and check whether NUMATOP registers it. If we
|
||||||
|
have more than one NUMA node, we test RMAs as well.
|
||||||
|
|
BIN
tests/sanity/mgen.tar.gz
Normal file
BIN
tests/sanity/mgen.tar.gz
Normal file
Binary file not shown.
146
tests/sanity/runtest.sh
Executable file
146
tests/sanity/runtest.sh
Executable file
@ -0,0 +1,146 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# runtest.sh of /tools/numatop/Sanity/smoke-test
|
||||||
|
# Description: It generates some NUMA load and checks whether numatop sees it.
|
||||||
|
# Author: Michael Petlan <mpetlan@redhat.com>
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 2 of
|
||||||
|
# the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be
|
||||||
|
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE. See the GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see http://www.gnu.org/licenses/.
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
# Include Beaker environment
|
||||||
|
. /usr/bin/rhts-environment.sh || exit 1
|
||||||
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
|
|
||||||
|
PACKAGE="numatop"
|
||||||
|
CLONE_ATTEMPTS_COUNT=25
|
||||||
|
|
||||||
|
rlJournalStart
|
||||||
|
rlPhaseStartSetup
|
||||||
|
rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
|
||||||
|
rlRun "cp mgen.tar.gz $TmpDir/"
|
||||||
|
rlRun "pushd $TmpDir"
|
||||||
|
NUMATOP_PACKAGE=`rpm -q numatop`
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
rlLog "WE USE RHEL PACKAGE: $NUMATOP_PACKAGE"
|
||||||
|
else
|
||||||
|
rlLogWarn "NO RHEL PACKAGE FOR NUMATOP AVAILABLE!"
|
||||||
|
|
||||||
|
fi
|
||||||
|
# we need to build mgen for test
|
||||||
|
for (( i=0; i<$CLONE_ATTEMPTS_COUNT; i++ )); do
|
||||||
|
echo "Trying to clone the repo....... take $i..."
|
||||||
|
git clone https://github.com/01org/numatop.git
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "I have been able to clone the repo."
|
||||||
|
REPO_CLONED=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 8
|
||||||
|
done
|
||||||
|
if [ $REPO_CLONED -ne "1" ]; then
|
||||||
|
rlFail "I have not been able to clone the repo in $ATTEMPTS_COUNT takes....."
|
||||||
|
else
|
||||||
|
rlPass "The REPO has been cloned!"
|
||||||
|
fi
|
||||||
|
rlRun "cd numatop"
|
||||||
|
rlRun "mkdir m4"
|
||||||
|
rlRun "sh autogen.sh"
|
||||||
|
rlRun "./configure"
|
||||||
|
rlRun "make"
|
||||||
|
rlAssertExists "numatop"
|
||||||
|
#rlRun "cp numatop /usr/local/bin/"
|
||||||
|
rlRun "cp mgen /usr/local/bin/"
|
||||||
|
rlRun "which numatop"
|
||||||
|
rlRun "cd .."
|
||||||
|
|
||||||
|
# log something about the CPU
|
||||||
|
lscpu | while read line; do rlLog "$line"; done
|
||||||
|
|
||||||
|
# log kernel version
|
||||||
|
rlLog "`uname -r`"
|
||||||
|
|
||||||
|
NUMA_NODES=`lscpu -e=node | grep -v NODE | sort -u | wc -l`
|
||||||
|
CPU_FROM_NODE0=`lscpu -e=node,cpu | egrep '^[[:space:]]*0' | awk '{print $2}' | head -n 1`
|
||||||
|
CPU_FROM_NODE1=`lscpu -e=node,cpu | sed '1d' | egrep '^[[:space:]]*[1-9]+' | awk '{print $2}' | head -n 1`
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
rlPhaseStartTest "check machine"
|
||||||
|
#rlRun "timeout 10 numatop"
|
||||||
|
numatop > /dev/null &
|
||||||
|
NUMATOP_PID=$!
|
||||||
|
sleep 5
|
||||||
|
kill $NUMATOP_PID
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
rlPass "This machine does not support numatop"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
rlPhaseStartTest "LMA test"
|
||||||
|
mgen -a $CPU_FROM_NODE0 -c $CPU_FROM_NODE0 -t 60 > /dev/null &
|
||||||
|
MGEN_PID=$!
|
||||||
|
sleep 5
|
||||||
|
rlLog "Running mgen with PID = $MGEN_PID"
|
||||||
|
numatop -l 0 -d lma.log > /dev/null < /dev/null 2> /dev/null &
|
||||||
|
NUMATOP_PID=$!
|
||||||
|
rlLog "Running numatop with PID = $NUMATOP_PID"
|
||||||
|
sleep 30
|
||||||
|
rlRun "kill $NUMATOP_PID"
|
||||||
|
sleep 5
|
||||||
|
rlRun "kill $MGEN_PID"
|
||||||
|
LMA_RESULT=`cat lma.log | grep mgen | tail -n 1 | awk '{print $4;}'`
|
||||||
|
IS_ENOUGH=`echo "$LMA_RESULT > 5000" | bc -l`
|
||||||
|
if [ $IS_ENOUGH -eq 1 ]; then
|
||||||
|
rlPass "Measured value for LMA looks sane [ $LMA_RESULT ]"
|
||||||
|
else
|
||||||
|
rlFail "Measured value for LMA looks bogus [ $LMA_RESULT ]"
|
||||||
|
fi
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
if [ $NUMA_NODES -ge 2 ]; then
|
||||||
|
rlPhaseStartTest "RMA test"
|
||||||
|
mgen -a $CPU_FROM_NODE0 -c $CPU_FROM_NODE1 -t 60 >/dev/null &
|
||||||
|
MGEN_PID=$!
|
||||||
|
sleep 5
|
||||||
|
rlLog "Running mgen with PID = $MGEN_PID"
|
||||||
|
numatop -l 0 -d rma.log > /dev/null < /dev/null 2> /dev/null &
|
||||||
|
NUMATOP_PID=$!
|
||||||
|
rlLog "Running numatop with PID = $NUMATOP_PID"
|
||||||
|
sleep 30
|
||||||
|
rlRun "kill $NUMATOP_PID"
|
||||||
|
sleep 5
|
||||||
|
rlRun "kill $MGEN_PID"
|
||||||
|
RMA_RESULT=`cat rma.log | grep mgen | tail -n 1 | awk '{print $3;}'`
|
||||||
|
IS_ENOUGH=`echo "$RMA_RESULT > 5000" | bc -l`
|
||||||
|
if [ $IS_ENOUGH -eq 1 ]; then
|
||||||
|
rlPass "Measured value for RMA looks sane [ $RMA_RESULT ]"
|
||||||
|
else
|
||||||
|
rlFail "Measured value for RMA looks bogus [ $RMA_RESULT ]"
|
||||||
|
fi
|
||||||
|
rlPhaseEnd
|
||||||
|
fi
|
||||||
|
|
||||||
|
rlPhaseStartCleanup
|
||||||
|
rlRun "popd"
|
||||||
|
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||||
|
rlPhaseEnd
|
||||||
|
rlJournalPrintText
|
||||||
|
rlJournalEnd
|
17
tests/tests.yml
Normal file
17
tests/tests.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
- hosts: localhost
|
||||||
|
tags:
|
||||||
|
- classic
|
||||||
|
roles:
|
||||||
|
- role: standard-test-beakerlib
|
||||||
|
tests:
|
||||||
|
- sanity
|
||||||
|
required_packages:
|
||||||
|
- ncurses-devel
|
||||||
|
- check-devel
|
||||||
|
- numactl-devel
|
||||||
|
- make
|
||||||
|
- gcc
|
||||||
|
- autoconf
|
||||||
|
- libtool
|
||||||
|
- automake
|
||||||
|
|
Loading…
Reference in New Issue
Block a user