All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kyle Meyer <meyerk@hpe.com>
To: unlisted-recipients:; (no To-header on input)
Cc: Kyle Meyer <meyerk@hpe.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	linux-kernel@vger.kernel.org,
	Russ Anderson <russ.anderson@hpe.com>,
	Kyle Meyer <kyle.meyer@hpe.com>
Subject: [PATCH v4 2/7] perf/util/svghelper: Replace MAX_NR_CPUS with env->nr_cpus_online
Date: Tue, 27 Aug 2019 16:43:47 -0500	[thread overview]
Message-ID: <20190827214352.94272-3-meyerk@stormcage.eag.rdlabs.hpecorp.net> (raw)
In-Reply-To: <20190827214352.94272-1-meyerk@stormcage.eag.rdlabs.hpecorp.net>

nr_cpus, the number of CPUs online during a record session bound by
MAX_NR_CPUS, can be used as a dynamic alternative for MAX_NR_CPUS in
svg_build_topology_map. The value of nr_cpus can be passed into
str_to_bitmap, scan_core_topology, and svg_build_topology_map to replace
MAX_NR_CPUS as well.

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: linux-kernel@vger.kernel.org
Cc: Russ Anderson <russ.anderson@hpe.com>
Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
---
 tools/perf/util/svghelper.c | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c
index 4d2ac55267fc..be0af04a76e0 100644
--- a/tools/perf/util/svghelper.c
+++ b/tools/perf/util/svghelper.c
@@ -696,7 +696,8 @@ struct topology {
 	int sib_thr_nr;
 };
 
-static void scan_thread_topology(int *map, struct topology *t, int cpu, int *pos)
+static void scan_thread_topology(int *map, struct topology *t, int cpu,
+				 int *pos, int nr_cpus)
 {
 	int i;
 	int thr;
@@ -705,28 +706,24 @@ static void scan_thread_topology(int *map, struct topology *t, int cpu, int *pos
 		if (!test_bit(cpu, cpumask_bits(&t->sib_thr[i])))
 			continue;
 
-		for_each_set_bit(thr,
-				 cpumask_bits(&t->sib_thr[i]),
-				 MAX_NR_CPUS)
+		for_each_set_bit(thr, cpumask_bits(&t->sib_thr[i]), nr_cpus)
 			if (map[thr] == -1)
 				map[thr] = (*pos)++;
 	}
 }
 
-static void scan_core_topology(int *map, struct topology *t)
+static void scan_core_topology(int *map, struct topology *t, int nr_cpus)
 {
 	int pos = 0;
 	int i;
 	int cpu;
 
 	for (i = 0; i < t->sib_core_nr; i++)
-		for_each_set_bit(cpu,
-				 cpumask_bits(&t->sib_core[i]),
-				 MAX_NR_CPUS)
-			scan_thread_topology(map, t, cpu, &pos);
+		for_each_set_bit(cpu, cpumask_bits(&t->sib_core[i]), nr_cpus)
+			scan_thread_topology(map, t, cpu, &pos, nr_cpus);
 }
 
