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

perf parse-events: Rename parse_events_error functions

Group error functions and name after the data type they manipulate.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20211107090002.3784612-1-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
6c191289 e4e29079

+79 -79
+1 -1
tools/perf/arch/powerpc/util/kvm-stat.c
··· 116 116 bzero(&err, sizeof(err)); 117 117 ret = parse_events(evlist, str, &err); 118 118 if (err.str) 119 - parse_events_print_error(&err, "tracepoint"); 119 + parse_events_error__print(&err, "tracepoint"); 120 120 return ret; 121 121 } 122 122
+1 -1
tools/perf/bench/evlist-open-close.c
··· 89 89 90 90 ret = parse_events(evlist, evstr, &err); 91 91 if (ret) { 92 - parse_events_print_error(&err, evstr); 92 + parse_events_error__print(&err, evstr); 93 93 pr_err("Run 'perf list' for a list of valid events\n"); 94 94 ret = 1; 95 95 goto out_delete_evlist;
+5 -5
tools/perf/builtin-stat.c
··· 1782 1782 &errinfo); 1783 1783 if (err) { 1784 1784 fprintf(stderr, "Cannot set up transaction events\n"); 1785 - parse_events_print_error(&errinfo, transaction_attrs); 1785 + parse_events_error__print(&errinfo, transaction_attrs); 1786 1786 return -1; 1787 1787 } 1788 1788 return 0; ··· 1812 1812 } else { 1813 1813 fprintf(stderr, "To measure SMI cost, it needs " 1814 1814 "msr/aperf/, msr/smi/ and cpu/cycles/ support\n"); 1815 - parse_events_print_error(&errinfo, smi_cost_attrs); 1815 + parse_events_error__print(&errinfo, smi_cost_attrs); 1816 1816 return -1; 1817 1817 } 1818 1818 if (err) { 1819 - parse_events_print_error(&errinfo, smi_cost_attrs); 1819 + parse_events_error__print(&errinfo, smi_cost_attrs); 1820 1820 fprintf(stderr, "Cannot set up SMI cost events\n"); 1821 1821 return -1; 1822 1822 } ··· 1883 1883 fprintf(stderr, 1884 1884 "Cannot set up top down events %s: %d\n", 1885 1885 str, err); 1886 - parse_events_print_error(&errinfo, str); 1886 + parse_events_error__print(&errinfo, str); 1887 1887 free(str); 1888 1888 return -1; 1889 1889 } ··· 1911 1911 fprintf(stderr, 1912 1912 "Cannot set up hybrid events %s: %d\n", 1913 1913 hybrid_str, err); 1914 - parse_events_print_error(&errinfo, hybrid_str); 1914 + parse_events_error__print(&errinfo, hybrid_str); 1915 1915 return -1; 1916 1916 } 1917 1917 return err;
+1 -1
tools/perf/builtin-trace.c
··· 4928 4928 bzero(&parse_err, sizeof(parse_err)); 4929 4929 err = parse_events(trace.evlist, trace.perfconfig_events, &parse_err); 4930 4930 if (err) { 4931 - parse_events_print_error(&parse_err, trace.perfconfig_events); 4931 + parse_events_error__print(&parse_err, trace.perfconfig_events); 4932 4932 goto out; 4933 4933 } 4934 4934 }
+1 -1
tools/perf/tests/expand-cgroup.c
··· 128 128 if (ret < 0) { 129 129 pr_debug("failed to parse event '%s', err %d, str '%s'\n", 130 130 event_str, ret, err.str); 131 - parse_events_print_error(&err, event_str); 131 + parse_events_error__print(&err, event_str); 132 132 goto out; 133 133 } 134 134
+1 -1
tools/perf/tests/parse-events.c
··· 2059 2059 if (ret) { 2060 2060 pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2061 2061 e->name, ret, err.str); 2062 - parse_events_print_error(&err, e->name); 2062 + parse_events_error__print(&err, e->name); 2063 2063 } else { 2064 2064 ret = e->check(evlist); 2065 2065 }
+1 -1
tools/perf/util/metricgroup.c
··· 1342 1342 bzero(&parse_error, sizeof(parse_error)); 1343 1343 ret = __parse_events(parsed_evlist, events.buf, &parse_error, fake_pmu); 1344 1344 if (ret) { 1345 - parse_events_print_error(&parse_error, events.buf); 1345 + parse_events_error__print(&parse_error, events.buf); 1346 1346 goto err_out; 1347 1347 } 1348 1348 ret = decode_all_metric_ids(parsed_evlist, modifier);
+58 -58
tools/perf/util/parse-events.c
··· 191 191 192 192 #define MAX_EVENT_LENGTH 512 193 193 194 - void parse_events__handle_error(struct parse_events_error *err, int idx, 195 - char *str, char *help) 196 - { 197 - if (WARN(!str, "WARNING: failed to provide error string\n")) { 198 - free(help); 199 - return; 200 - } 201 - switch (err->num_errors) { 202 - case 0: 203 - err->idx = idx; 204 - err->str = str; 205 - err->help = help; 206 - break; 207 - case 1: 208 - err->first_idx = err->idx; 209 - err->idx = idx; 210 - err->first_str = err->str; 211 - err->str = str; 212 - err->first_help = err->help; 213 - err->help = help; 214 - break; 215 - default: 216 - pr_debug("Multiple errors dropping message: %s (%s)\n", 217 - err->str, err->help); 218 - free(err->str); 219 - err->str = str; 220 - free(err->help); 221 - err->help = help; 222 - break; 223 - } 224 - err->num_errors++; 225 - } 226 - 227 194 struct tracepoint_path *tracepoint_id_to_path(u64 config) 228 195 { 229 196 struct tracepoint_path *path = NULL; ··· 554 587 } 555 588 556 589 tracing_path__strerror_open_tp(err, help, sizeof(help), sys, name); 557 - parse_events__handle_error(e, 0, strdup(str), strdup(help)); 590 + parse_events_error__handle(e, 0, strdup(str), strdup(help)); 558 591 } 559 592 560 593 static int add_tracepoint(struct list_head *list, int *idx, ··· 778 811 779 812 return 0; 780 813 errout: 781 - parse_events__handle_error(parse_state->error, 0, 814 + parse_events_error__handle(parse_state->error, 0, 782 815 strdup(errbuf), strdup("(add -v to see detail)")); 783 816 return err; 784 817 } ··· 798 831 int err; 799 832 800 833 if (term->type_term != PARSE_EVENTS__TERM_TYPE_USER) { 801 - parse_events__handle_error(parse_state->error, term->err_term, 834 + parse_events_error__handle(parse_state->error, term->err_term, 802 835 strdup("Invalid config term for BPF object"), 803 836 NULL); 804 837 return -EINVAL; ··· 818 851 else 819 852 idx = term->err_term + error_pos; 820 853 821 - parse_events__handle_error(parse_state->error, idx, 854 + parse_events_error__handle(parse_state->error, idx, 822 855 strdup(errbuf), 823 856 strdup( 824 857 "Hint:\tValid config terms:\n" ··· 890 923 -err, errbuf, 891 924 sizeof(errbuf)); 892 925 893 - parse_events__handle_error(parse_state->error, 0, 926 + parse_events_error__handle(parse_state->error, 0, 894 927 strdup(errbuf), strdup("(add -v to see detail)")); 895 928 return err; 896 929 } ··· 914 947 struct bpf_object *obj __maybe_unused, 915 948 struct list_head *head_config __maybe_unused) 916 949 { 917 - parse_events__handle_error(parse_state->error, 0, 950 + parse_events_error__handle(parse_state->error, 0, 918 951 strdup("BPF support is not compiled"), 919 952 strdup("Make sure libbpf-devel is available at build time.")); 920 953 return -ENOTSUP; ··· 926 959 bool source __maybe_unused, 927 960 struct list_head *head_config __maybe_unused) 928 961 { 929 - parse_events__handle_error(parse_state->error, 0, 962 + parse_events_error__handle(parse_state->error, 0, 930 963 strdup("BPF support is not compiled"), 931 964 strdup("Make sure libbpf-devel is available at build time.")); 932 965 return -ENOTSUP; ··· 1009 1042 return 0; 1010 1043 1011 1044 if (err) { 1012 - parse_events__handle_error(err, term->err_val, 1045 + parse_events_error__handle(err, term->err_val, 1013 1046 type == PARSE_EVENTS__TERM_TYPE_NUM 1014 1047 ? strdup("expected numeric value") 1015 1048 : strdup("expected string value"), ··· 1054 1087 char *err_str; 1055 1088 1056 1089 if (term_type < 0 || term_type >= __PARSE_EVENTS__TERM_TYPE_NR) { 1057 - parse_events__handle_error(err, -1, 1090 + parse_events_error__handle(err, -1, 1058 1091 strdup("Invalid term_type"), NULL); 1059 1092 return false; 1060 1093 } ··· 1077 1110 /* term_type is validated so indexing is safe */ 1078 1111 if (asprintf(&err_str, "'%s' is not usable in 'perf stat'", 1079 1112 config_term_names[term_type]) >= 0) 1080 - parse_events__handle_error(err, -1, err_str, NULL); 1113 + parse_events_error__handle(err, -1, err_str, NULL); 1081 1114 return false; 1082 1115 } 1083 1116 } ··· 1121 1154 if (strcmp(term->val.str, "no") && 1122 1155 parse_branch_str(term->val.str, 1123 1156 &attr->branch_sample_type)) { 1124 - parse_events__handle_error(err, term->err_val, 1157 + parse_events_error__handle(err, term->err_val, 1125 1158 strdup("invalid branch sample type"), 1126 1159 NULL); 1127 1160 return -EINVAL; ··· 1130 1163 case PARSE_EVENTS__TERM_TYPE_TIME: 1131 1164 CHECK_TYPE_VAL(NUM); 1132 1165 if (term->val.num > 1) { 1133 - parse_events__handle_error(err, term->err_val, 1166 + parse_events_error__handle(err, term->err_val, 1134 1167 strdup("expected 0 or 1"), 1135 1168 NULL); 1136 1169 return -EINVAL; ··· 1169 1202 case PARSE_EVENTS__TERM_TYPE_PERCORE: 1170 1203 CHECK_TYPE_VAL(NUM); 1171 1204 if ((unsigned int)term->val.num > 1) { 1172 - parse_events__handle_error(err, term->err_val, 1205 + parse_events_error__handle(err, term->err_val, 1173 1206 strdup("expected 0 or 1"), 1174 1207 NULL); 1175 1208 return -EINVAL; ··· 1181 1214 case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE: 1182 1215 CHECK_TYPE_VAL(NUM); 1183 1216 if (term->val.num > UINT_MAX) { 1184 - parse_events__handle_error(err, term->err_val, 1217 + parse_events_error__handle(err, term->err_val, 1185 1218 strdup("too big"), 1186 1219 NULL); 1187 1220 return -EINVAL; 1188 1221 } 1189 1222 break; 1190 1223 default: 1191 - parse_events__handle_error(err, term->err_term, 1224 + parse_events_error__handle(err, term->err_term, 1192 1225 strdup("unknown term"), 1193 1226 parse_events_formats_error_string(NULL)); 1194 1227 return -EINVAL; ··· 1242 1275 return config_term_common(attr, term, err); 1243 1276 default: 1244 1277 if (err) { 1245 - parse_events__handle_error(err, term->err_term, 1278 + parse_events_error__handle(err, term->err_term, 1246 1279 strdup("unknown term"), 1247 1280 strdup("valid terms: call-graph,stack-size\n")); 1248 1281 } ··· 1541 1574 if (asprintf(&err_str, 1542 1575 "Cannot find PMU `%s'. Missing kernel support?", 1543 1576 name) >= 0) 1544 - parse_events__handle_error(err, 0, err_str, NULL); 1577 + parse_events_error__handle(err, 0, err_str, NULL); 1545 1578 return -EINVAL; 1546 1579 } 1547 1580 ··· 2301 2334 return ret; 2302 2335 } 2303 2336 2337 + void parse_events_error__handle(struct parse_events_error *err, int idx, 2338 + char *str, char *help) 2339 + { 2340 + if (WARN(!str, "WARNING: failed to provide error string\n")) { 2341 + free(help); 2342 + return; 2343 + } 2344 + switch (err->num_errors) { 2345 + case 0: 2346 + err->idx = idx; 2347 + err->str = str; 2348 + err->help = help; 2349 + break; 2350 + case 1: 2351 + err->first_idx = err->idx; 2352 + err->idx = idx; 2353 + err->first_str = err->str; 2354 + err->str = str; 2355 + err->first_help = err->help; 2356 + err->help = help; 2357 + break; 2358 + default: 2359 + pr_debug("Multiple errors dropping message: %s (%s)\n", 2360 + err->str, err->help); 2361 + free(err->str); 2362 + err->str = str; 2363 + free(err->help); 2364 + err->help = help; 2365 + break; 2366 + } 2367 + err->num_errors++; 2368 + } 2369 + 2304 2370 #define MAX_WIDTH 1000 2305 2371 static int get_term_width(void) 2306 2372 { ··· 2343 2343 return ws.ws_col > MAX_WIDTH ? MAX_WIDTH : ws.ws_col; 2344 2344 } 2345 2345 2346 - static void __parse_events_print_error(int err_idx, const char *err_str, 2347 - const char *err_help, const char *event) 2346 + static void __parse_events_error__print(int err_idx, const char *err_str, 2347 + const char *err_help, const char *event) 2348 2348 { 2349 2349 const char *str = "invalid or unsupported event: "; 2350 2350 char _buf[MAX_WIDTH]; ··· 2398 2398 } 2399 2399 } 2400 2400 2401 - void parse_events_print_error(struct parse_events_error *err, 2402 - const char *event) 2401 + void parse_events_error__print(struct parse_events_error *err, 2402 + const char *event) 2403 2403 { 2404 2404 if (!err->num_errors) 2405 2405 return; 2406 2406 2407 - __parse_events_print_error(err->idx, err->str, err->help, event); 2407 + __parse_events_error__print(err->idx, err->str, err->help, event); 2408 2408 zfree(&err->str); 2409 2409 zfree(&err->help); 2410 2410 2411 2411 if (err->num_errors > 1) { 2412 2412 fputs("\nInitial error:\n", stderr); 2413 - __parse_events_print_error(err->first_idx, err->first_str, 2413 + __parse_events_error__print(err->first_idx, err->first_str, 2414 2414 err->first_help, event); 2415 2415 zfree(&err->first_str); 2416 2416 zfree(&err->first_help); ··· 2430 2430 ret = parse_events(evlist, str, &err); 2431 2431 2432 2432 if (ret) { 2433 - parse_events_print_error(&err, str); 2433 + parse_events_error__print(&err, str); 2434 2434 fprintf(stderr, "Run 'perf list' for a list of valid events\n"); 2435 2435 } 2436 2436 ··· 3324 3324 if (!parse_state->error) 3325 3325 return; 3326 3326 3327 - parse_events__handle_error(parse_state->error, idx, strdup(str), NULL); 3327 + parse_events_error__handle(parse_state->error, idx, strdup(str), NULL); 3328 3328 } 3329 3329 3330 3330 static void config_terms_list(char *buf, size_t buf_sz)
+4 -4
tools/perf/util/parse-events.h
··· 142 142 char *hybrid_pmu_name; 143 143 }; 144 144 145 - void parse_events__handle_error(struct parse_events_error *err, int idx, 146 - char *str, char *help); 147 145 void parse_events__shrink_config_terms(void); 148 146 int parse_events__is_hardcoded_term(struct parse_events_term *term); 149 147 int parse_events_term__num(struct parse_events_term **term, ··· 242 244 int valid_event_mount(const char *eventfs); 243 245 char *parse_events_formats_error_string(char *additional_terms); 244 246 245 - void parse_events_print_error(struct parse_events_error *err, 246 - const char *event); 247 + void parse_events_error__handle(struct parse_events_error *err, int idx, 248 + char *str, char *help); 249 + void parse_events_error__print(struct parse_events_error *err, 250 + const char *event); 247 251 248 252 #ifdef HAVE_LIBELF_SUPPORT 249 253 /*
+2 -2
tools/perf/util/parse-events.y
··· 186 186 struct parse_events_state *parse_state = _parse_state; 187 187 struct parse_events_error *error = parse_state->error; 188 188 189 - parse_events__handle_error(error, @3.first_column, 189 + parse_events_error__handle(error, @3.first_column, 190 190 strdup("Bad modifier"), NULL); 191 191 free_list_evsel(list); 192 192 YYABORT; ··· 248 248 struct parse_events_state *parse_state = _parse_state; 249 249 struct parse_events_error *error = parse_state->error; 250 250 251 - parse_events__handle_error(error, @2.first_column, 251 + parse_events_error__handle(error, @2.first_column, 252 252 strdup("Bad modifier"), NULL); 253 253 free_list_evsel(list); 254 254 YYABORT;
+4 -4
tools/perf/util/pmu.c
··· 1283 1283 unknown_term = NULL; 1284 1284 help_msg = parse_events_formats_error_string(pmu_term); 1285 1285 if (err) { 1286 - parse_events__handle_error(err, term->err_term, 1286 + parse_events_error__handle(err, term->err_term, 1287 1287 unknown_term, 1288 1288 help_msg); 1289 1289 } else { ··· 1316 1316 if (term->no_value && 1317 1317 bitmap_weight(format->bits, PERF_PMU_FORMAT_BITS) > 1) { 1318 1318 if (err) { 1319 - parse_events__handle_error(err, term->err_val, 1319 + parse_events_error__handle(err, term->err_val, 1320 1320 strdup("no value assigned for term"), 1321 1321 NULL); 1322 1322 } ··· 1331 1331 term->config, term->val.str); 1332 1332 } 1333 1333 if (err) { 1334 - parse_events__handle_error(err, term->err_val, 1334 + parse_events_error__handle(err, term->err_val, 1335 1335 strdup("expected numeric value"), 1336 1336 NULL); 1337 1337 } ··· 1348 1348 if (err) { 1349 1349 char *err_str; 1350 1350 1351 - parse_events__handle_error(err, term->err_val, 1351 + parse_events_error__handle(err, term->err_val, 1352 1352 asprintf(&err_str, 1353 1353 "value too big for format, maximum is %llu", 1354 1354 (unsigned long long)max_val) < 0