Lines Matching refs:hist_field
81 struct hist_field;
83 typedef u64 (*hist_field_fn_t) (struct hist_field *field,
116 struct hist_field { struct
126 struct hist_field *operands[HIST_FIELD_OPERANDS_MAX]; argument
157 static u64 hist_field_none(struct hist_field *field, in hist_field_none() argument
166 static u64 hist_field_counter(struct hist_field *field, in hist_field_counter()
175 static u64 hist_field_string(struct hist_field *hist_field, in hist_field_string() argument
181 char *addr = (char *)(event + hist_field->field->offset); in hist_field_string()
186 static u64 hist_field_dynstring(struct hist_field *hist_field, in hist_field_dynstring() argument
192 u32 str_item = *(u32 *)(event + hist_field->field->offset); in hist_field_dynstring()
199 static u64 hist_field_pstring(struct hist_field *hist_field, in hist_field_pstring() argument
205 char **addr = (char **)(event + hist_field->field->offset); in hist_field_pstring()
210 static u64 hist_field_log2(struct hist_field *hist_field, in hist_field_log2() argument
216 struct hist_field *operand = hist_field->operands[0]; in hist_field_log2()
223 static u64 hist_field_bucket(struct hist_field *hist_field, in hist_field_bucket() argument
229 struct hist_field *operand = hist_field->operands[0]; in hist_field_bucket()
230 unsigned long buckets = hist_field->buckets; in hist_field_bucket()
244 static u64 hist_field_plus(struct hist_field *hist_field, in hist_field_plus() argument
250 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_plus()
251 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_plus()
259 static u64 hist_field_minus(struct hist_field *hist_field, in hist_field_minus() argument
265 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_minus()
266 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_minus()
274 static u64 hist_field_unary_minus(struct hist_field *hist_field, in hist_field_unary_minus() argument
280 struct hist_field *operand = hist_field->operands[0]; in hist_field_unary_minus()
289 static u64 hist_field_##type(struct hist_field *hist_field, \
295 type *addr = (type *)(event + hist_field->field->offset); \
374 struct hist_field *var;
375 struct hist_field *val;
384 struct hist_field *fields[HIST_FIELDS_MAX];
398 struct hist_field *var_refs[TRACING_MAP_VARS_MAX];
481 struct hist_field *var_ref;
488 struct hist_field *track_var;
663 static u64 hist_field_timestamp(struct hist_field *hist_field, in hist_field_timestamp() argument
669 struct hist_trigger_data *hist_data = hist_field->hist_data; in hist_field_timestamp()
680 static u64 hist_field_cpu(struct hist_field *hist_field, in hist_field_cpu() argument
702 static struct hist_field *
703 check_field_for_var_ref(struct hist_field *hist_field, in check_field_for_var_ref() argument
707 WARN_ON(!(hist_field && hist_field->flags & HIST_FIELD_FL_VAR_REF)); in check_field_for_var_ref()
709 if (hist_field && hist_field->var.idx == var_idx && in check_field_for_var_ref()
710 hist_field->var.hist_data == var_data) in check_field_for_var_ref()
711 return hist_field; in check_field_for_var_ref()
728 static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data, in find_var_ref()
732 struct hist_field *hist_field; in find_var_ref() local
736 hist_field = hist_data->var_refs[i]; in find_var_ref()
737 if (check_field_for_var_ref(hist_field, var_data, var_idx)) in find_var_ref()
738 return hist_field; in find_var_ref()
758 static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, in find_any_var_ref()
762 struct hist_field *found = NULL; in find_any_var_ref()
791 struct hist_field *field; in check_var_refs()
823 static bool field_has_hist_vars(struct hist_field *hist_field, in field_has_hist_vars() argument
831 if (!hist_field) in field_has_hist_vars()
834 if (hist_field->flags & HIST_FIELD_FL_VAR || in field_has_hist_vars()
835 hist_field->flags & HIST_FIELD_FL_VAR_REF) in field_has_hist_vars()
839 struct hist_field *operand; in field_has_hist_vars()
841 operand = hist_field->operands[i]; in field_has_hist_vars()
851 struct hist_field *hist_field; in has_hist_vars() local
855 hist_field = hist_data->fields[i]; in has_hist_vars()
856 if (field_has_hist_vars(hist_field, 0)) in has_hist_vars()
906 static struct hist_field *find_var_field(struct hist_trigger_data *hist_data, in find_var_field()
909 struct hist_field *hist_field, *found = NULL; in find_var_field() local
913 hist_field = hist_data->fields[i]; in find_var_field()
914 if (hist_field && hist_field->flags & HIST_FIELD_FL_VAR && in find_var_field()
915 strcmp(hist_field->var.name, var_name) == 0) { in find_var_field()
916 found = hist_field; in find_var_field()
924 static struct hist_field *find_var(struct hist_trigger_data *hist_data, in find_var()
930 struct hist_field *hist_field; in find_var() local
934 hist_field = find_var_field(hist_data, var_name); in find_var()
935 if (hist_field) in find_var()
936 return hist_field; in find_var()
941 hist_field = find_var_field(test_data, var_name); in find_var()
942 if (hist_field) in find_var()
943 return hist_field; in find_var()
981 static struct hist_field *find_file_var(struct trace_event_file *file, in find_file_var()
986 struct hist_field *hist_field; in find_file_var() local
993 hist_field = find_var_field(test_data, var_name); in find_file_var()
994 if (hist_field) in find_file_var()
995 return hist_field; in find_file_var()
1002 static struct hist_field *
1006 struct hist_field *hist_field, *found = NULL; in find_match_var() local
1020 hist_field = find_file_var(file, var_name); in find_match_var()
1021 if (hist_field) { in find_match_var()
1028 found = hist_field; in find_match_var()
1035 static struct hist_field *find_event_var(struct hist_trigger_data *hist_data, in find_event_var()
1041 struct hist_field *hist_field = NULL; in find_event_var() local
1045 hist_field = find_match_var(hist_data, var_name); in find_event_var()
1046 if (IS_ERR(hist_field)) in find_event_var()
1048 if (hist_field) in find_event_var()
1049 return hist_field; in find_event_var()
1056 hist_field = find_file_var(file, var_name); in find_event_var()
1058 return hist_field; in find_event_var()
1061 static u64 hist_field_var_ref(struct hist_field *hist_field, in hist_field_var_ref() argument
1074 var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; in hist_field_var_ref()
1084 struct hist_field *hist_field; in resolve_var_refs() local
1090 hist_field = hist_data->var_refs[i]; in resolve_var_refs()
1091 var_idx = hist_field->var.idx; in resolve_var_refs()
1092 var_data = hist_field->var.hist_data; in resolve_var_refs()
1114 if (self || !hist_field->read_once) in resolve_var_refs()
1125 static const char *hist_field_name(struct hist_field *field, in hist_field_name()
1426 struct hist_field *hist_field; in hist_trigger_elt_data_alloc() local
1434 hist_field = hist_data->fields[i]; in hist_trigger_elt_data_alloc()
1436 if (hist_field->flags & HIST_FIELD_FL_EXECNAME) { in hist_trigger_elt_data_alloc()
1491 static const char *get_hist_field_flags(struct hist_field *hist_field) in get_hist_field_flags() argument
1495 if (hist_field->flags & HIST_FIELD_FL_HEX) in get_hist_field_flags()
1497 else if (hist_field->flags & HIST_FIELD_FL_SYM) in get_hist_field_flags()
1499 else if (hist_field->flags & HIST_FIELD_FL_SYM_OFFSET) in get_hist_field_flags()
1501 else if (hist_field->flags & HIST_FIELD_FL_EXECNAME) in get_hist_field_flags()
1503 else if (hist_field->flags & HIST_FIELD_FL_SYSCALL) in get_hist_field_flags()
1505 else if (hist_field->flags & HIST_FIELD_FL_LOG2) in get_hist_field_flags()
1507 else if (hist_field->flags & HIST_FIELD_FL_BUCKET) in get_hist_field_flags()
1509 else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP_USECS) in get_hist_field_flags()
1515 static void expr_field_str(struct hist_field *field, char *expr) in expr_field_str()
1532 static char *expr_str(struct hist_field *field, unsigned int level) in expr_str()
1617 static void get_hist_field(struct hist_field *hist_field) in get_hist_field() argument
1619 hist_field->ref++; in get_hist_field()
1622 static void __destroy_hist_field(struct hist_field *hist_field) in __destroy_hist_field() argument
1624 if (--hist_field->ref > 1) in __destroy_hist_field()
1627 kfree(hist_field->var.name); in __destroy_hist_field()
1628 kfree(hist_field->name); in __destroy_hist_field()
1631 kfree_const(hist_field->type); in __destroy_hist_field()
1633 kfree(hist_field->system); in __destroy_hist_field()
1634 kfree(hist_field->event_name); in __destroy_hist_field()
1636 kfree(hist_field); in __destroy_hist_field()
1639 static void destroy_hist_field(struct hist_field *hist_field, in destroy_hist_field() argument
1647 if (!hist_field) in destroy_hist_field()
1650 if (hist_field->flags & HIST_FIELD_FL_VAR_REF) in destroy_hist_field()
1654 destroy_hist_field(hist_field->operands[i], level + 1); in destroy_hist_field()
1656 __destroy_hist_field(hist_field); in destroy_hist_field()
1659 static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data, in create_hist_field()
1664 struct hist_field *hist_field; in create_hist_field() local
1669 hist_field = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_hist_field()
1670 if (!hist_field) in create_hist_field()
1673 hist_field->ref = 1; in create_hist_field()
1675 hist_field->hist_data = hist_data; in create_hist_field()
1681 hist_field->fn = hist_field_var_ref; in create_hist_field()
1686 hist_field->fn = hist_field_counter; in create_hist_field()
1687 hist_field->size = sizeof(u64); in create_hist_field()
1688 hist_field->type = "u64"; in create_hist_field()
1693 hist_field->fn = hist_field_none; in create_hist_field()
1699 hist_field->fn = flags & HIST_FIELD_FL_LOG2 ? hist_field_log2 : in create_hist_field()
1701 hist_field->operands[0] = create_hist_field(hist_data, field, fl, NULL); in create_hist_field()
1702 hist_field->size = hist_field->operands[0]->size; in create_hist_field()
1703 hist_field->type = kstrdup_const(hist_field->operands[0]->type, GFP_KERNEL); in create_hist_field()
1704 if (!hist_field->type) in create_hist_field()
1710 hist_field->fn = hist_field_timestamp; in create_hist_field()
1711 hist_field->size = sizeof(u64); in create_hist_field()
1712 hist_field->type = "u64"; in create_hist_field()
1717 hist_field->fn = hist_field_cpu; in create_hist_field()
1718 hist_field->size = sizeof(int); in create_hist_field()
1719 hist_field->type = "unsigned int"; in create_hist_field()
1731 hist_field->size = MAX_FILTER_STR_VAL; in create_hist_field()
1732 hist_field->type = kstrdup_const(field->type, GFP_KERNEL); in create_hist_field()
1733 if (!hist_field->type) in create_hist_field()
1737 hist_field->fn = hist_field_string; in create_hist_field()
1739 hist_field->fn = hist_field_dynstring; in create_hist_field()
1741 hist_field->fn = hist_field_pstring; in create_hist_field()
1743 hist_field->size = field->size; in create_hist_field()
1744 hist_field->is_signed = field->is_signed; in create_hist_field()
1745 hist_field->type = kstrdup_const(field->type, GFP_KERNEL); in create_hist_field()
1746 if (!hist_field->type) in create_hist_field()
1749 hist_field->fn = select_value_fn(field->size, in create_hist_field()
1751 if (!hist_field->fn) { in create_hist_field()
1752 destroy_hist_field(hist_field, 0); in create_hist_field()
1757 hist_field->field = field; in create_hist_field()
1758 hist_field->flags = flags; in create_hist_field()
1761 hist_field->var.name = kstrdup(var_name, GFP_KERNEL); in create_hist_field()
1762 if (!hist_field->var.name) in create_hist_field()
1766 return hist_field; in create_hist_field()
1768 destroy_hist_field(hist_field, 0); in create_hist_field()
1790 static int init_var_ref(struct hist_field *ref_field, in init_var_ref()
1791 struct hist_field *var_field, in init_var_ref()
1847 struct hist_field *var_field) in find_var_ref_idx()
1849 struct hist_field *ref_field; in find_var_ref_idx()
1877 static struct hist_field *create_var_ref(struct hist_trigger_data *hist_data, in create_var_ref()
1878 struct hist_field *var_field, in create_var_ref()
1882 struct hist_field *ref_field; in create_var_ref()
1964 static struct hist_field *parse_var_ref(struct hist_trigger_data *hist_data, in parse_var_ref()
1968 struct hist_field *var_field = NULL, *ref_field = NULL; in parse_var_ref()
2069 static struct hist_field *create_alias(struct hist_trigger_data *hist_data, in create_alias()
2070 struct hist_field *var_ref, in create_alias()
2073 struct hist_field *alias = NULL; in create_alias()
2093 static struct hist_field *parse_atom(struct hist_trigger_data *hist_data, in parse_atom()
2099 struct hist_field *hist_field = NULL; in parse_atom() local
2123 hist_field = parse_var_ref(hist_data, ref_system, in parse_atom()
2125 if (hist_field) { in parse_atom()
2127 hist_field = create_alias(hist_data, hist_field, var_name); in parse_atom()
2128 if (!hist_field) { in parse_atom()
2133 return hist_field; in parse_atom()
2144 hist_field = create_hist_field(hist_data, field, *flags, var_name); in parse_atom()
2145 if (!hist_field) { in parse_atom()
2149 hist_field->buckets = buckets; in parse_atom()
2151 return hist_field; in parse_atom()
2156 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,
2161 static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, in parse_unary()
2166 struct hist_field *operand1, *expr = NULL; in parse_unary()
2237 struct hist_field *operand1, in check_expr_operands()
2238 struct hist_field *operand2) in check_expr_operands()
2245 struct hist_field *var; in check_expr_operands()
2255 struct hist_field *var; in check_expr_operands()
2272 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, in parse_expr()
2277 struct hist_field *operand1 = NULL, *operand2 = NULL, *expr = NULL; in parse_expr()
2417 struct hist_field *target_hist_field, *hist_field; in compatible_keys() local
2427 hist_field = hist_data->fields[i + n]; in compatible_keys()
2430 if (strcmp(hist_field->type, target_hist_field->type) != 0) in compatible_keys()
2432 if (hist_field->size != target_hist_field->size) in compatible_keys()
2434 if (hist_field->is_signed != target_hist_field->is_signed) in compatible_keys()
2477 static struct hist_field *
2481 struct hist_field *event_var; in find_synthetic_field_var()
2523 static struct hist_field *
2532 struct hist_field *key_field; in create_field_var_hist()
2533 struct hist_field *event_var; in create_field_var_hist()
2643 static struct hist_field *
2648 struct hist_field *hist_field = NULL; in find_target_event_var() local
2665 hist_field = find_var_field(hist_data, var_name); in find_target_event_var()
2667 return hist_field; in find_target_event_var()
2684 struct hist_field *var = field_var->var; in __update_field_vars()
2685 struct hist_field *val = field_var->val; in __update_field_vars()
2721 static struct hist_field *create_var(struct hist_trigger_data *hist_data, in create_var()
2725 struct hist_field *var; in create_var()
2733 var = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_var()
2767 struct hist_field *val = NULL, *var = NULL; in create_field_var()
3047 struct hist_field *save_val = hist_data->save_vars[i]->val; in track_data_print()
3048 struct hist_field *save_var = hist_data->save_vars[i]->var; in track_data_print()
3125 struct hist_field *var_field, *ref_field, *track_var = NULL; in track_data_create()
3398 struct hist_field *hist_field, in check_synth_field() argument
3413 if (strstr(hist_field->type, "char[") && field->is_string in check_synth_field()
3417 if (strcmp(field->type, hist_field->type) != 0) { in check_synth_field()
3418 if (field->size != hist_field->size || in check_synth_field()
3419 field->is_signed != hist_field->is_signed) in check_synth_field()
3426 static struct hist_field *
3432 struct hist_field *hist_field; in trace_action_find_var() local
3436 hist_field = find_target_event_var(hist_data, system, event, var); in trace_action_find_var()
3437 if (!hist_field) { in trace_action_find_var()
3443 hist_field = find_event_var(hist_data, system, event, var); in trace_action_find_var()
3446 if (!hist_field) in trace_action_find_var()
3449 return hist_field; in trace_action_find_var()
3452 static struct hist_field *
3457 struct hist_field *hist_field = NULL; in trace_action_create_field_var() local
3470 hist_field = field_var->var; in trace_action_create_field_var()
3492 hist_field = create_field_var_hist(hist_data, system, event, var); in trace_action_create_field_var()
3493 if (IS_ERR(hist_field)) in trace_action_create_field_var()
3497 return hist_field; in trace_action_create_field_var()
3500 hist_field = NULL; in trace_action_create_field_var()
3509 struct hist_field *hist_field, *var_ref; in trace_action_create() local
3554 hist_field = trace_action_find_var(hist_data, data, in trace_action_create()
3558 hist_field = trace_action_create_field_var(hist_data, in trace_action_create()
3564 if (!hist_field) { in trace_action_create()
3570 if (check_synth_field(event, hist_field, field_pos) == 0) { in trace_action_create()
3571 var_ref = create_var_ref(hist_data, hist_field, in trace_action_create()
3753 struct hist_field *hist_field; in __create_val_field() local
3756 hist_field = parse_expr(hist_data, file, field_str, flags, var_name, 0); in __create_val_field()
3757 if (IS_ERR(hist_field)) { in __create_val_field()
3758 ret = PTR_ERR(hist_field); in __create_val_field()
3762 hist_data->fields[val_idx] = hist_field; in __create_val_field()
3786 static u64 hist_field_execname(struct hist_field *hist_field, in hist_field_execname() argument
3806 static void update_var_execname(struct hist_field *hist_field) in update_var_execname() argument
3808 hist_field->flags = HIST_FIELD_FL_STRING | HIST_FIELD_FL_VAR | in update_var_execname()
3810 hist_field->size = MAX_FILTER_STR_VAL; in update_var_execname()
3811 hist_field->is_signed = 0; in update_var_execname()
3813 kfree_const(hist_field->type); in update_var_execname()
3814 hist_field->type = "char[]"; in update_var_execname()
3816 hist_field->fn = hist_field_execname; in update_var_execname()
3894 struct hist_field *hist_field = NULL; in create_key_field() local
3907 hist_field = create_hist_field(hist_data, NULL, flags, NULL); in create_key_field()
3909 hist_field = parse_expr(hist_data, file, field_str, flags, in create_key_field()
3911 if (IS_ERR(hist_field)) { in create_key_field()
3912 ret = PTR_ERR(hist_field); in create_key_field()
3916 if (field_has_hist_vars(hist_field, 0)) { in create_key_field()
3918 destroy_hist_field(hist_field, 0); in create_key_field()
3923 key_size = hist_field->size; in create_key_field()
3926 hist_data->fields[key_idx] = hist_field; in create_key_field()
4121 struct hist_field *hist_field; in create_sort_keys() local
4163 hist_field = hist_data->fields[j]; in create_sort_keys()
4164 if (hist_field->flags & HIST_FIELD_FL_VAR) in create_sort_keys()
4169 test_name = hist_field_name(hist_field, 0); in create_sort_keys()
4462 struct hist_field *hist_field; in create_tracing_map_fields() local
4466 hist_field = hist_data->fields[i]; in create_tracing_map_fields()
4467 if (hist_field->flags & HIST_FIELD_FL_KEY) { in create_tracing_map_fields()
4470 field = hist_field->field; in create_tracing_map_fields()
4472 if (hist_field->flags & HIST_FIELD_FL_STACKTRACE) in create_tracing_map_fields()
4475 cmp_fn = tracing_map_cmp_num(hist_field->size, in create_tracing_map_fields()
4476 hist_field->is_signed); in create_tracing_map_fields()
4483 hist_field->offset, in create_tracing_map_fields()
4485 } else if (!(hist_field->flags & HIST_FIELD_FL_VAR)) in create_tracing_map_fields()
4491 if (hist_field->flags & HIST_FIELD_FL_VAR) { in create_tracing_map_fields()
4495 hist_field->var.idx = idx; in create_tracing_map_fields()
4496 hist_field->var.hist_data = hist_data; in create_tracing_map_fields()
4565 struct hist_field *hist_field; in hist_trigger_elt_update() local
4573 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4574 hist_val = hist_field->fn(hist_field, elt, buffer, rbe, rec); in hist_trigger_elt_update()
4575 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
4576 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
4578 if (hist_field->flags & HIST_FIELD_FL_STRING) { in hist_trigger_elt_update()
4584 var_str_idx = hist_field->var_str_idx; in hist_trigger_elt_update()
4600 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4601 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
4602 hist_val = hist_field->fn(hist_field, elt, buffer, rbe, rec); in hist_trigger_elt_update()
4603 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
4612 struct hist_field *key_field, void *rec) in add_to_key()
4660 struct hist_field *key_field; in event_hist_trigger()
4728 struct hist_field *key_field; in hist_trigger_print_key()
4956 struct hist_field *field, unsigned long flags) in hist_field_debug_show()
5003 struct hist_field *field; in field_var_debug_show()
5207 static void hist_field_print(struct seq_file *m, struct hist_field *hist_field) in hist_field_print() argument
5209 const char *field_name = hist_field_name(hist_field, 0); in hist_field_print()
5211 if (hist_field->var.name) in hist_field_print()
5212 seq_printf(m, "%s=", hist_field->var.name); in hist_field_print()
5214 if (hist_field->flags & HIST_FIELD_FL_CPU) in hist_field_print()
5217 if (hist_field->flags & HIST_FIELD_FL_VAR_REF || in hist_field_print()
5218 hist_field->flags & HIST_FIELD_FL_ALIAS) in hist_field_print()
5221 } else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP) in hist_field_print()
5224 if (hist_field->flags) { in hist_field_print()
5225 if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) && in hist_field_print()
5226 !(hist_field->flags & HIST_FIELD_FL_EXPR)) { in hist_field_print()
5227 const char *flags = get_hist_field_flags(hist_field); in hist_field_print()
5233 if (hist_field->buckets) in hist_field_print()
5234 seq_printf(m, "=%ld", hist_field->buckets); in hist_field_print()
5242 struct hist_field *field; in event_hist_trigger_print()
5486 struct hist_field *key_field, *key_field_test; in hist_trigger_match()