Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf parse-events: Separate YYABORT and YYNOMEM cases

Split cases in event_pmu for greater accuracy.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20230627181030.95608-8-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
a7a3252d 9462e4de

+26 -19
+26 -19
tools/perf/util/parse-events.y
··· 283 283 PE_NAME opt_pmu_config 284 284 { 285 285 struct parse_events_state *parse_state = _parse_state; 286 - struct parse_events_error *error = parse_state->error; 287 286 struct list_head *list = NULL, *orig_terms = NULL, *terms= NULL; 287 + struct parse_events_error *error = parse_state->error; 288 288 char *pattern = NULL; 289 289 290 - #define CLEANUP_YYABORT \ 290 + #define CLEANUP \ 291 291 do { \ 292 292 parse_events_terms__delete($2); \ 293 293 parse_events_terms__delete(orig_terms); \ 294 294 free(list); \ 295 295 free($1); \ 296 296 free(pattern); \ 297 - YYABORT; \ 298 297 } while(0) 299 - 300 - if (parse_events_copy_term_list($2, &orig_terms)) 301 - CLEANUP_YYABORT; 302 298 303 299 if (error) 304 300 error->idx = @1.first_column; 305 301 302 + if (parse_events_copy_term_list($2, &orig_terms)) { 303 + CLEANUP; 304 + YYNOMEM; 305 + } 306 + 306 307 list = alloc_list(); 307 - if (!list) 308 - CLEANUP_YYABORT; 308 + if (!list) { 309 + CLEANUP; 310 + YYNOMEM; 311 + } 309 312 /* Attempt to add to list assuming $1 is a PMU name. */ 310 313 if (parse_events_add_pmu(parse_state, list, $1, $2, /*auto_merge_stats=*/false)) { 311 314 struct perf_pmu *pmu = NULL; 312 315 int ok = 0; 313 316 314 317 /* Failure to add, try wildcard expansion of $1 as a PMU name. */ 315 - if (asprintf(&pattern, "%s*", $1) < 0) 316 - CLEANUP_YYABORT; 318 + if (asprintf(&pattern, "%s*", $1) < 0) { 319 + CLEANUP; 320 + YYNOMEM; 321 + } 317 322 318 323 while ((pmu = perf_pmus__scan(pmu)) != NULL) { 319 324 char *name = pmu->name; ··· 333 328 !perf_pmu__match(pattern, pmu->alias_name, $1)) { 334 329 bool auto_merge_stats = perf_pmu__auto_merge_stats(pmu); 335 330 336 - if (parse_events_copy_term_list(orig_terms, &terms)) 337 - CLEANUP_YYABORT; 331 + if (parse_events_copy_term_list(orig_terms, &terms)) { 332 + CLEANUP; 333 + YYNOMEM; 334 + } 338 335 if (!parse_events_add_pmu(parse_state, list, pmu->name, terms, 339 336 auto_merge_stats)) { 340 337 ok++; ··· 352 345 ok = !parse_events_multi_pmu_add(parse_state, $1, $2, &list); 353 346 $2 = NULL; 354 347 } 355 - if (!ok) 356 - CLEANUP_YYABORT; 348 + if (!ok) { 349 + CLEANUP; 350 + YYABORT; 351 + } 357 352 } 358 - parse_events_terms__delete($2); 359 - parse_events_terms__delete(orig_terms); 360 - free(pattern); 361 - free($1); 362 353 $$ = list; 363 - #undef CLEANUP_YYABORT 354 + list = NULL; 355 + CLEANUP; 356 + #undef CLEANUP 364 357 } 365 358 | 366 359 PE_NAME sep_dc