Lines Matching full:pmu

22 #include "pmu.h"
82 * Reading/parsing the default pmu format definition, which should be
342 * event=0x0091 (read from files ../<PMU>/events/<FILE> in __perf_pmu__new_alias()
475 * Reading the pmu event aliases definition, which should be located at:
523 * Reading/parsing the default pmu type value, which should be
554 /* Add all pmus in sysfs to pmu list: */
639 * PMU CORE devices have different name other than cpu in sysfs on some
657 static char *perf_pmu__getcpuid(struct perf_pmu *pmu) in perf_pmu__getcpuid() argument
666 cpuid = get_cpuid_str(pmu); in perf_pmu__getcpuid()
677 struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu) in perf_pmu__find_map() argument
680 char *cpuid = perf_pmu__getcpuid(pmu); in perf_pmu__find_map()
714 * uncore alias may be from different PMU with common prefix in pmu_uncore_alias_match()
724 * list of tokens, orderly contained in the matching PMU name. in pmu_uncore_alias_match()
726 * Example: For alias "socket,pmuname" and PMU "socketX_pmunameY", we in pmu_uncore_alias_match()
745 * From the pmu_events_map, find the table of PMU events that corresponds
746 * to the current running CPU. Then, add all PMU events from that table
749 void pmu_add_cpu_aliases_map(struct list_head *head, struct perf_pmu *pmu, in pmu_add_cpu_aliases_map() argument
753 const char *name = pmu->name; in pmu_add_cpu_aliases_map()
755 * Found a matching PMU events table. Create aliases in pmu_add_cpu_aliases_map()
761 const char *pname = pe->pmu ? pe->pmu : cpu_name; in pmu_add_cpu_aliases_map()
788 static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu) in pmu_add_cpu_aliases() argument
792 map = perf_pmu__find_map(pmu); in pmu_add_cpu_aliases()
796 pmu_add_cpu_aliases_map(head, pmu, map); in pmu_add_cpu_aliases()
800 perf_pmu__get_default_config(struct perf_pmu *pmu __maybe_unused) in perf_pmu__get_default_config()
820 struct perf_pmu *pmu; in pmu_lookup() local
826 * The pmu data we store & need consists of the pmu in pmu_lookup()
842 pmu = zalloc(sizeof(*pmu)); in pmu_lookup()
843 if (!pmu) in pmu_lookup()
846 pmu->cpus = pmu_cpumask(name); in pmu_lookup()
847 pmu->name = strdup(name); in pmu_lookup()
848 pmu->type = type; in pmu_lookup()
849 pmu->is_uncore = pmu_is_uncore(name); in pmu_lookup()
850 pmu->max_precise = pmu_max_precise(name); in pmu_lookup()
851 pmu_add_cpu_aliases(&aliases, pmu); in pmu_lookup()
853 INIT_LIST_HEAD(&pmu->format); in pmu_lookup()
854 INIT_LIST_HEAD(&pmu->aliases); in pmu_lookup()
855 INIT_LIST_HEAD(&pmu->caps); in pmu_lookup()
856 list_splice(&format, &pmu->format); in pmu_lookup()
857 list_splice(&aliases, &pmu->aliases); in pmu_lookup()
858 list_add_tail(&pmu->list, &pmus); in pmu_lookup()
860 pmu->default_config = perf_pmu__get_default_config(pmu); in pmu_lookup()
862 return pmu; in pmu_lookup()
865 void perf_pmu__warn_invalid_formats(struct perf_pmu *pmu) in perf_pmu__warn_invalid_formats() argument
869 /* fake pmu doesn't have format list */ in perf_pmu__warn_invalid_formats()
870 if (pmu == &perf_pmu__fake) in perf_pmu__warn_invalid_formats()
873 list_for_each_entry(format, &pmu->format, list) in perf_pmu__warn_invalid_formats()
877 pmu->name, format->name, format->value); in perf_pmu__warn_invalid_formats()
884 struct perf_pmu *pmu; in pmu_find() local
886 list_for_each_entry(pmu, &pmus, list) in pmu_find()
887 if (!strcmp(pmu->name, name)) in pmu_find()
888 return pmu; in pmu_find()
895 struct perf_pmu *pmu; in perf_pmu__find_by_type() local
897 list_for_each_entry(pmu, &pmus, list) in perf_pmu__find_by_type()
898 if (pmu->type == type) in perf_pmu__find_by_type()
899 return pmu; in perf_pmu__find_by_type()
904 struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu) in perf_pmu__scan() argument
907 * pmu iterator: If pmu is NULL, we start at the begin, in perf_pmu__scan()
908 * otherwise return the next pmu. Returns NULL on end. in perf_pmu__scan()
910 if (!pmu) { in perf_pmu__scan()
912 pmu = list_prepare_entry(pmu, &pmus, list); in perf_pmu__scan()
914 list_for_each_entry_continue(pmu, &pmus, list) in perf_pmu__scan()
915 return pmu; in perf_pmu__scan()
921 struct perf_pmu *pmu = NULL; in evsel__find_pmu() local
923 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in evsel__find_pmu()
924 if (pmu->type == evsel->core.attr.type) in evsel__find_pmu()
928 return pmu; in evsel__find_pmu()
933 struct perf_pmu *pmu = evsel__find_pmu(evsel); in evsel__is_aux_event() local
935 return pmu && pmu->auxtrace; in evsel__is_aux_event()
940 struct perf_pmu *pmu; in perf_pmu__find() local
943 * Once PMU is loaded it stays in the list, in perf_pmu__find()
945 * the pmu format definitions. in perf_pmu__find()
947 pmu = pmu_find(name); in perf_pmu__find()
948 if (pmu) in perf_pmu__find()
949 return pmu; in perf_pmu__find()
1110 "unknown term '%s' for pmu '%s'", in pmu_config_term()
1218 * 2) pmu format definitions - specified by pmu parameter
1220 int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr, in perf_pmu__config() argument
1224 bool zero = !!pmu->default_config; in perf_pmu__config()
1226 attr->type = pmu->type; in perf_pmu__config()
1227 return perf_pmu__config_terms(pmu->name, &pmu->format, attr, in perf_pmu__config()
1231 static struct perf_pmu_alias *pmu_find_alias(struct perf_pmu *pmu, in pmu_find_alias() argument
1243 if (pmu_find_format(&pmu->format, term->config)) in pmu_find_alias()
1254 list_for_each_entry(alias, &pmu->aliases, list) { in pmu_find_alias()
1291 int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms, in perf_pmu__check_alias() argument
1311 alias = pmu_find_alias(pmu, term); in perf_pmu__check_alias()
1392 static char *format_alias(char *buf, int len, struct perf_pmu *pmu, in format_alias() argument
1396 int used = snprintf(buf, len, "%s/%s", pmu->name, alias->name); in format_alias()
1418 static char *format_alias_or(char *buf, int len, struct perf_pmu *pmu, in format_alias_or() argument
1421 snprintf(buf, len, "%s OR %s/%s/", alias->name, pmu->name, alias->name); in format_alias_or()
1430 char *pmu; member
1487 struct perf_pmu *pmu; in print_pmu_events() local
1497 pmu = NULL; in print_pmu_events()
1499 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in print_pmu_events()
1500 list_for_each_entry(alias, &pmu->aliases, list) in print_pmu_events()
1502 if (pmu->selectable) in print_pmu_events()
1508 pmu = NULL; in print_pmu_events()
1510 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in print_pmu_events()
1511 list_for_each_entry(alias, &pmu->aliases, list) { in print_pmu_events()
1513 format_alias(buf, sizeof(buf), pmu, alias); in print_pmu_events()
1514 bool is_cpu = is_pmu_core(pmu->name); in print_pmu_events()
1528 name = format_alias_or(buf, sizeof(buf), pmu, alias); in print_pmu_events()
1534 pmu, alias); in print_pmu_events()
1543 aliases[j].pmu = pmu->name; in print_pmu_events()
1549 if (pmu->selectable && in print_pmu_events()
1550 (event_glob == NULL || strglobmatch(pmu->name, event_glob))) { in print_pmu_events()
1552 if (asprintf(&s, "%s//", pmu->name) < 0) in print_pmu_events()
1582 printf("%*s%s/%s/ ", 8, "", aliases[j].pmu, aliases[j].str); in print_pmu_events()
1590 printf(" %-50s [Kernel PMU event]\n", aliases[j].name); in print_pmu_events()
1602 printf("FATAL: not enough memory to print PMU events\n"); in print_pmu_events()
1609 struct perf_pmu *pmu; in pmu_have_event() local
1612 pmu = NULL; in pmu_have_event()
1613 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in pmu_have_event()
1614 if (strcmp(pname, pmu->name)) in pmu_have_event()
1616 list_for_each_entry(alias, &pmu->aliases, list) in pmu_have_event()
1623 static FILE *perf_pmu__open_file(struct perf_pmu *pmu, const char *name) in perf_pmu__open_file() argument
1633 "%s" EVENT_SOURCE_DEVICE_PATH "%s/%s", sysfs, pmu->name, name); in perf_pmu__open_file()
1639 int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt, in perf_pmu__scan_file() argument
1647 file = perf_pmu__open_file(pmu, name); in perf_pmu__scan_file()
1681 * Reading/parsing the given pmu capabilities, which should be located at:
1685 int perf_pmu__caps_parse(struct perf_pmu *pmu) in perf_pmu__caps_parse() argument
1698 "%s" EVENT_SOURCE_DEVICE_PATH "%s/caps", sysfs, pmu->name); in perf_pmu__caps_parse()
1723 (perf_pmu__new_caps(&pmu->caps, name, value) < 0)) { in perf_pmu__caps_parse()
1737 void perf_pmu__warn_invalid_config(struct perf_pmu *pmu, __u64 config, in perf_pmu__warn_invalid_config() argument
1745 list_for_each_entry(format, &pmu->format, list) { in perf_pmu__warn_invalid_config()