linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
	David Ahern <dsahern@gmail.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 05/18] perf header: Use argv style storage for cmdline feature data
Date: Thu, 23 Jul 2015 22:58:18 -0300	[thread overview]
Message-ID: <1437703111-4930-6-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1437703111-4930-1-git-send-email-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

We will reuse argv style data in following change to display counters
header showing monitored command line.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1437481927-29538-12-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/header.c  | 35 ++++++++++++++++++++---------------
 tools/perf/util/header.h  |  1 +
 tools/perf/util/session.c |  1 +
 3 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 03ace57a800c..179b2bdd157d 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -923,17 +923,13 @@ static void print_cmdline(struct perf_header *ph, int fd __maybe_unused,
 			  FILE *fp)
 {
 	int nr, i;
-	char *str;
 
 	nr = ph->env.nr_cmdline;
-	str = ph->env.cmdline;
 
 	fprintf(fp, "# cmdline : ");
 
-	for (i = 0; i < nr; i++) {
-		fprintf(fp, "%s ", str);
-		str += strlen(str) + 1;
-	}
+	for (i = 0; i < nr; i++)
+		fprintf(fp, "%s ", ph->env.cmdline_argv[i]);
 	fputc('\n', fp);
 }
 
@@ -1541,14 +1537,13 @@ process_event_desc(struct perf_file_section *section __maybe_unused,
 	return 0;
 }
 
-static int process_cmdline(struct perf_file_section *section __maybe_unused,
+static int process_cmdline(struct perf_file_section *section,
 			   struct perf_header *ph, int fd,
 			   void *data __maybe_unused)
 {
 	ssize_t ret;
-	char *str;
-	u32 nr, i;
-	struct strbuf sb;
+	char *str, *cmdline = NULL, **argv = NULL;
+	u32 nr, i, len = 0;
 
 	ret = readn(fd, &nr, sizeof(nr));
 	if (ret != sizeof(nr))
@@ -1558,22 +1553,32 @@ static int process_cmdline(struct perf_file_section *section __maybe_unused,
 		nr = bswap_32(nr);
 
 	ph->env.nr_cmdline = nr;
-	strbuf_init(&sb, 128);
+
+	cmdline = zalloc(section->size + nr + 1);
+	if (!cmdline)
+		return -1;
+
+	argv = zalloc(sizeof(char *) * (nr + 1));
+	if (!argv)
+		goto error;
 
 	for (i = 0; i < nr; i++) {
 		str = do_read_string(fd, ph);
 		if (!str)
 			goto error;
 
-		/* include a NULL character at the end */
-		strbuf_add(&sb, str, strlen(str) + 1);
+		argv[i] = cmdline + len;
+		memcpy(argv[i], str, strlen(str) + 1);
+		len += strlen(str) + 1;
 		free(str);
 	}
-	ph->env.cmdline = strbuf_detach(&sb, NULL);
+	ph->env.cmdline = cmdline;
+	ph->env.cmdline_argv = (const char **) argv;
 	return 0;
 
 error:
-	strbuf_release(&sb);
+	free(argv);
+	free(cmdline);
 	return -1;
 }
 
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
index d4d57962c591..9b53b6525ce8 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -84,6 +84,7 @@ struct perf_session_env {
 	int			nr_pmu_mappings;
 	int			nr_groups;
 	char			*cmdline;
+	const char		**cmdline_argv;
 	char			*sibling_cores;
 	char			*sibling_threads;
 	char			*numa_nodes;
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index ed9dc2555ec7..fb1d525ca3d0 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -180,6 +180,7 @@ static void perf_session_env__delete(struct perf_session_env *env)
 	zfree(&env->cpuid);
 
 	zfree(&env->cmdline);
+	zfree(&env->cmdline_argv);
 	zfree(&env->sibling_cores);
 	zfree(&env->sibling_threads);
 	zfree(&env->numa_nodes);
-- 
2.1.0


  parent reply	other threads:[~2015-07-24  2:03 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-24  1:58 [GIT PULL 00/18] perf/core improvements and fixes Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 01/18] perf test: Check for refcnt in thread_map test Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 02/18] perf evlist: Force perf_evlist__set_maps to propagate maps through events Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 03/18] perf evlist: Use bool instead of target argument in propagate_maps() Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 04/18] perf evlist: Tolerate NULL maps in propagate_maps Arnaldo Carvalho de Melo
2015-07-24  1:58 ` Arnaldo Carvalho de Melo [this message]
2015-07-24  1:58 ` [PATCH 06/18] perf symbols: Add front end cache for DSO symbol lookup Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 07/18] perf symbols: Introduce map__is_(kernel,kmodule)() Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 08/18] tools lib traceevent: Allow setting an alternative symbol resolver Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 09/18] perf symbols: Provide libtraceevent callback to resolve kernel symbols Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 10/18] perf trace: Provide libtracevent with a kernel symbol resolver Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 11/18] perf script: Switch from perf.data's kallsyms to perf's " Arnaldo Carvalho de Melo
2015-08-03 17:41   ` Jiri Olsa
2015-08-03 19:00     ` Arnaldo Carvalho de Melo
2015-08-03 19:27       ` Arnaldo Carvalho de Melo
2015-08-03 20:12         ` Jiri Olsa
2015-07-24  1:58 ` [PATCH 12/18] perf tools: Stop reading the kallsyms data from perf.data Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 13/18] perf tools: Stop copying kallsyms into the perf.data file header Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 14/18] perf: Add PERF_RECORD_SWITCH to indicate context switches Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 15/18] perf tools: Add new PERF_RECORD_SWITCH event Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 16/18] perf record: Add option --switch-events to select PERF_RECORD_SWITCH events Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 17/18] perf script: Don't assume evsel position of tracking events Arnaldo Carvalho de Melo
2015-07-24  1:58 ` [PATCH 18/18] perf script: Add option --show-switch-events Arnaldo Carvalho de Melo
2015-07-27 15:58 ` [GIT PULL 00/18] perf/core improvements and fixes Ingo Molnar

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=1437703111-4930-6-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).