From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933416AbbGUR33 (ORCPT ); Tue, 21 Jul 2015 13:29:29 -0400 Received: from mail.kernel.org ([198.145.29.136]:37157 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932311AbbGUR32 (ORCPT ); Tue, 21 Jul 2015 13:29:28 -0400 Date: Tue, 21 Jul 2015 14:29:23 -0300 From: Arnaldo Carvalho de Melo To: Jiri Olsa Cc: lkml , David Ahern , Ingo Molnar , Namhyung Kim , Peter Zijlstra Subject: Re: [PATCH 11/47] perf tools: Use argv style storage for cmdline feature data Message-ID: <20150721172923.GB15170@kernel.org> References: <1437481927-29538-1-git-send-email-jolsa@kernel.org> <1437481927-29538-12-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437481927-29538-12-git-send-email-jolsa@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Tue, Jul 21, 2015 at 02:31:31PM +0200, Jiri Olsa escreveu: > We will reuse argv style data in following change to display > counters header showing monitored command line. Applied > Link: http://lkml.kernel.org/n/tip-qu64zmm5zbpbkuybusnkg4gl@git.kernel.org > Signed-off-by: Jiri Olsa > --- > 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.4.3