-static int str_to_bitmap(char *s, cpumask_t *b)
+static int str_to_bitmap(char *s, cpumask_t *b, int nr_cpus)
 {
 	int i;
 	int ret = 0;
@@ -739,7 +736,7 @@ static int str_to_bitmap(char *s, cpumask_t *b)
 
 	for (i = 0; i < m->nr; i++) {
 		c = m->map[i];
-		if (c >= MAX_NR_CPUS) {
+		if (c >= nr_cpus) {
 			ret = -1;
 			break;
 		}
@@ -754,10 +751,12 @@ static int str_to_bitmap(char *s, cpumask_t *b)
 
 int svg_build_topology_map(struct perf_env *env)
 {
-	int i;
+	int i, nr_cpus;
 	struct topology t;
 	char *sib_core, *sib_thr;
 
+	nr_cpus = min(env->nr_cpus_online, MAX_NR_CPUS);
+
 	t.sib_core_nr = env->nr_sibling_cores;
 	t.sib_thr_nr = env->nr_sibling_threads;
 	t.sib_core = calloc(env->nr_sibling_cores, sizeof(cpumask_t));
@@ -772,7 +771,7 @@ int svg_build_topology_map(struct perf_env *env)
 	}
 
 	for (i = 0; i < env->nr_sibling_cores; i++) {
-		if (str_to_bitmap(sib_core, &t.sib_core[i])) {
+		if (str_to_bitmap(sib_core, &t.sib_core[i], nr_cpus)) {
 			fprintf(stderr, "topology: can't parse siblings map\n");
 			goto exit;
 		}
@@ -781,7 +780,7 @@ int svg_build_topology_map(struct perf_env *env)
 	}
 
 	for (i = 0; i < env->nr_sibling_threads; i++) {
-		if (str_to_bitmap(sib_thr, &t.sib_thr[i])) {
+		if (str_to_bitmap(sib_thr, &t.sib_thr[i], nr_cpus)) {
 			fprintf(stderr, "topology: can't parse siblings map\n");
 			goto exit;
 		}
@@ -789,16 +788,16 @@ int svg_build_topology_map(struct perf_env *env)
 		sib_thr += strlen(sib_thr) + 1;
 	}
 
-	topology_map = malloc(sizeof(int) * MAX_NR_CPUS);
+	topology_map = malloc(sizeof(int) * nr_cpus);
 	if (!topology_map) {
 		fprintf(stderr, "topology: no memory\n");
 		goto exit;
 	}
 
-	for (i = 0; i < MAX_NR_CPUS; i++)
+	for (i = 0; i < nr_cpus; i++)
 		topology_map[i] = -1;
 
-	scan_core_topology(topology_map, &t);
+	scan_core_topology(topology_map, &t, nr_cpus);
 
 	return 0;
 
-- 
2.12.3


  parent reply	other threads:[~2019-08-27 21:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190827214352.94272-1-meyerk@stormcage.eag.rdlabs.hpecorp.net>
2019-08-27 21:43 ` [PATCH v4 1/7] perf: Refactor svg_build_topology_map Kyle Meyer
2019-08-29  9:11   ` Jiri Olsa
2019-08-29 15:49     ` Arnaldo Carvalho de Melo
2019-09-02  8:16   ` [tip: perf/core] perf timechart: Refactor svg_build_topology_map() tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` Kyle Meyer [this message]
2019-09-02  8:16   ` [tip: perf/core] perf svghelper: Replace MAX_NR_CPUS with perf_env::nr_cpus_online tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` [PATCH v4 3/7] perf/util/stat: Replace MAX_NR_CPUS with cpu__max_cpu Kyle Meyer
2019-09-02  8:16   ` [tip: perf/core] perf stat: Replace MAX_NR_CPUS with cpu__max_cpu() tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` [PATCH v4 4/7] perf/util/session: Replace MAX_NR_CPUS with nr_cpus_online Kyle Meyer
2019-09-02  8:16   ` [tip: perf/core] perf session: Replace MAX_NR_CPUS with perf_env::nr_cpus_online tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` [PATCH v4 5/7] perf/util/machine: Replace MAX_NR_CPUS with nr_cpus_online Kyle Meyer
2019-09-02  8:16   ` [tip: perf/core] perf machine: Replace MAX_NR_CPUS with perf_env::nr_cpus_online tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` [PATCH v4 6/7] perf/util/header: Replace MAX_NR_CPUS with cpu__max_cpu Kyle Meyer
2019-09-02  8:16   ` [tip: perf/core] perf header: Replace MAX_NR_CPUS with cpu__max_cpu() tip-bot2 for Kyle Meyer
2019-08-27 21:43 ` [PATCH v4 7/7] perf/lib/cpumap: Warn when exceeding MAX_NR_CPUS Kyle Meyer
2019-09-02  8:16   ` [tip: perf/core] libperf: Warn when exceeding MAX_NR_CPUS in cpumap tip-bot2 for Kyle Meyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190827214352.94272-3-meyerk@stormcage.eag.rdlabs.hpecorp.net \
    --to=meyerk@hpe.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=kyle.meyer@hpe.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=russ.anderson@hpe.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.