parse-events.c (411ad22ecf0281d666a82aa7f4de90c70365da7d) | parse-events.c (5ea8f2ccffb23983f02012a2731464586b10fbf3) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/hw_breakpoint.h> 3#include <linux/err.h> 4#include <linux/list_sort.h> 5#include <linux/zalloc.h> 6#include <dirent.h> 7#include <errno.h> 8#include <sys/ioctl.h> --- 1038 unchanged lines hidden (view full) --- 1047 [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE] = "no-overwrite", 1048 [PARSE_EVENTS__TERM_TYPE_DRV_CFG] = "driver-config", 1049 [PARSE_EVENTS__TERM_TYPE_PERCORE] = "percore", 1050 [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT] = "aux-output", 1051 [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE] = "aux-sample-size", 1052 [PARSE_EVENTS__TERM_TYPE_METRIC_ID] = "metric-id", 1053 [PARSE_EVENTS__TERM_TYPE_RAW] = "raw", 1054 [PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE] = "legacy-cache", | 1// SPDX-License-Identifier: GPL-2.0 2#include <linux/hw_breakpoint.h> 3#include <linux/err.h> 4#include <linux/list_sort.h> 5#include <linux/zalloc.h> 6#include <dirent.h> 7#include <errno.h> 8#include <sys/ioctl.h> --- 1038 unchanged lines hidden (view full) --- 1047 [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE] = "no-overwrite", 1048 [PARSE_EVENTS__TERM_TYPE_DRV_CFG] = "driver-config", 1049 [PARSE_EVENTS__TERM_TYPE_PERCORE] = "percore", 1050 [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT] = "aux-output", 1051 [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE] = "aux-sample-size", 1052 [PARSE_EVENTS__TERM_TYPE_METRIC_ID] = "metric-id", 1053 [PARSE_EVENTS__TERM_TYPE_RAW] = "raw", 1054 [PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE] = "legacy-cache", |
1055 [PARSE_EVENTS__TERM_TYPE_HARDWARE] = "hardware", |
|
1055}; 1056 1057static bool config_term_shrinked; 1058 1059static bool 1060config_term_avail(int term_type, struct parse_events_error *err) 1061{ 1062 char *err_str; --- 171 unchanged lines hidden (view full) --- 1234 1235 if (perf_pmu__supports_legacy_cache(pmu)) { 1236 attr->type = PERF_TYPE_HW_CACHE; 1237 return parse_events__decode_legacy_cache(term->config, pmu->type, 1238 &attr->config); 1239 } else 1240 term->type_term = PARSE_EVENTS__TERM_TYPE_USER; 1241 } | 1056}; 1057 1058static bool config_term_shrinked; 1059 1060static bool 1061config_term_avail(int term_type, struct parse_events_error *err) 1062{ 1063 char *err_str; --- 171 unchanged lines hidden (view full) --- 1235 1236 if (perf_pmu__supports_legacy_cache(pmu)) { 1237 attr->type = PERF_TYPE_HW_CACHE; 1238 return parse_events__decode_legacy_cache(term->config, pmu->type, 1239 &attr->config); 1240 } else 1241 term->type_term = PARSE_EVENTS__TERM_TYPE_USER; 1242 } |
1243 if (term->type_term == PARSE_EVENTS__TERM_TYPE_HARDWARE) { 1244 const struct perf_pmu *pmu = perf_pmu__find_by_type(attr->type); 1245 1246 if (!pmu) { 1247 pr_debug("Failed to find PMU for type %d", attr->type); 1248 return -EINVAL; 1249 } 1250 attr->type = PERF_TYPE_HARDWARE; 1251 attr->config = ((__u64)pmu->type << PERF_PMU_TYPE_SHIFT) | term->val.num; 1252 return 0; 1253 } |
|
1242 if (term->type_term == PARSE_EVENTS__TERM_TYPE_USER || 1243 term->type_term == PARSE_EVENTS__TERM_TYPE_DRV_CFG) { 1244 /* 1245 * Always succeed for sysfs terms, as we dont know 1246 * at this point what type they need to have. 1247 */ 1248 return 0; 1249 } --- 1314 unchanged lines hidden (view full) --- 2564 .config = config, 2565 .err_term = loc_term ? loc_term->first_column : 0, 2566 .err_val = loc_val ? loc_val->first_column : 0, 2567 }; 2568 2569 return new_term(term, &temp, str, 0); 2570} 2571 | 1254 if (term->type_term == PARSE_EVENTS__TERM_TYPE_USER || 1255 term->type_term == PARSE_EVENTS__TERM_TYPE_DRV_CFG) { 1256 /* 1257 * Always succeed for sysfs terms, as we dont know 1258 * at this point what type they need to have. 1259 */ 1260 return 0; 1261 } --- 1314 unchanged lines hidden (view full) --- 2576 .config = config, 2577 .err_term = loc_term ? loc_term->first_column : 0, 2578 .err_val = loc_val ? loc_val->first_column : 0, 2579 }; 2580 2581 return new_term(term, &temp, str, 0); 2582} 2583 |
2572int parse_events_term__sym_hw(struct parse_events_term **term, 2573 char *config, unsigned idx) 2574{ 2575 struct event_symbol *sym; 2576 char *str; 2577 struct parse_events_term temp = { 2578 .type_val = PARSE_EVENTS__TERM_TYPE_STR, 2579 .type_term = PARSE_EVENTS__TERM_TYPE_USER, 2580 .config = config, 2581 }; 2582 2583 if (!temp.config) { 2584 temp.config = strdup("event"); 2585 if (!temp.config) 2586 return -ENOMEM; 2587 } 2588 BUG_ON(idx >= PERF_COUNT_HW_MAX); 2589 sym = &event_symbols_hw[idx]; 2590 2591 str = strdup(sym->symbol); 2592 if (!str) 2593 return -ENOMEM; 2594 return new_term(term, &temp, str, 0); 2595} 2596 | |
2597int parse_events_term__clone(struct parse_events_term **new, 2598 struct parse_events_term *term) 2599{ 2600 char *str; 2601 struct parse_events_term temp = { 2602 .type_val = term->type_val, 2603 .type_term = term->type_term, 2604 .config = NULL, --- 140 unchanged lines hidden --- | 2584int parse_events_term__clone(struct parse_events_term **new, 2585 struct parse_events_term *term) 2586{ 2587 char *str; 2588 struct parse_events_term temp = { 2589 .type_val = term->type_val, 2590 .type_term = term->type_term, 2591 .config = NULL, --- 140 unchanged lines hidden --- |