1// SPDX-License-Identifier: GPL-2.0 2#include <stdio.h> 3#include "pmu.h" 4#include "topdown.h" 5 6int 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} 59