Lines Matching refs:term
10 #include "term.h"
158 struct parse_events_term *term;
163 list_for_each_entry(term, head_terms, list)
164 if (term->type_term == type_term)
165 return term->val.str;
181 * fix_raw - For each raw term see if there is an event (aka alias) in pmu that
183 * event then change the term to be an event, if not then change it to
184 * be a config term. For example, "read" may be an event of the PMU or
188 * @config_terms: the list of terms that may contain a raw term.
193 struct parse_events_term *term;
195 list_for_each_entry(term, config_terms, list) {
198 if (term->type_term != PARSE_EVENTS__TERM_TYPE_RAW)
201 if (perf_pmu__have_event(pmu, term->val.str)) {
202 zfree(&term->config);
203 term->config = term->val.str;
204 term->type_val = PARSE_EVENTS__TERM_TYPE_NUM;
205 term->type_term = PARSE_EVENTS__TERM_TYPE_USER;
206 term->val.num = 1;
207 term->no_value = true;
211 zfree(&term->config);
212 term->config = strdup("config");
214 num = strtoull(term->val.str + 1, NULL, 16);
216 free(term->val.str);
217 term->type_val = PARSE_EVENTS__TERM_TYPE_NUM;
218 term->type_term = PARSE_EVENTS__TERM_TYPE_CONFIG;
219 term->val.num = num;
220 term->no_value = false;
353 struct parse_events_term *term,
356 struct parse_events_term *term,
723 static int check_type_val(struct parse_events_term *term,
727 if (type == term->type_val)
731 parse_events_error__handle(err, term->err_val,
748 [PARSE_EVENTS__TERM_TYPE_USER] = "<sysfs term>",
776 return "unknown term";
840 struct parse_events_term *term,
845 if (check_type_val(term, err, PARSE_EVENTS__TERM_TYPE_ ## type)) \
849 switch (term->type_term) {
852 attr->config = term->val.num;
856 attr->config1 = term->val.num;
860 attr->config2 = term->val.num;
864 attr->config3 = term->val.num;
874 if (strcmp(term->val.str, "no") &&
875 parse_branch_str(term->val.str,
877 parse_events_error__handle(err, term->err_val,
885 if (term->val.num > 1) {
886 parse_events_error__handle(err, term->err_val,
927 if ((unsigned int)term->val.num > 1) {
928 parse_events_error__handle(err, term->err_val,
939 if (term->val.num > UINT_MAX) {
940 parse_events_error__handle(err, term->err_val,
951 parse_events_error__handle(err, term->err_term,
952 strdup(config_term_name(term->type_term)),
958 * Check term availability after basic checking so
962 * user will see "'<sysfs term>' is not usable in 'perf stat'"
963 * if an invalid config term is provided for legacy events
966 if (!config_term_avail(term->type_term, err))
973 struct parse_events_term *term,
976 if (term->type_term == PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE) {
983 parse_events_error__handle(err, term->err_term,
989 return parse_events__decode_legacy_cache(term->config, pmu->type,
992 term->type_term = PARSE_EVENTS__TERM_TYPE_USER;
994 if (term->type_term == PARSE_EVENTS__TERM_TYPE_HARDWARE) {
1001 parse_events_error__handle(err, term->err_term,
1006 attr->config = term->val.num;
1011 if (term->type_term == PARSE_EVENTS__TERM_TYPE_USER ||
1012 term->type_term == PARSE_EVENTS__TERM_TYPE_DRV_CFG) {
1019 return config_term_common(attr, term, err);
1024 struct parse_events_term *term,
1027 switch (term->type_term) {
1038 return config_term_common(attr, term, err);
1057 parse_events_error__handle(err, term->err_term,
1058 strdup(config_term_name(term->type_term)),
1073 struct parse_events_term *term;
1075 list_for_each_entry(term, head, list)
1076 if (config_term(attr, term, err))
1114 struct parse_events_term *term;
1116 list_for_each_entry(term, head_config, list) {
1117 switch (term->type_term) {
1119 ADD_CONFIG_TERM_VAL(PERIOD, period, term->val.num, term->weak);
1122 ADD_CONFIG_TERM_VAL(FREQ, freq, term->val.num, term->weak);
1125 ADD_CONFIG_TERM_VAL(TIME, time, term->val.num, term->weak);
1128 ADD_CONFIG_TERM_STR(CALLGRAPH, term->val.str, term->weak);
1131 ADD_CONFIG_TERM_STR(BRANCH, term->val.str, term->weak);
1135 term->val.num, term->weak);
1139 term->val.num ? 1 : 0, term->weak);
1143 term->val.num ? 0 : 1, term->weak);
1147 term->val.num, term->weak);
1151 term->val.num, term->weak);
1155 term->val.num ? 1 : 0, term->weak);
1159 term->val.num ? 0 : 1, term->weak);
1162 ADD_CONFIG_TERM_STR(DRV_CFG, term->val.str, term->weak);
1166 term->val.num ? true : false, term->weak);
1170 term->val.num ? 1 : 0, term->weak);
1174 term->val.num, term->weak);
1200 struct parse_events_term *term;
1204 list_for_each_entry(term, head_config, list) {
1205 switch (term->type_term) {
1207 type = perf_pmu__format_type(pmu, term->config);
1210 bits |= perf_pmu__format_bits(pmu, term->config);
1360 struct evsel_config_term *term;
1362 list_for_each_entry(term, config_terms, list) {
1363 if (term->type == EVSEL__CONFIG_TERM_PERCORE)
1364 return term->val.percore;
1490 struct parse_events_term *term;
1511 if (parse_events_term__num(&term,
1518 list_add_tail(&term->list, head);
2432 int parse_events__is_hardcoded_term(struct parse_events_term *term)
2434 return term->type_term != PARSE_EVENTS__TERM_TYPE_USER;
2441 struct parse_events_term *term;
2443 term = malloc(sizeof(*term));
2444 if (!term)
2447 *term = *temp;
2448 INIT_LIST_HEAD(&term->list);
2449 term->weak = false;
2451 switch (term->type_val) {
2453 term->val.num = num;
2456 term->val.str = str;
2459 free(term);
2463 *_term = term;
2467 int parse_events_term__num(struct parse_events_term **term,
2485 return new_term(term, &temp, /*str=*/NULL, num);
2488 int parse_events_term__str(struct parse_events_term **term,
2504 return new_term(term, &temp, str, /*num=*/0);
2507 int parse_events_term__term(struct parse_events_term **term,
2512 return parse_events_term__str(term, term_lhs, NULL,
2518 struct parse_events_term *term)
2521 struct parse_events_term temp = *term;
2524 if (term->config) {
2525 temp.config = strdup(term->config);
2529 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM)
2530 return new_term(new, &temp, /*str=*/NULL, term->val.num);
2532 str = strdup(term->val.str);
2538 void parse_events_term__delete(struct parse_events_term *term)
2540 if (term->type_val != PARSE_EVENTS__TERM_TYPE_NUM)
2541 zfree(&term->val.str);
2543 zfree(&term->config);
2544 free(term);
2550 struct parse_events_term *term, *n;
2563 list_for_each_entry (term, old, list) {
2564 ret = parse_events_term__clone(&n, term);
2574 struct parse_events_term *term, *h;
2576 list_for_each_entry_safe(term, h, terms, list) {
2577 list_del_init(&term->list);
2578 parse_events_term__delete(term);
2592 struct parse_events_term *term;
2598 list_for_each_entry(term, term_list, list) {
2608 if (term->type_val == PARSE_EVENTS__TERM_TYPE_NUM)
2609 if (term->no_value) {
2610 assert(term->val.num == 1);
2611 ret = strbuf_addf(sb, "%s", term->config);
2613 ret = strbuf_addf(sb, "%s=%#"PRIx64, term->config, term->val.num);
2614 else if (term->type_val == PARSE_EVENTS__TERM_TYPE_STR) {
2615 if (term->config) {
2616 ret = strbuf_addf(sb, "%s=", term->config);
2619 } else if ((unsigned int)term->type_term < __PARSE_EVENTS__TERM_TYPE_NR) {
2620 ret = strbuf_addf(sb, "%s=", config_term_name(term->type_term));
2624 assert(!term->no_value);
2625 ret = strbuf_addf(sb, "%s", term->val.str);