All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Ian Rogers <irogers@google.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
	Yonghong Song <yhs@fb.com>, Andi Kleen <ak@linux.intel.com>,
	Jin Yao <yao.jin@linux.intel.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	John Garry <john.garry@huawei.com>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	bpf@vger.kernel.org, clang-built-linux@googlegroups.com,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v5 07/10] perf tools: before yyabort-ing free components
Date: Wed, 6 Nov 2019 11:37:35 -0300	[thread overview]
Message-ID: <20191106143735.GE6259@kernel.org> (raw)
In-Reply-To: <20191106142454.GJ30214@krava>

Em Wed, Nov 06, 2019 at 03:24:54PM +0100, Jiri Olsa escreveu:
> On Wed, Oct 30, 2019 at 03:34:45PM -0700, Ian Rogers wrote:
> > Yyabort doesn't destruct inputs and so this must be done manually before
> > using yyabort.
> > 
> > Signed-off-by: Ian Rogers <irogers@google.com>
> 
> Acked-by: Jiri Olsa <jolsa@kernel.org>

Thanks, applied.

- Arnaldo
 
> thanks,
> jirka
> 
> > ---
> >  tools/perf/util/parse-events.y | 252 ++++++++++++++++++++++++++-------
> >  1 file changed, 197 insertions(+), 55 deletions(-)
> > 
> > diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> > index 035edfa8d42e..376b19855470 100644
> > --- a/tools/perf/util/parse-events.y
> > +++ b/tools/perf/util/parse-events.y
> > @@ -152,6 +152,7 @@ start_events: groups
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> >  
> > +	/* frees $1 */
> >  	parse_events_update_lists($1, &parse_state->list);
> >  }
> >  
> > @@ -161,6 +162,7 @@ groups ',' group
> >  	struct list_head *list  = $1;
> >  	struct list_head *group = $3;
> >  
> > +	/* frees $3 */
> >  	parse_events_update_lists(group, list);
> >  	$$ = list;
> >  }
> > @@ -170,6 +172,7 @@ groups ',' event
> >  	struct list_head *list  = $1;
> >  	struct list_head *event = $3;
> >  
> > +	/* frees $3 */
> >  	parse_events_update_lists(event, list);
> >  	$$ = list;
> >  }
> > @@ -182,8 +185,14 @@ group:
> >  group_def ':' PE_MODIFIER_EVENT
> >  {
> >  	struct list_head *list = $1;
> > +	int err;
> >  
> > -	ABORT_ON(parse_events__modifier_group(list, $3));
> > +	err = parse_events__modifier_group(list, $3);
> > +	free($3);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -196,6 +205,7 @@ PE_NAME '{' events '}'
> >  
> >  	inc_group_count(list, _parse_state);
> >  	parse_events__set_leader($1, list, _parse_state);
> > +	free($1);
> >  	$$ = list;
> >  }
> >  |
> > @@ -214,6 +224,7 @@ events ',' event
> >  	struct list_head *event = $3;
> >  	struct list_head *list  = $1;
> >  
> > +	/* frees $3 */
> >  	parse_events_update_lists(event, list);
> >  	$$ = list;
> >  }
> > @@ -226,13 +237,19 @@ event_mod:
> >  event_name PE_MODIFIER_EVENT
> >  {
> >  	struct list_head *list = $1;
> > +	int err;
> >  
> >  	/*
> >  	 * Apply modifier on all events added by single event definition
> >  	 * (there could be more events added for multiple tracepoint
> >  	 * definitions via '*?'.
> >  	 */
> > -	ABORT_ON(parse_events__modifier_event(list, $2, false));
> > +	err = parse_events__modifier_event(list, $2, false);
> > +	free($2);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -241,8 +258,14 @@ event_name
> >  event_name:
> >  PE_EVENT_NAME event_def
> >  {
> > -	ABORT_ON(parse_events_name($2, $1));
> > +	int err;
> > +
> > +	err = parse_events_name($2, $1);
> >  	free($1);
> > +	if (err) {
> > +		free_list_evsel($2);
> > +		YYABORT;
> > +	}
> >  	$$ = $2;
> >  }
> >  |
> > @@ -262,23 +285,33 @@ PE_NAME opt_pmu_config
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct parse_events_error *error = parse_state->error;
> > -	struct list_head *list, *orig_terms, *terms;
> > +	struct list_head *list = NULL, *orig_terms = NULL, *terms= NULL;
> > +	char *pattern = NULL;
> > +
> > +#define CLEANUP_YYABORT					\
> > +	do {						\
> > +		parse_events_terms__delete($2);		\
> > +		parse_events_terms__delete(orig_terms);	\
> > +		free($1);				\
> > +		free(pattern);				\
> > +		YYABORT;				\
> > +	} while(0)
> >  
> >  	if (parse_events_copy_term_list($2, &orig_terms))
> > -		YYABORT;
> > +		CLEANUP_YYABORT;
> >  
> >  	if (error)
> >  		error->idx = @1.first_column;
> >  
> >  	list = alloc_list();
> > -	ABORT_ON(!list);
> > +	if (!list)
> > +		CLEANUP_YYABORT;
> >  	if (parse_events_add_pmu(_parse_state, list, $1, $2, false, false)) {
> >  		struct perf_pmu *pmu = NULL;
> >  		int ok = 0;
> > -		char *pattern;
> >  
> >  		if (asprintf(&pattern, "%s*", $1) < 0)
> > -			YYABORT;
> > +			CLEANUP_YYABORT;
> >  
> >  		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> >  			char *name = pmu->name;
> > @@ -287,31 +320,32 @@ PE_NAME opt_pmu_config
> >  			    strncmp($1, "uncore_", 7))
> >  				name += 7;
> >  			if (!fnmatch(pattern, name, 0)) {
> > -				if (parse_events_copy_term_list(orig_terms, &terms)) {
> > -					free(pattern);
> > -					YYABORT;
> > -				}
> > +				if (parse_events_copy_term_list(orig_terms, &terms))
> > +					CLEANUP_YYABORT;
> >  				if (!parse_events_add_pmu(_parse_state, list, pmu->name, terms, true, false))
> >  					ok++;
> >  				parse_events_terms__delete(terms);
> >  			}
> >  		}
> >  
> > -		free(pattern);
> > -
> >  		if (!ok)
> > -			YYABORT;
> > +			CLEANUP_YYABORT;
> >  	}
> >  	parse_events_terms__delete($2);
> >  	parse_events_terms__delete(orig_terms);
> > +	free($1);
> >  	$$ = list;
> > +#undef CLEANUP_YYABORT
> >  }
> >  |
> >  PE_KERNEL_PMU_EVENT sep_dc
> >  {
> >  	struct list_head *list;
> > +	int err;
> >  
> > -	if (parse_events_multi_pmu_add(_parse_state, $1, &list) < 0)
> > +	err = parse_events_multi_pmu_add(_parse_state, $1, &list);
> > +	free($1);
> > +	if (err < 0)
> >  		YYABORT;
> >  	$$ = list;
> >  }
> > @@ -322,6 +356,8 @@ PE_PMU_EVENT_PRE '-' PE_PMU_EVENT_SUF sep_dc
> >  	char pmu_name[128];
> >  
> >  	snprintf(&pmu_name, 128, "%s-%s", $1, $3);
> > +	free($1);
> > +	free($3);
> >  	if (parse_events_multi_pmu_add(_parse_state, pmu_name, &list) < 0)
> >  		YYABORT;
> >  	$$ = list;
> > @@ -338,11 +374,16 @@ value_sym '/' event_config '/'
> >  	struct list_head *list;
> >  	int type = $1 >> 16;
> >  	int config = $1 & 255;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_numeric(_parse_state, list, type, config, $3));
> > +	err = parse_events_add_numeric(_parse_state, list, type, config, $3);
> >  	parse_events_terms__delete($3);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -374,11 +415,19 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT opt_e
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct parse_events_error *error = parse_state->error;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_cache(list, &parse_state->idx, $1, $3, $5, error, $6));
> > +	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, $5, error, $6);
> >  	parse_events_terms__delete($6);
> > +	free($1);
> > +	free($3);
> > +	free($5);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -387,11 +436,18 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT opt_event_config
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct parse_events_error *error = parse_state->error;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_cache(list, &parse_state->idx, $1, $3, NULL, error, $4));
> > +	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, NULL, error, $4);
> >  	parse_events_terms__delete($4);
> > +	free($1);
> > +	free($3);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -400,11 +456,17 @@ PE_NAME_CACHE_TYPE opt_event_config
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct parse_events_error *error = parse_state->error;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_cache(list, &parse_state->idx, $1, NULL, NULL, error, $2));
> > +	err = parse_events_add_cache(list, &parse_state->idx, $1, NULL, NULL, error, $2);
> >  	parse_events_terms__delete($2);
> > +	free($1);
> > +	if (err) {
> > +		free_list_evsel(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  
> > @@ -413,11 +475,17 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE ':' PE_MODIFIER_BP sep_dc
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_breakpoint(list, &parse_state->idx,
> > -					     (void *) $2, $6, $4));
> > +	err = parse_events_add_breakpoint(list, &parse_state->idx,
> > +					(void *) $2, $6, $4);
> > +	free($6);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -428,8 +496,11 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE sep_dc
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_breakpoint(list, &parse_state->idx,
> > -					     (void *) $2, NULL, $4));
> > +	if (parse_events_add_breakpoint(list, &parse_state->idx,
> > +						(void *) $2, NULL, $4)) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -437,11 +508,17 @@ PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_breakpoint(list, &parse_state->idx,
> > -					     (void *) $2, $4, 0));
> > +	err = parse_events_add_breakpoint(list, &parse_state->idx,
> > +					(void *) $2, $4, 0);
> > +	free($4);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> > @@ -452,8 +529,11 @@ PE_PREFIX_MEM PE_VALUE sep_dc
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_breakpoint(list, &parse_state->idx,
> > -					     (void *) $2, NULL, 0));
> > +	if (parse_events_add_breakpoint(list, &parse_state->idx,
> > +						(void *) $2, NULL, 0)) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  
> > @@ -463,29 +543,35 @@ tracepoint_name opt_event_config
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct parse_events_error *error = parse_state->error;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> >  	if (error)
> >  		error->idx = @1.first_column;
> >  
> > -	if (parse_events_add_tracepoint(list, &parse_state->idx, $1.sys, $1.event,
> > -					error, $2))
> > -		return -1;
> > +	err = parse_events_add_tracepoint(list, &parse_state->idx, $1.sys, $1.event,
> > +					error, $2);
> >  
> > +	parse_events_terms__delete($2);
> > +	free($1.sys);
> > +	free($1.event);
> > +	if (err) {
> > +		free(list);
> > +		return -1;
> > +	}
> >  	$$ = list;
> >  }
> >  
> >  tracepoint_name:
> >  PE_NAME '-' PE_NAME ':' PE_NAME
> >  {
> > -	char sys_name[128];
> >  	struct tracepoint_name tracepoint;
> >  
> > -	snprintf(&sys_name, 128, "%s-%s", $1, $3);
> > -	tracepoint.sys = &sys_name;
> > +	ABORT_ON(asprintf(&tracepoint.sys, "%s-%s", $1, $3) < 0);
> >  	tracepoint.event = $5;
> > -
> > +	free($1);
> > +	free($3);
> >  	$$ = tracepoint;
> >  }
> >  |
> > @@ -500,11 +586,16 @@ event_legacy_numeric:
> >  PE_VALUE ':' PE_VALUE opt_event_config
> >  {
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_numeric(_parse_state, list, (u32)$1, $3, $4));
> > +	err = parse_events_add_numeric(_parse_state, list, (u32)$1, $3, $4);
> >  	parse_events_terms__delete($4);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  
> > @@ -512,11 +603,16 @@ event_legacy_raw:
> >  PE_RAW opt_event_config
> >  {
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_add_numeric(_parse_state, list, PERF_TYPE_RAW, $1, $2));
> > +	err = parse_events_add_numeric(_parse_state, list, PERF_TYPE_RAW, $1, $2);
> >  	parse_events_terms__delete($2);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  
> > @@ -525,22 +621,33 @@ PE_BPF_OBJECT opt_event_config
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_load_bpf(parse_state, list, $1, false, $2));
> > +	err = parse_events_load_bpf(parse_state, list, $1, false, $2);
> >  	parse_events_terms__delete($2);
> > +	free($1);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  |
> >  PE_BPF_SOURCE opt_event_config
> >  {
> >  	struct list_head *list;
> > +	int err;
> >  
> >  	list = alloc_list();
> >  	ABORT_ON(!list);
> > -	ABORT_ON(parse_events_load_bpf(_parse_state, list, $1, true, $2));
> > +	err = parse_events_load_bpf(_parse_state, list, $1, true, $2);
> >  	parse_events_terms__delete($2);
> > +	if (err) {
> > +		free(list);
> > +		YYABORT;
> > +	}
> >  	$$ = list;
> >  }
> >  
> > @@ -573,6 +680,10 @@ opt_pmu_config:
> >  start_terms: event_config
> >  {
> >  	struct parse_events_state *parse_state = _parse_state;
> > +	if (parse_state->terms) {
> > +		parse_events_terms__delete ($1);
> > +		YYABORT;
> > +	}
> >  	parse_state->terms = $1;
> >  }
> >  
> > @@ -582,7 +693,10 @@ event_config ',' event_term
> >  	struct list_head *head = $1;
> >  	struct parse_events_term *term = $3;
> >  
> > -	ABORT_ON(!head);
> > +	if (!head) {
> > +		free_term(term);
> > +		YYABORT;
> > +	}
> >  	list_add_tail(&term->list, head);
> >  	$$ = $1;
> >  }
> > @@ -603,8 +717,12 @@ PE_NAME '=' PE_NAME
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > -					$1, $3, &@1, &@3));
> > +	if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > +					$1, $3, &@1, &@3)) {
> > +		free($1);
> > +		free($3);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  |
> > @@ -612,8 +730,11 @@ PE_NAME '=' PE_VALUE
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > -					$1, $3, false, &@1, &@3));
> > +	if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > +					$1, $3, false, &@1, &@3)) {
> > +		free($1);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  |
> > @@ -622,7 +743,10 @@ PE_NAME '=' PE_VALUE_SYM_HW
> >  	struct parse_events_term *term;
> >  	int config = $3 & 255;
> >  
> > -	ABORT_ON(parse_events_term__sym_hw(&term, $1, config));
> > +	if (parse_events_term__sym_hw(&term, $1, config)) {
> > +		free($1);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  |
> > @@ -630,8 +754,11 @@ PE_NAME
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > -					$1, 1, true, &@1, NULL));
> > +	if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > +					$1, 1, true, &@1, NULL)) {
> > +		free($1);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  |
> > @@ -648,7 +775,10 @@ PE_TERM '=' PE_NAME
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__str(&term, (int)$1, NULL, $3, &@1, &@3));
> > +	if (parse_events_term__str(&term, (int)$1, NULL, $3, &@1, &@3)) {
> > +		free($3);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  |
> > @@ -672,9 +802,13 @@ PE_NAME array '=' PE_NAME
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > -					$1, $4, &@1, &@4));
> > -
> > +	if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > +					$1, $4, &@1, &@4)) {
> > +		free($1);
> > +		free($4);
> > +		free($2.ranges);
> > +		YYABORT;
> > +	}
> >  	term->array = $2;
> >  	$$ = term;
> >  }
> > @@ -683,8 +817,12 @@ PE_NAME array '=' PE_VALUE
> >  {
> >  	struct parse_events_term *term;
> >  
> > -	ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > -					$1, $4, false, &@1, &@4));
> > +	if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER,
> > +					$1, $4, false, &@1, &@4)) {
> > +		free($1);
> > +		free($2.ranges);
> > +		YYABORT;
> > +	}
> >  	term->array = $2;
> >  	$$ = term;
> >  }
> > @@ -695,8 +833,12 @@ PE_DRV_CFG_TERM
> >  	char *config = strdup($1);
> >  
> >  	ABORT_ON(!config);
> > -	ABORT_ON(parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_DRV_CFG,
> > -					config, $1, &@1, NULL));
> > +	if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_DRV_CFG,
> > +					config, $1, &@1, NULL)) {
> > +		free($1);
> > +		free(config);
> > +		YYABORT;
> > +	}
> >  	$$ = term;
> >  }
> >  
> > -- 
> > 2.24.0.rc1.363.gb1bccd3e3d-goog
> > 

