Compare commits
No commits in common. "c9s" and "c8" have entirely different histories.
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,3 +1 @@
|
|||||||
numatop*.tar.?z
|
SOURCES/v2.4.tar.gz
|
||||||
/v2.3.tar.gz
|
|
||||||
/v2.4.tar.gz
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,43 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,260 +0,0 @@
|
|||||||
From eb42e7eb07892e91939e3875a124d5f485697ae9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andi Kleen <ak@linux.intel.com>
|
|
||||||
Date: Mon, 18 Nov 2024 08:04:04 -0800
|
|
||||||
Subject: [PATCH] Move all curses calls into display threads
|
|
||||||
|
|
||||||
Curses is not thread safe, but currently both the cons and the disp
|
|
||||||
thread can issue curses calls concurrently.
|
|
||||||
|
|
||||||
Move all curses handling into the display thread. The cons thread
|
|
||||||
just does the select and pipe handling now.
|
|
||||||
|
|
||||||
Fixes #91
|
|
||||||
---
|
|
||||||
common/disp.c | 138 +++++++++++++++++++++---------------------
|
|
||||||
common/include/disp.h | 4 +-
|
|
||||||
2 files changed, 73 insertions(+), 69 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/common/disp.c b/common/disp.c
|
|
||||||
index ea865c3..78bf9e9 100644
|
|
||||||
--- a/common/disp.c
|
|
||||||
+++ b/common/disp.c
|
|
||||||
@@ -58,6 +58,7 @@ static cons_ctl_t s_cons_ctl;
|
|
||||||
static int disp_start(void);
|
|
||||||
static void* disp_handler(void *);
|
|
||||||
static void* cons_handler(void *);
|
|
||||||
+static disp_flag_t handle_getch(cmd_t *cmdp);
|
|
||||||
|
|
||||||
static int mutex_cond_init(pthread_mutex_t *mutex, pthread_cond_t *cond)
|
|
||||||
{
|
|
||||||
@@ -465,6 +466,12 @@ disp_handler(void *arg __attribute__((unused)))
|
|
||||||
uint64_t start_ms;
|
|
||||||
int64_t diff_ms;
|
|
||||||
|
|
||||||
+ if (!reg_curses_init(B_TRUE)) {
|
|
||||||
+ goto L_EXIT;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ win_fix_init();
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Wait cons thread to complete initialization.
|
|
||||||
*/
|
|
||||||
@@ -509,6 +516,7 @@ disp_handler(void *arg __attribute__((unused)))
|
|
||||||
s_disp_ctl.flag = DISP_FLAG_NONE;
|
|
||||||
(void) pthread_mutex_unlock(&s_disp_ctl.mutex);
|
|
||||||
|
|
||||||
+
|
|
||||||
diff_ms = current_ms(&g_tvbase) - start_ms;
|
|
||||||
if (g_run_secs <= diff_ms / MS_SEC) {
|
|
||||||
g_run_secs = TIME_NSEC_MAX;
|
|
||||||
@@ -532,6 +540,7 @@ disp_handler(void *arg __attribute__((unused)))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ handle_cmd:
|
|
||||||
switch (flag) {
|
|
||||||
case DISP_FLAG_QUIT:
|
|
||||||
debug_print(NULL, 2,
|
|
||||||
@@ -601,6 +610,12 @@ disp_handler(void *arg __attribute__((unused)))
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case DISP_FLAG_GETCH:
|
|
||||||
+ flag = handle_getch(&cmd);
|
|
||||||
+ if (flag == DISP_FLAG_ERR)
|
|
||||||
+ goto L_EXIT;
|
|
||||||
+ goto handle_cmd;
|
|
||||||
+
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -610,7 +625,7 @@ L_EXIT:
|
|
||||||
if (pagelist_inited) {
|
|
||||||
page_list_fini();
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+ reg_curses_fini();
|
|
||||||
/*
|
|
||||||
* Let the perf thread exit first.
|
|
||||||
*/
|
|
||||||
@@ -620,6 +635,53 @@ L_EXIT:
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static disp_flag_t
|
|
||||||
+handle_getch(cmd_t *cmd_id_p)
|
|
||||||
+{
|
|
||||||
+ int c, cmd_id;
|
|
||||||
+ unsigned char ch;
|
|
||||||
+
|
|
||||||
+ if ((c = getch()) == ERR) {
|
|
||||||
+ /*
|
|
||||||
+ * It's possile if the associated
|
|
||||||
+ * terminal is lost.
|
|
||||||
+ */
|
|
||||||
+ debug_print(NULL, 2, "cons: "
|
|
||||||
+ "getch() failed.\n");
|
|
||||||
+ return DISP_FLAG_ERR;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ch = tolower((unsigned char)c);
|
|
||||||
+ dump_write("\n<-- User hit the key '%c' "
|
|
||||||
+ "(ascii = %d) -->\n", ch, (int)ch);
|
|
||||||
+
|
|
||||||
+ /* These will send the command to itself. */
|
|
||||||
+
|
|
||||||
+ cmd_id = cmd_id_get(ch);
|
|
||||||
+ if (cmd_id != CMD_INVALID_ID) {
|
|
||||||
+ CMD_ID_SET(cmd_id_p, cmd_id);
|
|
||||||
+ return DISP_FLAG_CMD;
|
|
||||||
+ } else {
|
|
||||||
+ /*
|
|
||||||
+ * Hit the keys 'UP'/'DOWN'/'ENTER'
|
|
||||||
+ */
|
|
||||||
+ switch (ch) {
|
|
||||||
+ case 2: /* KEY DOWN */
|
|
||||||
+ return DISP_FLAG_SCROLLDOWN;
|
|
||||||
+
|
|
||||||
+ case 3: /* KEY UP */
|
|
||||||
+ return DISP_FLAG_SCROLLUP;
|
|
||||||
+
|
|
||||||
+ case 13: /* enter. */
|
|
||||||
+ return DISP_FLAG_SCROLLENTER;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return DISP_FLAG_NONE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* The handler of 'cons thread'
|
|
||||||
*/
|
|
||||||
@@ -627,17 +689,10 @@ L_EXIT:
|
|
||||||
static void *
|
|
||||||
cons_handler(void *arg __attribute__((unused)))
|
|
||||||
{
|
|
||||||
- int c, cmd_id;
|
|
||||||
unsigned char ch;
|
|
||||||
|
|
||||||
- if (!reg_curses_init(B_TRUE)) {
|
|
||||||
- goto L_EXIT;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- win_fix_init();
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
- * Excute "home" command. It shows the NumaTop default page.
|
|
||||||
+ * Execute "home" command. It shows the NumaTop default page.
|
|
||||||
*/
|
|
||||||
disp_go_home();
|
|
||||||
|
|
||||||
@@ -676,75 +731,22 @@ cons_handler(void *arg __attribute__((unused)))
|
|
||||||
|
|
||||||
CMD_ID_SET(&s_disp_ctl.cmd,
|
|
||||||
CMD_RESIZE_ID);
|
|
||||||
- dispthr_flagset_nolock(DISP_FLAG_CMD);
|
|
||||||
+ dispthr_flagset_nolock(DISP_FLAG_CMD);
|
|
||||||
|
|
||||||
- (void) pthread_mutex_unlock(
|
|
||||||
- &s_disp_ctl.mutex);
|
|
||||||
+ (void) pthread_mutex_unlock(
|
|
||||||
+ &s_disp_ctl.mutex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
- * Character is from STDIN.
|
|
||||||
+ * Character is from STDIN. Tell disp handler to process.
|
|
||||||
*/
|
|
||||||
- if ((c = getch()) == ERR) {
|
|
||||||
- /*
|
|
||||||
- * It's possile if the associated
|
|
||||||
- * terminal is lost.
|
|
||||||
- */
|
|
||||||
- debug_print(NULL, 2, "cons: "
|
|
||||||
- "getch() failed.\n");
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- ch = tolower((unsigned char)c);
|
|
||||||
- dump_write("\n<-- User hit the key '%c' "
|
|
||||||
- "(ascii = %d) -->\n", ch, (int)ch);
|
|
||||||
-
|
|
||||||
- cmd_id = cmd_id_get(ch);
|
|
||||||
- if (cmd_id != CMD_INVALID_ID) {
|
|
||||||
- /*
|
|
||||||
- * The character is a command. Send
|
|
||||||
- * the command to 'disp thread'.
|
|
||||||
- */
|
|
||||||
- (void) pthread_mutex_lock(
|
|
||||||
- &s_disp_ctl.mutex);
|
|
||||||
-
|
|
||||||
- CMD_ID_SET(&s_disp_ctl.cmd, cmd_id);
|
|
||||||
- dispthr_flagset_nolock(DISP_FLAG_CMD);
|
|
||||||
-
|
|
||||||
- (void) pthread_mutex_unlock(
|
|
||||||
- &s_disp_ctl.mutex);
|
|
||||||
- } else {
|
|
||||||
- /*
|
|
||||||
- * Hit the keys 'UP'/'DOWN'/'ENTER'
|
|
||||||
- */
|
|
||||||
- switch (ch) {
|
|
||||||
- case 2: /* KEY DOWN */
|
|
||||||
- dispthr_flagset_lock(
|
|
||||||
- DISP_FLAG_SCROLLDOWN);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case 3: /* KEY UP */
|
|
||||||
- dispthr_flagset_lock(
|
|
||||||
- DISP_FLAG_SCROLLUP);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case 13: /* enter. */
|
|
||||||
- dispthr_flagset_lock(
|
|
||||||
- DISP_FLAG_SCROLLENTER);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- default:
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ dispthr_flagset_lock(DISP_FLAG_GETCH);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- reg_curses_fini();
|
|
||||||
-
|
|
||||||
-L_EXIT:
|
|
||||||
debug_print(NULL, 2, "cons thread is exiting\n");
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
diff --git a/common/include/disp.h b/common/include/disp.h
|
|
||||||
index f9d28de..f934406 100644
|
|
||||||
--- a/common/include/disp.h
|
|
||||||
+++ b/common/include/disp.h
|
|
||||||
@@ -47,6 +47,7 @@ extern "C" {
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
DISP_FLAG_NONE = 0,
|
|
||||||
+ DISP_FLAG_ERR,
|
|
||||||
DISP_FLAG_QUIT,
|
|
||||||
DISP_FLAG_PROFILING_DATA_READY,
|
|
||||||
DISP_FLAG_PROFILING_DATA_FAIL,
|
|
||||||
@@ -59,7 +60,8 @@ typedef enum {
|
|
||||||
DISP_FLAG_CMD,
|
|
||||||
DISP_FLAG_SCROLLUP,
|
|
||||||
DISP_FLAG_SCROLLDOWN,
|
|
||||||
- DISP_FLAG_SCROLLENTER
|
|
||||||
+ DISP_FLAG_SCROLLENTER,
|
|
||||||
+ DISP_FLAG_GETCH
|
|
||||||
} disp_flag_t;
|
|
||||||
|
|
||||||
typedef struct _disp_ctl {
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From 8dfa30ea03111981ce5cbc793960688d93f17b68 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andi Kleen <ak@linux.intel.com>
|
|
||||||
Date: Tue, 19 Nov 2024 11:02:35 -0800
|
|
||||||
Subject: [PATCH] Avoid race on submitting display commands
|
|
||||||
|
|
||||||
Doesn't work for quitting, but we can ignore it here.
|
|
||||||
---
|
|
||||||
common/disp.c | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/common/disp.c b/common/disp.c
|
|
||||||
index 78bf9e9..c542b77 100644
|
|
||||||
--- a/common/disp.c
|
|
||||||
+++ b/common/disp.c
|
|
||||||
@@ -193,6 +193,14 @@ disp_consthr_quit(void)
|
|
||||||
static void
|
|
||||||
dispthr_flagset_nolock(disp_flag_t flag)
|
|
||||||
{
|
|
||||||
+ if (flag != DISP_FLAG_QUIT) {
|
|
||||||
+ /* Wait in case we the disp thread hasn't processed the flag yet. */
|
|
||||||
+ while (*(volatile disp_flag_t *)&s_disp_ctl.flag != DISP_FLAG_NONE) {
|
|
||||||
+ (void) pthread_mutex_unlock(&s_disp_ctl.mutex);
|
|
||||||
+ usleep(1);
|
|
||||||
+ (void) pthread_mutex_lock(&s_disp_ctl.mutex);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
s_disp_ctl.flag = flag;
|
|
||||||
(void) pthread_cond_signal(&s_disp_ctl.cond);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,126 +0,0 @@
|
|||||||
From 4d9a0e4cd945c58163c0655904f46f932338c9b9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
Date: Tue, 15 Oct 2024 12:29:57 +0000
|
|
||||||
Subject: [PATCH 1/3] Remove EMR specific events configuration
|
|
||||||
|
|
||||||
Emerald Rapids shares same perf events configuration with
|
|
||||||
Sapphire rapids, it's unnecessary to define duplicated events
|
|
||||||
configuration and helper for EMR. It's fine to directly use SPR's
|
|
||||||
configuration.
|
|
||||||
|
|
||||||
Thus delete these duplicated EMR code.
|
|
||||||
|
|
||||||
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
---
|
|
||||||
x86/include/skl.h | 4 ----
|
|
||||||
x86/plat.c | 6 +++---
|
|
||||||
x86/skl.c | 28 +---------------------------
|
|
||||||
3 files changed, 4 insertions(+), 34 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/x86/include/skl.h b/x86/include/skl.h
|
|
||||||
index ab19f58..7a8b8f2 100644
|
|
||||||
--- a/x86/include/skl.h
|
|
||||||
+++ b/x86/include/skl.h
|
|
||||||
@@ -51,10 +51,6 @@ extern void spr_profiling_config(perf_count_id_t, struct _plat_event_config *);
|
|
||||||
extern void spr_ll_config(struct _plat_event_config *);
|
|
||||||
extern int spr_offcore_num(void);
|
|
||||||
|
|
||||||
-extern void emr_profiling_config(perf_count_id_t, struct _plat_event_config *);
|
|
||||||
-extern void emr_ll_config(struct _plat_event_config *);
|
|
||||||
-extern int emr_offcore_num(void);
|
|
||||||
-
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
diff --git a/x86/plat.c b/x86/plat.c
|
|
||||||
index d0c7cba..d69544e 100644
|
|
||||||
--- a/x86/plat.c
|
|
||||||
+++ b/x86/plat.c
|
|
||||||
@@ -52,7 +52,7 @@ s_plat_profiling_config[CPU_TYPE_NUM] = {
|
|
||||||
skl_profiling_config,
|
|
||||||
icx_profiling_config,
|
|
||||||
spr_profiling_config,
|
|
||||||
- emr_profiling_config,
|
|
||||||
+ spr_profiling_config, /* EMR */
|
|
||||||
zen_profiling_config,
|
|
||||||
zen3_profiling_config,
|
|
||||||
zen4_profiling_config
|
|
||||||
@@ -72,7 +72,7 @@ s_plat_ll_config[CPU_TYPE_NUM] = {
|
|
||||||
skl_ll_config,
|
|
||||||
icx_ll_config,
|
|
||||||
spr_ll_config,
|
|
||||||
- emr_ll_config,
|
|
||||||
+ spr_ll_config, /* EMR */
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config
|
|
||||||
@@ -92,7 +92,7 @@ s_plat_offcore_num[CPU_TYPE_NUM] = {
|
|
||||||
skl_offcore_num,
|
|
||||||
icx_offcore_num,
|
|
||||||
spr_offcore_num,
|
|
||||||
- emr_offcore_num,
|
|
||||||
+ spr_offcore_num, /* EMR */
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num
|
|
||||||
diff --git a/x86/skl.c b/x86/skl.c
|
|
||||||
index a80a868..9be1bf0 100644
|
|
||||||
--- a/x86/skl.c
|
|
||||||
+++ b/x86/skl.c
|
|
||||||
@@ -63,14 +63,6 @@ static plat_event_config_t s_spr_config[PERF_COUNT_NUM] = {
|
|
||||||
{ PERF_TYPE_RAW, 0x012B, 0x53, 0x104000001, 0, 0, "off_core_response_1" }
|
|
||||||
};
|
|
||||||
|
|
||||||
-static plat_event_config_t s_emr_config[PERF_COUNT_NUM] = {
|
|
||||||
- { 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 = {
|
|
||||||
PERF_TYPE_RAW, 0x01CD, 0x53, LL_THRESH, 0, 1, "mem_trans_retired.latency_above_threshold"
|
|
||||||
};
|
|
||||||
@@ -93,12 +85,6 @@ spr_profiling_config(perf_count_id_t perf_count_id, plat_event_config_t *cfg)
|
|
||||||
plat_config_get(perf_count_id, cfg, s_spr_config);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void
|
|
||||||
-emr_profiling_config(perf_count_id_t perf_count_id, plat_event_config_t *cfg)
|
|
||||||
-{
|
|
||||||
- plat_config_get(perf_count_id, cfg, s_emr_config);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
void
|
|
||||||
skl_ll_config(plat_event_config_t *cfg)
|
|
||||||
{
|
|
||||||
@@ -117,12 +103,6 @@ spr_ll_config(plat_event_config_t *cfg)
|
|
||||||
skl_ll_config(cfg);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void
|
|
||||||
-emr_ll_config(plat_event_config_t *cfg)
|
|
||||||
-{
|
|
||||||
- skl_ll_config(cfg);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
int
|
|
||||||
skl_offcore_num(void)
|
|
||||||
{
|
|
||||||
@@ -139,10 +119,4 @@ int
|
|
||||||
spr_offcore_num(void)
|
|
||||||
{
|
|
||||||
return skl_offcore_num();
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-int
|
|
||||||
-emr_offcore_num(void)
|
|
||||||
-{
|
|
||||||
- return skl_offcore_num();
|
|
||||||
-}
|
|
||||||
+}
|
|
||||||
\ No newline at end of file
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
|||||||
From f1dadf9fbd33457b660884c6ce526315b1647e72 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
Date: Tue, 15 Oct 2024 12:41:10 +0000
|
|
||||||
Subject: [PATCH 2/3] Support Intel Granite Rapids platform
|
|
||||||
|
|
||||||
Granite Rapids shares same perf events configuration with
|
|
||||||
Sapphire rapids, directly reuse SPR's configuration to enable GNR's
|
|
||||||
support.
|
|
||||||
|
|
||||||
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
---
|
|
||||||
x86/include/types.h | 3 ++-
|
|
||||||
x86/plat.c | 7 +++++++
|
|
||||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/x86/include/types.h b/x86/include/types.h
|
|
||||||
index 1a0199a..814ef1c 100644
|
|
||||||
--- a/x86/include/types.h
|
|
||||||
+++ b/x86/include/types.h
|
|
||||||
@@ -48,12 +48,13 @@ typedef enum {
|
|
||||||
CPU_ICX,
|
|
||||||
CPU_SPR,
|
|
||||||
CPU_EMR,
|
|
||||||
+ CPU_GNR,
|
|
||||||
CPU_ZEN,
|
|
||||||
CPU_ZEN3,
|
|
||||||
CPU_ZEN4
|
|
||||||
} cpu_type_t;
|
|
||||||
|
|
||||||
-#define CPU_TYPE_NUM 16
|
|
||||||
+#define CPU_TYPE_NUM 17
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PERF_COUNT_INVALID = -1,
|
|
||||||
diff --git a/x86/plat.c b/x86/plat.c
|
|
||||||
index d69544e..0eea408 100644
|
|
||||||
--- a/x86/plat.c
|
|
||||||
+++ b/x86/plat.c
|
|
||||||
@@ -53,6 +53,7 @@ s_plat_profiling_config[CPU_TYPE_NUM] = {
|
|
||||||
icx_profiling_config,
|
|
||||||
spr_profiling_config,
|
|
||||||
spr_profiling_config, /* EMR */
|
|
||||||
+ spr_profiling_config, /* GNR */
|
|
||||||
zen_profiling_config,
|
|
||||||
zen3_profiling_config,
|
|
||||||
zen4_profiling_config
|
|
||||||
@@ -73,6 +74,7 @@ s_plat_ll_config[CPU_TYPE_NUM] = {
|
|
||||||
icx_ll_config,
|
|
||||||
spr_ll_config,
|
|
||||||
spr_ll_config, /* EMR */
|
|
||||||
+ spr_ll_config, /* GNR */
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config
|
|
||||||
@@ -93,6 +95,7 @@ s_plat_offcore_num[CPU_TYPE_NUM] = {
|
|
||||||
icx_offcore_num,
|
|
||||||
spr_offcore_num,
|
|
||||||
spr_offcore_num, /* EMR */
|
|
||||||
+ spr_offcore_num, /* GNR */
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num
|
|
||||||
@@ -199,6 +202,9 @@ cpu_type_get(void)
|
|
||||||
case 207:
|
|
||||||
type = CPU_EMR;
|
|
||||||
break;
|
|
||||||
+ case 173:
|
|
||||||
+ type = CPU_GNR;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
} else if (family == 23) { /* Family 17h */
|
|
||||||
type = CPU_ZEN;
|
|
||||||
@@ -252,6 +258,7 @@ plat_detect(void)
|
|
||||||
case CPU_ICX:
|
|
||||||
case CPU_SPR:
|
|
||||||
case CPU_EMR:
|
|
||||||
+ case CPU_GNR:
|
|
||||||
case CPU_ZEN:
|
|
||||||
case CPU_ZEN3:
|
|
||||||
case CPU_ZEN4:
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,251 +0,0 @@
|
|||||||
From 38fafde94d30242b6725f7f50ef92bc85a39f6f5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
Date: Tue, 15 Oct 2024 12:56:10 +0000
|
|
||||||
Subject: [PATCH 3/3] Support Intel Sierra Forest platform
|
|
||||||
|
|
||||||
Add support for Intel Sierra Forest platform. SRF is the 1st generation
|
|
||||||
XEON server with pure E-cores. Since E-core's events are different with
|
|
||||||
P-cores, so create separate srf.h/c files to implement these E-core
|
|
||||||
specific data structures and helpers.
|
|
||||||
|
|
||||||
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
|
|
||||||
---
|
|
||||||
Makefile.am | 2 ++
|
|
||||||
x86/include/srf.h | 50 ++++++++++++++++++++++++++++++++
|
|
||||||
x86/include/types.h | 3 +-
|
|
||||||
x86/plat.c | 8 ++++++
|
|
||||||
x86/srf.c | 70 +++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
5 files changed, 132 insertions(+), 1 deletion(-)
|
|
||||||
create mode 100644 x86/include/srf.h
|
|
||||||
create mode 100644 x86/srf.c
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index f23e1a6..a6ef1de 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -64,6 +64,7 @@ libnumatop_la_SOURCES += \
|
|
||||||
x86/include/nhm.h \
|
|
||||||
x86/include/skl.h \
|
|
||||||
x86/include/snb.h \
|
|
||||||
+ x86/include/srf.h \
|
|
||||||
x86/include/types.h \
|
|
||||||
x86/include/util.h \
|
|
||||||
x86/include/wsm.h \
|
|
||||||
@@ -73,6 +74,7 @@ libnumatop_la_SOURCES += \
|
|
||||||
x86/plat.c \
|
|
||||||
x86/skl.c \
|
|
||||||
x86/snb.c \
|
|
||||||
+ x86/srf.c \
|
|
||||||
x86/ui_perf_map.c \
|
|
||||||
x86/util.c \
|
|
||||||
x86/wsm.c \
|
|
||||||
diff --git a/x86/include/srf.h b/x86/include/srf.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..8bb0f44
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/x86/include/srf.h
|
|
||||||
@@ -0,0 +1,50 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2024, Intel Corporation
|
|
||||||
+ *
|
|
||||||
+ * Redistribution and use in source and binary forms, with or without
|
|
||||||
+ * modification, are permitted provided that the following conditions are met:
|
|
||||||
+ *
|
|
||||||
+ * * Redistributions of source code must retain the above copyright notice,
|
|
||||||
+ * this list of conditions and the following disclaimer.
|
|
||||||
+ * * Redistributions in binary form must reproduce the above copyright
|
|
||||||
+ * notice, this list of conditions and the following disclaimer in the
|
|
||||||
+ * documentation and/or other materials provided with the distribution.
|
|
||||||
+ * * Neither the name of Intel Corporation nor the names of its contributors
|
|
||||||
+ * may be used to endorse or promote products derived from this software
|
|
||||||
+ * without specific prior written permission.
|
|
||||||
+ *
|
|
||||||
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
+ * POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifndef _NUMATOP_INTEL_SRF_H
|
|
||||||
+#define _NUMATOP_INTEL_SRF_H
|
|
||||||
+
|
|
||||||
+#ifdef __cplusplus
|
|
||||||
+extern "C" {
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <inttypes.h>
|
|
||||||
+#include "../../common/include/types.h"
|
|
||||||
+
|
|
||||||
+struct _plat_event_config;
|
|
||||||
+
|
|
||||||
+extern void srf_profiling_config(perf_count_id_t, struct _plat_event_config *);
|
|
||||||
+extern void srf_ll_config(struct _plat_event_config *);
|
|
||||||
+extern int srf_offcore_num(void);
|
|
||||||
+
|
|
||||||
+#ifdef __cplusplus
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#endif /* _NUMATOP_INTEL_SRF_H */
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/x86/include/types.h b/x86/include/types.h
|
|
||||||
index 814ef1c..4e3bea1 100644
|
|
||||||
--- a/x86/include/types.h
|
|
||||||
+++ b/x86/include/types.h
|
|
||||||
@@ -49,12 +49,13 @@ typedef enum {
|
|
||||||
CPU_SPR,
|
|
||||||
CPU_EMR,
|
|
||||||
CPU_GNR,
|
|
||||||
+ CPU_SRF,
|
|
||||||
CPU_ZEN,
|
|
||||||
CPU_ZEN3,
|
|
||||||
CPU_ZEN4
|
|
||||||
} cpu_type_t;
|
|
||||||
|
|
||||||
-#define CPU_TYPE_NUM 17
|
|
||||||
+#define CPU_TYPE_NUM 18
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PERF_COUNT_INVALID = -1,
|
|
||||||
diff --git a/x86/plat.c b/x86/plat.c
|
|
||||||
index 0eea408..557a8c9 100644
|
|
||||||
--- a/x86/plat.c
|
|
||||||
+++ b/x86/plat.c
|
|
||||||
@@ -36,6 +36,7 @@
|
|
||||||
#include "include/snb.h"
|
|
||||||
#include "include/bdw.h"
|
|
||||||
#include "include/skl.h"
|
|
||||||
+#include "include/srf.h"
|
|
||||||
#include "include/zen.h"
|
|
||||||
|
|
||||||
pfn_plat_profiling_config_t
|
|
||||||
@@ -54,6 +55,7 @@ s_plat_profiling_config[CPU_TYPE_NUM] = {
|
|
||||||
spr_profiling_config,
|
|
||||||
spr_profiling_config, /* EMR */
|
|
||||||
spr_profiling_config, /* GNR */
|
|
||||||
+ srf_profiling_config,
|
|
||||||
zen_profiling_config,
|
|
||||||
zen3_profiling_config,
|
|
||||||
zen4_profiling_config
|
|
||||||
@@ -75,6 +77,7 @@ s_plat_ll_config[CPU_TYPE_NUM] = {
|
|
||||||
spr_ll_config,
|
|
||||||
spr_ll_config, /* EMR */
|
|
||||||
spr_ll_config, /* GNR */
|
|
||||||
+ srf_ll_config,
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config,
|
|
||||||
zen_ll_config
|
|
||||||
@@ -96,6 +99,7 @@ s_plat_offcore_num[CPU_TYPE_NUM] = {
|
|
||||||
spr_offcore_num,
|
|
||||||
spr_offcore_num, /* EMR */
|
|
||||||
spr_offcore_num, /* GNR */
|
|
||||||
+ srf_offcore_num,
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num,
|
|
||||||
zen_offcore_num
|
|
||||||
@@ -205,6 +209,9 @@ cpu_type_get(void)
|
|
||||||
case 173:
|
|
||||||
type = CPU_GNR;
|
|
||||||
break;
|
|
||||||
+ case 175:
|
|
||||||
+ type = CPU_SRF;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
} else if (family == 23) { /* Family 17h */
|
|
||||||
type = CPU_ZEN;
|
|
||||||
@@ -259,6 +266,7 @@ plat_detect(void)
|
|
||||||
case CPU_SPR:
|
|
||||||
case CPU_EMR:
|
|
||||||
case CPU_GNR:
|
|
||||||
+ case CPU_SRF:
|
|
||||||
case CPU_ZEN:
|
|
||||||
case CPU_ZEN3:
|
|
||||||
case CPU_ZEN4:
|
|
||||||
diff --git a/x86/srf.c b/x86/srf.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..790432e
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/x86/srf.c
|
|
||||||
@@ -0,0 +1,70 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2024, Intel Corporation
|
|
||||||
+ *
|
|
||||||
+ * Redistribution and use in source and binary forms, with or without
|
|
||||||
+ * modification, are permitted provided that the following conditions are met:
|
|
||||||
+ *
|
|
||||||
+ * * Redistributions of source code must retain the above copyright notice,
|
|
||||||
+ * this list of conditions and the following disclaimer.
|
|
||||||
+ * * Redistributions in binary form must reproduce the above copyright
|
|
||||||
+ * notice, this list of conditions and the following disclaimer in the
|
|
||||||
+ * documentation and/or other materials provided with the distribution.
|
|
||||||
+ * * Neither the name of Intel Corporation nor the names of its contributors
|
|
||||||
+ * may be used to endorse or promote products derived from this software
|
|
||||||
+ * without specific prior written permission.
|
|
||||||
+ *
|
|
||||||
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
+ * POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+/* This file contains the bdw platform specific functions. */
|
|
||||||
+
|
|
||||||
+#include <inttypes.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <strings.h>
|
|
||||||
+#include "../common/include/os/linux/perf_event.h"
|
|
||||||
+#include "../common/include/os/plat.h"
|
|
||||||
+#include "include/srf.h"
|
|
||||||
+
|
|
||||||
+static plat_event_config_t s_srf_config[PERF_COUNT_NUM] = {
|
|
||||||
+ { PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES, 0x53, 0, 0, 0, "cpu_clk_unhalted.core" },
|
|
||||||
+ { PERF_TYPE_RAW, 0x01B7, 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, 0x02B7, 0x53, 0x184000001, 0, 0, "off_core_response_1" }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static plat_event_config_t s_srf_ll = {
|
|
||||||
+ PERF_TYPE_RAW, 0x05D0, 0x53, LL_THRESH, 0, 1, "mem_trans_retired.latency_above_threshold"
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+srf_profiling_config(perf_count_id_t perf_count_id, plat_event_config_t *cfg)
|
|
||||||
+{
|
|
||||||
+ plat_config_get(perf_count_id, cfg, s_srf_config);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+srf_ll_config(plat_event_config_t *cfg)
|
|
||||||
+{
|
|
||||||
+ memcpy(cfg, &s_srf_ll, sizeof (plat_event_config_t));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+srf_offcore_num(void)
|
|
||||||
+{
|
|
||||||
+ return (2);
|
|
||||||
+}
|
|
||||||
\ No newline at end of file
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -3,52 +3,12 @@
|
|||||||
|
|
||||||
Name: numatop
|
Name: numatop
|
||||||
Version: 2.4
|
Version: 2.4
|
||||||
Release: 6%{?dist}
|
Release: 1%{?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
|
|
||||||
Patch33: 0033-Move-all-curses-calls-into-display-threads.patch
|
|
||||||
Patch34: 0034-Avoid-race-on-submitting-display-commands.patch
|
|
||||||
Patch35: 0035-Remove-EMR-specific-events-configuration.patch
|
|
||||||
Patch36: 0036-Support-Intel-Granite-Rapids-platform.patch
|
|
||||||
Patch37: 0037-Support-Intel-Sierra-Forest-platform.patch
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
@ -101,33 +61,15 @@ autoreconf --force --install --symlink
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jan 2 2025 Pingfan Liu <piliu@redhat.com> - 2.4.6
|
|
||||||
- Add support for intel GNR and SRF
|
|
||||||
|
|
||||||
* Thu Jan 2 2025 Pingfan Liu <piliu@redhat.com> - 2.4.5
|
|
||||||
- Fix ncures race issue
|
|
||||||
|
|
||||||
* 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 initial support for EMR
|
- Add EMR support
|
||||||
|
|
||||||
* Fri Dec 8 2023 Pingfan Liu <piliu@redhat.com> - 2.3.3
|
|
||||||
- Add Power10 support
|
- Add Power10 support
|
||||||
|
|
||||||
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 2.1-7
|
* Wed Nov 2 2022 Pingfan Liu <piliu@redhat.com> - 2.2-3
|
||||||
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
- bump release version to 2.2-3
|
||||||
Related: rhbz#1991688
|
|
||||||
|
|
||||||
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.1-6
|
* Wed Dec 1 2021 Pingfan Liu <piliu@redhat.com> - 2.2-1
|
||||||
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
- rebase to v2.2
|
||||||
|
|
||||||
* 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,6 +0,0 @@
|
|||||||
--- !Policy
|
|
||||||
product_versions:
|
|
||||||
- rhel-9
|
|
||||||
decision_context: osci_compose_gate
|
|
||||||
rules:
|
|
||||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.general-numatop.tier0.functional}
|
|
1
sources
1
sources
@ -1 +0,0 @@
|
|||||||
SHA512 (v2.4.tar.gz) = eb500424f56a3bcd19375cdca5f1c0d1f4ffbd9817bb0d42bb8224f2929c4cf1cdbb4005adf6a148f6e669db9337175c7dfbd3076aa2d99bfb08f537850efaff
|
|
@ -1,64 +0,0 @@
|
|||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
#
|
|
||||||
# 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)
|
|
@ -1,9 +0,0 @@
|
|||||||
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).
|
|
@ -1,42 +0,0 @@
|
|||||||
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.
|
|
||||||
|
|
Binary file not shown.
@ -1,146 +0,0 @@
|
|||||||
#!/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
|
|
@ -1,17 +0,0 @@
|
|||||||
- 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