1 // SPDX-License-Identifier: GPL-2.0 1 // SPDX-License-Identifier: GPL-2.0 >> 2 #include <stdio.h> >> 3 #include "pmu.h" >> 4 #include "pmu-hybrid.h" 2 #include "topdown.h" 5 #include "topdown.h" 3 #include <linux/kernel.h> !! 6 >> 7 int topdown_filter_events(const char **attr, char **str, bool use_group, >> 8 const char *pmu_name) >> 9 { >> 10 int off = 0; >> 11 int i; >> 12 int len = 0; >> 13 char *s; >> 14 bool is_hybrid = perf_pmu__is_hybrid(pmu_name); >> 15 >> 16 for (i = 0; attr[i]; i++) { >> 17 if (pmu_have_event(pmu_name, attr[i])) { >> 18 if (is_hybrid) >> 19 len += strlen(attr[i]) + strlen(pmu_name) + 3; >> 20 else >> 21 len += strlen(attr[i]) + 1; >> 22 attr[i - off] = attr[i]; >> 23 } else >> 24 off++; >> 25 } >> 26 attr[i - off] = NULL; >> 27 >> 28 *str = malloc(len + 1 + 2); >> 29 if (!*str) >> 30 return -1; >> 31 s = *str; >> 32 if (i - off == 0) { >> 33 *s = 0; >> 34 return 0; >> 35 } >> 36 if (use_group) >> 37 *s++ = '{'; >> 38 for (i = 0; attr[i]; i++) { >> 39 if (!is_hybrid) >> 40 strcpy(s, attr[i]); >> 41 else >> 42 sprintf(s, "%s/%s/", pmu_name, attr[i]); >> 43 s += strlen(s); >> 44 *s++ = ','; >> 45 } >> 46 if (use_group) { >> 47 s[-1] = '}'; >> 48 *s = 0; >> 49 } else >> 50 s[-1] = 0; >> 51 return 0; >> 52 } >> 53 >> 54 __weak bool arch_topdown_check_group(bool *warn) >> 55 { >> 56 *warn = false; >> 57 return false; >> 58 } >> 59 >> 60 __weak void arch_topdown_group_warn(void) >> 61 { >> 62 } 4 63 5 __weak bool arch_topdown_sample_read(struct ev 64 __weak bool arch_topdown_sample_read(struct evsel *leader __maybe_unused) 6 { 65 { 7 return false; 66 return false; >> 67 } >> 68 >> 69 __weak const char *arch_get_topdown_pmu_name(struct evlist *evlist >> 70 __maybe_unused, >> 71 bool warn __maybe_unused) >> 72 { >> 73 return "cpu"; 8 } 74 } 9 75
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.