Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

Need help to get security updates for your Linux BSP?
Loading...
Note: File does not exist in v3.15.
 1// SPDX-License-Identifier: GPL-2.0
 2#include <stdio.h>
 3#include "pmu.h"
 4#include "pmu-hybrid.h"
 5#include "topdown.h"
 6
 7int 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}
63
64__weak bool arch_topdown_sample_read(struct evsel *leader __maybe_unused)
65{
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";
74}