Merge tag 'memory-controller-drv-tegra-5.14-3' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / tools / perf / util / topdown.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include <stdio.h>
3 #include "pmu.h"
4 #include "topdown.h"
5
6 int topdown_filter_events(const char **attr, char **str, bool use_group)
7 {
8         int off = 0;
9         int i;
10         int len = 0;
11         char *s;
12
13         for (i = 0; attr[i]; i++) {
14                 if (pmu_have_event("cpu", attr[i])) {
15                         len += strlen(attr[i]) + 1;
16                         attr[i - off] = attr[i];
17                 } else
18                         off++;
19         }
20         attr[i - off] = NULL;
21
22         *str = malloc(len + 1 + 2);
23         if (!*str)
24                 return -1;
25         s = *str;
26         if (i - off == 0) {
27                 *s = 0;
28                 return 0;
29         }
30         if (use_group)
31                 *s++ = '{';
32         for (i = 0; attr[i]; i++) {
33                 strcpy(s, attr[i]);
34                 s += strlen(s);
35                 *s++ = ',';
36         }
37         if (use_group) {
38                 s[-1] = '}';
39                 *s = 0;
40         } else
41                 s[-1] = 0;
42         return 0;
43 }
44
45 __weak bool arch_topdown_check_group(bool *warn)
46 {
47         *warn = false;
48         return false;
49 }
50
51 __weak void arch_topdown_group_warn(void)
52 {
53 }
54
55 __weak bool arch_topdown_sample_read(struct evsel *leader __maybe_unused)
56 {
57         return false;
58 }