-- 

- Arnaldo

  reply	other threads:[~2019-11-06 14:37 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-17 17:05 [PATCH] perf tools: avoid reading out of scope array Ian Rogers
2019-10-23  0:53 ` [PATCH v2 0/9] Improvements to memory usage by parse events Ian Rogers
2019-10-23  0:53   ` [PATCH v2 1/9] perf tools: add parse events append error Ian Rogers
2019-10-23  8:36     ` Jiri Olsa
2019-10-23  0:53   ` [PATCH v2 2/9] perf tools: splice events onto evlist even on error Ian Rogers
2019-10-23  8:40     ` Jiri Olsa
2019-10-23  0:53   ` [PATCH v2 3/9] perf tools: ensure config and str in terms are unique Ian Rogers
2019-10-23  8:50     ` Jiri Olsa
2019-10-23  0:53   ` [PATCH v2 4/9] perf tools: move ALLOC_LIST into a function Ian Rogers
2019-10-23  8:55     ` Jiri Olsa
2019-10-23 12:37       ` Arnaldo Carvalho de Melo
2019-11-12 11:18     ` [tip: perf/core] perf tools: Move " tip-bot2 for Ian Rogers
2019-10-23  0:53   ` [PATCH v2 5/9] perf tools: avoid a malloc for array events Ian Rogers
2019-10-23  8:58     ` Jiri Olsa
2019-10-23 12:38       ` Arnaldo Carvalho de Melo
2019-11-12 11:18     ` [tip: perf/core] perf tools: Avoid a malloc() " tip-bot2 for Ian Rogers
2019-10-23  0:53   ` [PATCH v2 6/9] perf tools: add destructors for parse event terms Ian Rogers
2019-10-23  9:01     ` Jiri Olsa
2019-10-24 19:03       ` Ian Rogers
2019-10-23  0:53   ` [PATCH v2 7/9] perf tools: before yyabort-ing free components Ian Rogers
2019-10-23  0:53   ` [PATCH v2 8/9] perf tools: if pmu configuration fails free terms Ian Rogers
2019-10-23  0:53   ` [PATCH v2 9/9] perf tools: add a deep delete for parse event terms Ian Rogers
2019-10-24 19:01   ` [PATCH v3 0/9] Improvements to memory usage by parse events Ian Rogers
2019-10-24 19:01     ` [PATCH v3 1/9] perf tools: add parse events append error Ian Rogers
2019-10-25  7:58       ` Jiri Olsa
2019-10-25 15:14         ` Ian Rogers
2019-10-28 19:32           ` Jiri Olsa
2019-10-28 21:06             ` Ian Rogers
2019-10-28 21:36               ` Jiri Olsa
2019-11-04 20:37                 ` Ian Rogers
2019-10-24 19:01     ` [PATCH v3 2/9] perf tools: splice events onto evlist even on error Ian Rogers
2019-10-25  8:01       ` Jiri Olsa
2019-10-25 15:47         ` Ian Rogers
2019-10-28 21:06           ` Jiri Olsa
2019-10-24 19:01     ` [PATCH v3 3/9] perf tools: ensure config and str in terms are unique Ian Rogers
2019-10-25  8:10       ` Jiri Olsa
2019-10-25 15:52         ` Ian Rogers
2019-10-24 19:01     ` [PATCH v3 4/9] perf tools: move ALLOC_LIST into a function Ian Rogers
2019-10-24 19:01     ` [PATCH v3 5/9] perf tools: avoid a malloc for array events Ian Rogers
2019-10-24 19:01     ` [PATCH v3 6/9] perf tools: add destructors for parse event terms Ian Rogers
2019-10-25  8:27       ` Jiri Olsa
2019-10-25 16:08         ` Ian Rogers
2019-10-28 19:33           ` Jiri Olsa
2019-10-24 19:02     ` [PATCH v3 7/9] perf tools: before yyabort-ing free components Ian Rogers
2019-10-24 19:02     ` [PATCH v3 8/9] perf tools: if pmu configuration fails free terms Ian Rogers
2019-10-24 19:02     ` [PATCH v3 9/9] perf tools: add a deep delete for parse event terms Ian Rogers
2019-10-25 18:08     ` [PATCH v4 0/9] Improvements to memory usage by parse events Ian Rogers
2019-10-25 18:08       ` [PATCH v4 1/9] perf tools: add parse events handle error Ian Rogers
2019-10-25 18:08       ` [PATCH v4 2/9] perf tools: move ALLOC_LIST into a function Ian Rogers
2019-10-25 18:08       ` [PATCH v4 3/9] perf tools: avoid a malloc for array events Ian Rogers
2019-10-25 18:08       ` [PATCH v4 4/9] perf tools: splice events onto evlist even on error Ian Rogers
2019-10-28 21:07         ` Jiri Olsa
2019-10-30 11:56           ` Arnaldo Carvalho de Melo
2019-11-12 11:18         ` [tip: perf/core] perf tools: Splice " tip-bot2 for Ian Rogers
2019-10-25 18:08       ` [PATCH v4 5/9] perf tools: ensure config and str in terms are unique Ian Rogers
2019-10-25 18:08       ` [PATCH v4 6/9] perf tools: add destructors for parse event terms Ian Rogers
2019-10-25 18:08       ` [PATCH v4 7/9] perf tools: before yyabort-ing free components Ian Rogers
2019-10-25 18:08       ` [PATCH v4 8/9] perf tools: if pmu configuration fails free terms Ian Rogers
2019-10-25 18:08       ` [PATCH v4 9/9] perf tools: add a deep delete for parse event terms Ian Rogers
2019-10-30 22:34       ` [PATCH v5 00/10] Improvements to memory usage by parse events Ian Rogers
2019-10-30 22:34         ` [PATCH v5 01/10] perf tools: add parse events handle error Ian Rogers
2019-11-06 14:06           ` Jiri Olsa
2019-11-06 14:29             ` Arnaldo Carvalho de Melo
2019-11-12 11:17           ` [tip: perf/core] perf parse: Add " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 02/10] perf tools: move ALLOC_LIST into a function Ian Rogers
2019-10-30 22:34         ` [PATCH v5 03/10] perf tools: avoid a malloc for array events Ian Rogers
2019-10-30 22:34         ` [PATCH v5 04/10] perf tools: splice events onto evlist even on error Ian Rogers
2019-10-30 22:34         ` [PATCH v5 05/10] perf tools: ensure config and str in terms are unique Ian Rogers
2019-11-06 14:25           ` Jiri Olsa
2019-11-06 14:31             ` Arnaldo Carvalho de Melo
2019-11-12 11:17           ` [tip: perf/core] perf parse: Ensure " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 06/10] perf tools: add destructors for parse event terms Ian Rogers
2019-11-06 14:24           ` Jiri Olsa
2019-11-06 14:35             ` Arnaldo Carvalho de Melo
2019-11-12 11:17           ` [tip: perf/core] perf parse: Add " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 07/10] perf tools: before yyabort-ing free components Ian Rogers
2019-11-06 14:24           ` Jiri Olsa
2019-11-06 14:37             ` Arnaldo Carvalho de Melo [this message]
2019-11-12 11:17           ` [tip: perf/core] perf parse: Before " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 08/10] perf tools: if pmu configuration fails free terms Ian Rogers
2019-11-06 14:24           ` Jiri Olsa
2019-11-06 14:38             ` Arnaldo Carvalho de Melo
2019-11-12 11:17           ` [tip: perf/core] perf parse: If " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 09/10] perf tools: add a deep delete for parse event terms Ian Rogers
2019-11-06 14:24           ` Jiri Olsa
2019-11-06 14:39             ` Arnaldo Carvalho de Melo
2019-11-12 11:17           ` [tip: perf/core] perf parse: Add " tip-bot2 for Ian Rogers
2019-10-30 22:34         ` [PATCH v5 10/10] perf tools: report initial event parsing error Ian Rogers
2019-11-06 14:24           ` Jiri Olsa
2019-11-07 22:14         ` [PATCH v6 00/10] Improvements to memory usage by parse events Ian Rogers
2019-11-07 22:14           ` [PATCH v6 01/10] perf tools: add parse events handle error Ian Rogers
2019-11-07 22:14           ` [PATCH v6 02/10] perf tools: move ALLOC_LIST into a function Ian Rogers
2019-11-07 22:14           ` [PATCH v6 03/10] perf tools: avoid a malloc for array events Ian Rogers
2019-11-07 22:14           ` [PATCH v6 04/10] perf tools: splice events onto evlist even on error Ian Rogers
2019-11-07 22:14           ` [PATCH v6 05/10] perf tools: ensure config and str in terms are unique Ian Rogers
2019-11-07 22:14           ` [PATCH v6 06/10] perf tools: add destructors for parse event terms Ian Rogers
2019-11-07 22:14           ` [PATCH v6 07/10] perf tools: before yyabort-ing free components Ian Rogers
2019-11-07 22:14           ` [PATCH v6 08/10] perf tools: if pmu configuration fails free terms Ian Rogers
2019-11-07 22:14           ` [PATCH v6 09/10] perf tools: add a deep delete for parse event terms Ian Rogers
2019-11-07 22:14           ` [PATCH v6 10/10] perf tools: report initial event parsing error Ian Rogers
2019-11-07 22:23           ` [PATCH v6 00/10] Improvements to memory usage by parse events Arnaldo Carvalho de Melo
2019-11-08 18:15             ` [PATCH] perf tools: report initial event parsing error Ian Rogers
2019-11-08 18:25               ` Arnaldo Carvalho de Melo
2019-11-11 12:02               ` Jiri Olsa
2019-11-16  7:49                 ` Ian Rogers
2019-11-11 12:02               ` Jiri Olsa
2019-11-16  7:52                 ` Ian Rogers
2019-11-11 12:03               ` Jiri Olsa
2019-11-16  7:53                 ` Ian Rogers
2019-11-16  7:46               ` [PATCH v2] " Ian Rogers
2019-11-18 22:16                 ` Arnaldo Carvalho de Melo
2019-11-19 16:56                 ` [tip: perf/core] perf parse: Report " tip-bot2 for Ian Rogers
2019-11-08 18:18             ` [PATCH v6 00/10] Improvements to memory usage by parse events Ian Rogers
2019-10-23  8:29 ` [PATCH] perf tools: avoid reading out of scope array Jiri Olsa
2019-11-11 14:25   ` Arnaldo Carvalho de Melo
2019-11-11 20:34     ` Ian Rogers
2019-11-12 11:05       ` Arnaldo Carvalho de Melo

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=20191106143735.GE6259@kernel.org \
    --to=arnaldo.melo@gmail.com \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=clang-built-linux@googlegroups.com \
    --cc=daniel@iogearbox.net \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=john.garry@huawei.com \
    --cc=jolsa@redhat.com \
    --cc=kafai@fb.com \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=songliubraving@fb.com \
    --cc=yao.jin@linux.intel.com \
    --cc=yhs@fb.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.