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 } 59