Lines Matching +full:long +full:- +full:term
1 // SPDX-License-Identifier: GPL-2.0
25 #include "parse-events.h"
30 #include "pmu-hybrid.h"
59 return -EINVAL; in perf_pmu__format_parse()
63 char *name = evt_ent->d_name; in perf_pmu__format_parse()
71 ret = -EINVAL; in perf_pmu__format_parse()
96 return -1; in pmu_format()
105 return -1; in pmu_format()
127 ret = -ENOMEM; in perf_pmu__convert_scale()
152 int fd, ret = -1; in perf_pmu__parse_scale()
158 if (fd == -1) in perf_pmu__parse_scale()
159 return -1; in perf_pmu__parse_scale()
164 sret = read(fd, scale, sizeof(scale)-1); in perf_pmu__parse_scale()
168 if (scale[sret - 1] == '\n') in perf_pmu__parse_scale()
169 scale[sret - 1] = '\0'; in perf_pmu__parse_scale()
173 ret = perf_pmu__convert_scale(scale, NULL, &alias->scale); in perf_pmu__parse_scale()
188 if (fd == -1) in perf_pmu__parse_unit()
189 return -1; in perf_pmu__parse_unit()
191 sret = read(fd, alias->unit, UNIT_MAX_LEN); in perf_pmu__parse_unit()
197 if (alias->unit[sret - 1] == '\n') in perf_pmu__parse_unit()
198 alias->unit[sret - 1] = '\0'; in perf_pmu__parse_unit()
200 alias->unit[sret] = '\0'; in perf_pmu__parse_unit()
205 alias->unit[0] = '\0'; in perf_pmu__parse_unit()
206 return -1; in perf_pmu__parse_unit()
215 scnprintf(path, PATH_MAX, "%s/%s.per-pkg", dir, name); in perf_pmu__parse_per_pkg()
218 if (fd == -1) in perf_pmu__parse_per_pkg()
219 return -1; in perf_pmu__parse_per_pkg()
223 alias->per_pkg = true; in perf_pmu__parse_per_pkg()
236 if (fd == -1) in perf_pmu__parse_snapshot()
237 return -1; in perf_pmu__parse_snapshot()
239 alias->snapshot = true; in perf_pmu__parse_snapshot()
255 } else /* Nothing new --> keep old string */ in perf_pmu_assign_str()
265 perf_pmu_assign_str(old->name, "desc", &old->desc, &newalias->desc); in perf_pmu_update_alias()
266 perf_pmu_assign_str(old->name, "long_desc", &old->long_desc, in perf_pmu_update_alias()
267 &newalias->long_desc); in perf_pmu_update_alias()
268 perf_pmu_assign_str(old->name, "topic", &old->topic, &newalias->topic); in perf_pmu_update_alias()
269 perf_pmu_assign_str(old->name, "metric_expr", &old->metric_expr, in perf_pmu_update_alias()
270 &newalias->metric_expr); in perf_pmu_update_alias()
271 perf_pmu_assign_str(old->name, "metric_name", &old->metric_name, in perf_pmu_update_alias()
272 &newalias->metric_name); in perf_pmu_update_alias()
273 perf_pmu_assign_str(old->name, "value", &old->str, &newalias->str); in perf_pmu_update_alias()
274 old->scale = newalias->scale; in perf_pmu_update_alias()
275 old->per_pkg = newalias->per_pkg; in perf_pmu_update_alias()
276 old->snapshot = newalias->snapshot; in perf_pmu_update_alias()
277 memcpy(old->unit, newalias->unit, sizeof(old->unit)); in perf_pmu_update_alias()
283 zfree(&newalias->name); in perf_pmu_free_alias()
284 zfree(&newalias->desc); in perf_pmu_free_alias()
285 zfree(&newalias->long_desc); in perf_pmu_free_alias()
286 zfree(&newalias->topic); in perf_pmu_free_alias()
287 zfree(&newalias->str); in perf_pmu_free_alias()
288 zfree(&newalias->metric_expr); in perf_pmu_free_alias()
289 zfree(&newalias->metric_name); in perf_pmu_free_alias()
290 zfree(&newalias->pmu_name); in perf_pmu_free_alias()
291 parse_events_terms__purge(&newalias->terms); in perf_pmu_free_alias()
304 if (!strcasecmp(newalias->name, a->name)) { in perf_pmu_merge_alias()
305 if (newalias->pmu_name && a->pmu_name && in perf_pmu_merge_alias()
306 !strcasecmp(newalias->pmu_name, a->pmu_name)) { in perf_pmu_merge_alias()
320 struct parse_events_term *term; in __perf_pmu__new_alias() local
330 long_desc = (char *)pe->long_desc; in __perf_pmu__new_alias()
331 topic = (char *)pe->topic; in __perf_pmu__new_alias()
332 unit = (char *)pe->unit; in __perf_pmu__new_alias()
333 perpkg = (char *)pe->perpkg; in __perf_pmu__new_alias()
334 metric_expr = (char *)pe->metric_expr; in __perf_pmu__new_alias()
335 metric_name = (char *)pe->metric_name; in __perf_pmu__new_alias()
336 deprecated = (char *)pe->deprecated; in __perf_pmu__new_alias()
337 pmu_name = (char *)pe->pmu; in __perf_pmu__new_alias()
342 return -ENOMEM; in __perf_pmu__new_alias()
344 INIT_LIST_HEAD(&alias->terms); in __perf_pmu__new_alias()
345 alias->scale = 1.0; in __perf_pmu__new_alias()
346 alias->unit[0] = '\0'; in __perf_pmu__new_alias()
347 alias->per_pkg = false; in __perf_pmu__new_alias()
348 alias->snapshot = false; in __perf_pmu__new_alias()
349 alias->deprecated = false; in __perf_pmu__new_alias()
351 ret = parse_events_terms(&alias->terms, val); in __perf_pmu__new_alias()
363 * Rebuild string to make alias->str member comparable. in __perf_pmu__new_alias()
367 list_for_each_entry(term, &alias->terms, list) { in __perf_pmu__new_alias()
369 ret += scnprintf(newval + ret, sizeof(newval) - ret, in __perf_pmu__new_alias()
371 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM) in __perf_pmu__new_alias()
372 ret += scnprintf(newval + ret, sizeof(newval) - ret, in __perf_pmu__new_alias()
373 "%s=%#x", term->config, term->val.num); in __perf_pmu__new_alias()
374 else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) in __perf_pmu__new_alias()
375 ret += scnprintf(newval + ret, sizeof(newval) - ret, in __perf_pmu__new_alias()
376 "%s=%s", term->config, term->val.str); in __perf_pmu__new_alias()
379 alias->name = strdup(name); in __perf_pmu__new_alias()
390 alias->metric_expr = metric_expr ? strdup(metric_expr) : NULL; in __perf_pmu__new_alias()
391 alias->metric_name = metric_name ? strdup(metric_name): NULL; in __perf_pmu__new_alias()
392 alias->desc = desc ? strdup(desc) : NULL; in __perf_pmu__new_alias()
393 alias->long_desc = long_desc ? strdup(long_desc) : in __perf_pmu__new_alias()
395 alias->topic = topic ? strdup(topic) : NULL; in __perf_pmu__new_alias()
397 if (perf_pmu__convert_scale(unit, &unit, &alias->scale) < 0) in __perf_pmu__new_alias()
398 return -1; in __perf_pmu__new_alias()
399 snprintf(alias->unit, sizeof(alias->unit), "%s", unit); in __perf_pmu__new_alias()
401 alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1; in __perf_pmu__new_alias()
402 alias->str = strdup(newval); in __perf_pmu__new_alias()
403 alias->pmu_name = pmu_name ? strdup(pmu_name) : NULL; in __perf_pmu__new_alias()
406 alias->deprecated = true; in __perf_pmu__new_alias()
409 list_add_tail(&alias->list, list); in __perf_pmu__new_alias()
421 return -EINVAL; in perf_pmu__new_alias()
436 if (len > 5 && !strcmp(name + len - 5, ".unit")) in pmu_alias_info_file()
438 if (len > 6 && !strcmp(name + len - 6, ".scale")) in pmu_alias_info_file()
440 if (len > 8 && !strcmp(name + len - 8, ".per-pkg")) in pmu_alias_info_file()
442 if (len > 9 && !strcmp(name + len - 9, ".snapshot")) in pmu_alias_info_file()
459 return -EINVAL; in pmu_aliases_parse()
463 char *name = evt_ent->d_name; in pmu_aliases_parse()
502 return -1; in pmu_aliases()
511 return -1; in pmu_aliases()
519 struct parse_events_term *term, *cloned; in pmu_alias_terms() local
523 list_for_each_entry(term, &alias->terms, list) { in pmu_alias_terms()
524 ret = parse_events_term__clone(&cloned, term); in pmu_alias_terms()
533 cloned->weak = true; in pmu_alias_terms()
534 list_add_tail(&cloned->list, &list); in pmu_alias_terms()
553 return -1; in pmu_type()
559 return -1; in pmu_type()
563 return -EINVAL; in pmu_type()
566 ret = -1; in pmu_type()
591 if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")) in pmu_read_sysfs()
594 perf_pmu__find(dent->d_name); in pmu_read_sysfs()
669 str[len - 1] = 0; /* remove line feed */ in pmu_id()
728 if (!map->table) { in perf_pmu__find_map()
733 if (!strcmp_cpuid_str(map->cpuid, cpuid)) in perf_pmu__find_map()
793 * Match more complex aliases where the alias name is a comma-delimited in pmu_uncore_alias_match()
830 const char *name = pmu->name; in pmu_add_cpu_aliases_map()
837 struct pmu_event *pe = &map->table[i++]; in pmu_add_cpu_aliases_map()
838 const char *pname = pe->pmu ? pe->pmu : cpu_name; in pmu_add_cpu_aliases_map()
840 if (!pe->name) { in pmu_add_cpu_aliases_map()
841 if (pe->metric_group || pe->metric_name) in pmu_add_cpu_aliases_map()
846 if (pmu->is_uncore && pmu_uncore_alias_match(pname, name)) in pmu_add_cpu_aliases_map()
854 __perf_pmu__new_alias(head, NULL, (char *)pe->name, in pmu_add_cpu_aliases_map()
855 (char *)pe->desc, (char *)pe->event, in pmu_add_cpu_aliases_map()
881 if (!event_table->table) in pmu_for_each_sys_event()
885 struct pmu_event *pe = &event_table->table[j++]; in pmu_for_each_sys_event()
888 if (!pe->name && !pe->metric_group && !pe->metric_name) in pmu_for_each_sys_event()
906 struct perf_pmu *pmu = idata->pmu; in pmu_add_sys_aliases_iter_fn()
908 if (!pe->name) { in pmu_add_sys_aliases_iter_fn()
909 if (pe->metric_group || pe->metric_name) in pmu_add_sys_aliases_iter_fn()
911 return -EINVAL; in pmu_add_sys_aliases_iter_fn()
914 if (!pe->compat || !pe->pmu) in pmu_add_sys_aliases_iter_fn()
917 if (!strcmp(pmu->id, pe->compat) && in pmu_add_sys_aliases_iter_fn()
918 pmu_uncore_alias_match(pe->pmu, pmu->name)) { in pmu_add_sys_aliases_iter_fn()
919 __perf_pmu__new_alias(idata->head, NULL, in pmu_add_sys_aliases_iter_fn()
920 (char *)pe->name, in pmu_add_sys_aliases_iter_fn()
921 (char *)pe->desc, in pmu_add_sys_aliases_iter_fn()
922 (char *)pe->event, in pmu_add_sys_aliases_iter_fn()
936 if (!pmu->id) in pmu_add_sys_aliases()
963 int max_precise = -1; in pmu_max_precise()
1010 pmu->cpus = pmu_cpumask(name); in pmu_lookup()
1011 pmu->name = strdup(name); in pmu_lookup()
1012 if (!pmu->name) in pmu_lookup()
1017 pmu->alias_name = strdup(alias_name); in pmu_lookup()
1018 if (!pmu->alias_name) in pmu_lookup()
1022 pmu->type = type; in pmu_lookup()
1023 pmu->is_uncore = pmu_is_uncore(name); in pmu_lookup()
1024 if (pmu->is_uncore) in pmu_lookup()
1025 pmu->id = pmu_id(name); in pmu_lookup()
1026 pmu->is_hybrid = is_hybrid; in pmu_lookup()
1027 pmu->max_precise = pmu_max_precise(name); in pmu_lookup()
1031 INIT_LIST_HEAD(&pmu->format); in pmu_lookup()
1032 INIT_LIST_HEAD(&pmu->aliases); in pmu_lookup()
1033 INIT_LIST_HEAD(&pmu->caps); in pmu_lookup()
1034 list_splice(&format, &pmu->format); in pmu_lookup()
1035 list_splice(&aliases, &pmu->aliases); in pmu_lookup()
1036 list_add_tail(&pmu->list, &pmus); in pmu_lookup()
1038 if (pmu->is_hybrid) in pmu_lookup()
1039 list_add_tail(&pmu->hybrid_list, &perf_pmu__hybrid_pmus); in pmu_lookup()
1041 pmu->default_config = perf_pmu__get_default_config(pmu); in pmu_lookup()
1045 if (pmu->name) in pmu_lookup()
1046 free(pmu->name); in pmu_lookup()
1056 if (!strcmp(pmu->name, name) || in pmu_find()
1057 (pmu->alias_name && !strcmp(pmu->alias_name, name))) in pmu_find()
1069 if (pmu->type == type) in perf_pmu__find_by_type()
1095 if (pmu->type == evsel->core.attr.type) in evsel__find_pmu()
1106 return pmu && pmu->auxtrace; in evsel__is_aux_event()
1131 if (!strcmp(format->name, name)) in pmu_find_format()
1146 for_each_set_bit(fbit, format->bits, PERF_PMU_FORMAT_BITS) in perf_pmu__format_bits()
1157 return -1; in perf_pmu__format_type()
1159 return format->value; in perf_pmu__format_type()
1166 static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, in pmu_format_value()
1169 unsigned long fbit, vbit; in pmu_format_value()
1183 static __u64 pmu_format_max_value(const unsigned long *format) in pmu_format_max_value()
1191 return (1ULL << w) - 1; in pmu_format_max_value()
1192 return -1; in pmu_format_max_value()
1196 * Term is a string term, and might be a param-term. Try to look up it's value
1198 * - We have a term like "base-or-format-term=param-term",
1199 * - We need to find the value supplied for "param-term" (with param-term named
1200 * in a config string) later on in the term list.
1202 static int pmu_resolve_param_term(struct parse_events_term *term, in pmu_resolve_param_term() argument
1209 if (t->type_val == PARSE_EVENTS__TERM_TYPE_NUM && in pmu_resolve_param_term()
1210 t->config && !strcmp(t->config, term->config)) { in pmu_resolve_param_term()
1211 t->used = true; in pmu_resolve_param_term()
1212 *value = t->val.num; in pmu_resolve_param_term()
1218 printf("Required parameter '%s' not specified\n", term->config); in pmu_resolve_param_term()
1220 return -1; in pmu_resolve_param_term()
1235 if (strbuf_addf(&buf, i++ ? ",%s" : "%s", format->name) < 0) in pmu_formats_string()
1247 * user input data - term parameter.
1252 struct parse_events_term *term, in pmu_config_term() argument
1261 * If this is a parameter we've already used for parameterized-eval, in pmu_config_term()
1264 if (term->used) in pmu_config_term()
1271 if (parse_events__is_hardcoded_term(term)) in pmu_config_term()
1274 format = pmu_find_format(formats, term->config); in pmu_config_term()
1281 "unknown term '%s' for pmu '%s'", in pmu_config_term()
1282 term->config, pmu_name) < 0) in pmu_config_term()
1286 parse_events__handle_error(err, term->err_term, in pmu_config_term()
1294 return -EINVAL; in pmu_config_term()
1297 switch (format->value) { in pmu_config_term()
1299 vp = &attr->config; in pmu_config_term()
1302 vp = &attr->config1; in pmu_config_term()
1305 vp = &attr->config2; in pmu_config_term()
1308 return -EINVAL; in pmu_config_term()
1312 * Either directly use a numeric term, or try to translate string terms in pmu_config_term()
1315 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM) { in pmu_config_term()
1316 if (term->no_value && in pmu_config_term()
1317 bitmap_weight(format->bits, PERF_PMU_FORMAT_BITS) > 1) { in pmu_config_term()
1319 parse_events__handle_error(err, term->err_val, in pmu_config_term()
1320 strdup("no value assigned for term"), in pmu_config_term()
1323 return -EINVAL; in pmu_config_term()
1326 val = term->val.num; in pmu_config_term()
1327 } else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) { in pmu_config_term()
1328 if (strcmp(term->val.str, "?")) { in pmu_config_term()
1331 term->config, term->val.str); in pmu_config_term()
1334 parse_events__handle_error(err, term->err_val, in pmu_config_term()
1338 return -EINVAL; in pmu_config_term()
1341 if (pmu_resolve_param_term(term, head_terms, &val)) in pmu_config_term()
1342 return -EINVAL; in pmu_config_term()
1344 return -EINVAL; in pmu_config_term()
1346 max_val = pmu_format_max_value(format->bits); in pmu_config_term()
1351 parse_events__handle_error(err, term->err_val, in pmu_config_term()
1354 (unsigned long long)max_val) < 0 in pmu_config_term()
1358 return -EINVAL; in pmu_config_term()
1366 pmu_format_value(format->bits, val, vp, zero); in pmu_config_term()
1375 struct parse_events_term *term; in perf_pmu__config_terms() local
1377 list_for_each_entry(term, head_terms, list) { in perf_pmu__config_terms()
1378 if (pmu_config_term(pmu_name, formats, attr, term, head_terms, in perf_pmu__config_terms()
1380 return -EINVAL; in perf_pmu__config_terms()
1388 * 1) users input - specified in terms parameter
1389 * 2) pmu format definitions - specified by pmu parameter
1395 bool zero = !!pmu->default_config; in perf_pmu__config()
1397 attr->type = pmu->type; in perf_pmu__config()
1398 return perf_pmu__config_terms(pmu->name, &pmu->format, attr, in perf_pmu__config()
1403 struct parse_events_term *term) in pmu_find_alias() argument
1408 if (parse_events__is_hardcoded_term(term)) in pmu_find_alias()
1411 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM) { in pmu_find_alias()
1412 if (term->val.num != 1) in pmu_find_alias()
1414 if (pmu_find_format(&pmu->format, term->config)) in pmu_find_alias()
1416 name = term->config; in pmu_find_alias()
1417 } else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) { in pmu_find_alias()
1418 if (strcasecmp(term->config, "event")) in pmu_find_alias()
1420 name = term->val.str; in pmu_find_alias()
1425 list_for_each_entry(alias, &pmu->aliases, list) { in pmu_find_alias()
1426 if (!strcasecmp(alias->name, name)) in pmu_find_alias()
1437 * Only one term in event definition can in check_info_data()
1441 if ((info->unit && alias->unit[0]) || in check_info_data()
1442 (info->scale && alias->scale) || in check_info_data()
1443 (info->snapshot && alias->snapshot)) in check_info_data()
1444 return -EINVAL; in check_info_data()
1446 if (alias->unit[0]) in check_info_data()
1447 info->unit = alias->unit; in check_info_data()
1449 if (alias->scale) in check_info_data()
1450 info->scale = alias->scale; in check_info_data()
1452 if (alias->snapshot) in check_info_data()
1453 info->snapshot = alias->snapshot; in check_info_data()
1465 struct parse_events_term *term, *h; in perf_pmu__check_alias() local
1469 info->per_pkg = false; in perf_pmu__check_alias()
1475 info->unit = NULL; in perf_pmu__check_alias()
1476 info->scale = 0.0; in perf_pmu__check_alias()
1477 info->snapshot = false; in perf_pmu__check_alias()
1478 info->metric_expr = NULL; in perf_pmu__check_alias()
1479 info->metric_name = NULL; in perf_pmu__check_alias()
1481 list_for_each_entry_safe(term, h, head_terms, list) { in perf_pmu__check_alias()
1482 alias = pmu_find_alias(pmu, term); in perf_pmu__check_alias()
1485 ret = pmu_alias_terms(alias, &term->list); in perf_pmu__check_alias()
1493 if (alias->per_pkg) in perf_pmu__check_alias()
1494 info->per_pkg = true; in perf_pmu__check_alias()
1495 info->metric_expr = alias->metric_expr; in perf_pmu__check_alias()
1496 info->metric_name = alias->metric_name; in perf_pmu__check_alias()
1498 list_del_init(&term->list); in perf_pmu__check_alias()
1499 parse_events_term__delete(term); in perf_pmu__check_alias()
1507 if (info->unit == NULL) in perf_pmu__check_alias()
1508 info->unit = ""; in perf_pmu__check_alias()
1510 if (info->scale == 0.0) in perf_pmu__check_alias()
1511 info->scale = 1.0; in perf_pmu__check_alias()
1517 int config, unsigned long *bits) in perf_pmu__new_format()
1523 return -ENOMEM; in perf_pmu__new_format()
1525 format->name = strdup(name); in perf_pmu__new_format()
1526 format->value = config; in perf_pmu__new_format()
1527 memcpy(format->bits, bits, sizeof(format->bits)); in perf_pmu__new_format()
1529 list_add_tail(&format->list, list); in perf_pmu__new_format()
1533 void perf_pmu__set_format(unsigned long *bits, long from, long to) in perf_pmu__set_format()
1535 long b; in perf_pmu__set_format()
1550 list_del(&fmt->list); in perf_pmu__del_formats()
1551 free(fmt->name); in perf_pmu__del_formats()
1560 return a - b; in sub_non_neg()
1566 struct parse_events_term *term; in format_alias() local
1567 int used = snprintf(buf, len, "%s/%s", pmu->name, alias->name); in format_alias()
1569 list_for_each_entry(term, &alias->terms, list) { in format_alias()
1570 if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) in format_alias()
1572 ",%s=%s", term->config, in format_alias()
1573 term->val.str); in format_alias()
1584 buf[len - 1] = '\0'; in format_alias()
1592 snprintf(buf, len, "%s OR %s/%s/", alias->name, pmu->name, alias->name); in format_alias_or()
1613 if (!!as->desc != !!bs->desc) in cmp_sevent()
1614 return !!as->desc - !!bs->desc; in cmp_sevent()
1615 if (as->topic && bs->topic) { in cmp_sevent()
1616 int n = strcmp(as->topic, bs->topic); in cmp_sevent()
1623 if (as->is_cpu != bs->is_cpu) in cmp_sevent()
1624 return bs->is_cpu - as->is_cpu; in cmp_sevent()
1626 return strcmp(as->name, bs->name); in cmp_sevent()
1671 list_for_each_entry(alias, &pmu->aliases, list) in print_pmu_events()
1673 if (pmu->selectable) in print_pmu_events()
1682 list_for_each_entry(alias, &pmu->aliases, list) { in print_pmu_events()
1683 char *name = alias->desc ? alias->name : in print_pmu_events()
1685 bool is_cpu = is_pmu_core(pmu->name); in print_pmu_events()
1687 if (alias->deprecated && !deprecated) in print_pmu_events()
1692 (!is_cpu && strglobmatch_nocase(alias->name, in print_pmu_events()
1694 (alias->topic && in print_pmu_events()
1695 strglobmatch_nocase(alias->topic, event_glob)))) in print_pmu_events()
1698 if (is_cpu && !name_only && !alias->desc) in print_pmu_events()
1702 if (is_cpu && !name_only && !alias->desc) in print_pmu_events()
1710 aliases[j].desc = long_desc ? alias->long_desc : in print_pmu_events()
1711 alias->desc; in print_pmu_events()
1712 aliases[j].topic = alias->topic; in print_pmu_events()
1713 aliases[j].str = alias->str; in print_pmu_events()
1714 aliases[j].pmu = pmu->name; in print_pmu_events()
1715 aliases[j].metric_expr = alias->metric_expr; in print_pmu_events()
1716 aliases[j].metric_name = alias->metric_name; in print_pmu_events()
1720 if (pmu->selectable && in print_pmu_events()
1721 (event_glob == NULL || strglobmatch(pmu->name, event_glob))) { in print_pmu_events()
1723 if (asprintf(&s, "%s//", pmu->name) < 0) in print_pmu_events()
1733 if (j > 0 && !strcmp(aliases[j].name, aliases[j - 1].name)) in print_pmu_events()
1748 printf(" %-50s\n", aliases[j].name); in print_pmu_events()
1761 printf(" %-50s [Kernel PMU event]\n", aliases[j].name); in print_pmu_events()
1785 if (strcmp(pname, pmu->name)) in pmu_have_event()
1787 list_for_each_entry(alias, &pmu->aliases, list) in pmu_have_event()
1788 if (!strcmp(alias->name, name)) in pmu_have_event()
1804 "%s" EVENT_SOURCE_DEVICE_PATH "%s/%s", sysfs, pmu->name, name); in perf_pmu__open_file()
1832 return -ENOMEM; in perf_pmu__new_caps()
1834 caps->name = strdup(name); in perf_pmu__new_caps()
1835 if (!caps->name) in perf_pmu__new_caps()
1837 caps->value = strndup(value, strlen(value) - 1); in perf_pmu__new_caps()
1838 if (!caps->value) in perf_pmu__new_caps()
1840 list_add_tail(&caps->list, list); in perf_pmu__new_caps()
1844 zfree(caps->name); in perf_pmu__new_caps()
1848 return -ENOMEM; in perf_pmu__new_caps()
1866 return -1; in perf_pmu__caps_parse()
1869 "%s" EVENT_SOURCE_DEVICE_PATH "%s/caps", sysfs, pmu->name); in perf_pmu__caps_parse()
1876 return -EINVAL; in perf_pmu__caps_parse()
1880 char *name = evt_ent->d_name; in perf_pmu__caps_parse()
1894 (perf_pmu__new_caps(&pmu->caps, name, value) < 0)) { in perf_pmu__caps_parse()
1916 list_for_each_entry(format, &pmu->format, list) { in perf_pmu__warn_invalid_config()
1917 if (format->value != PERF_PMU_FORMAT_VALUE_CONFIG) in perf_pmu__warn_invalid_config()
1920 for_each_set_bit(i, format->bits, PERF_PMU_FORMAT_BITS) in perf_pmu__warn_invalid_config()
1934 bitmap_scnprintf((unsigned long *)&bits, sizeof(bits) * 8, buf, sizeof(buf)); in perf_pmu__warn_invalid_config()
1954 return -1; in perf_pmu__match()
1957 return -1; in perf_pmu__match()
1960 return -1; in perf_pmu__match()
1969 struct perf_cpu_map *pmu_cpus = pmu->cpus; in perf_pmu__cpus_match()
1975 return -1; in perf_pmu__cpus_match()
1980 return -1; in perf_pmu__cpus_match()
1983 for (int i = 0; i < cpus->nr; i++) { in perf_pmu__cpus_match()
1986 cpu = perf_cpu_map__idx(pmu_cpus, cpus->map[i]); in perf_pmu__cpus_match()
1987 if (cpu == -1) in perf_pmu__cpus_match()
1988 unmatched_cpus->map[unmatched_nr++] = cpus->map[i]; in perf_pmu__cpus_match()
1990 matched_cpus->map[matched_nr++] = cpus->map[i]; in perf_pmu__cpus_match()
1993 unmatched_cpus->nr = unmatched_nr; in perf_pmu__cpus_match()
1994 matched_cpus->nr = matched_nr; in perf_pmu__cpus_match()