Lines Matching refs:hist_field
80 struct hist_field;
82 typedef u64 (*hist_field_fn_t) (struct hist_field *field,
114 struct hist_field { struct
123 struct hist_field *operands[HIST_FIELD_OPERANDS_MAX]; argument
154 static u64 hist_field_none(struct hist_field *field, in hist_field_none() argument
162 static u64 hist_field_counter(struct hist_field *field, in hist_field_counter()
170 static u64 hist_field_string(struct hist_field *hist_field, in hist_field_string() argument
175 char *addr = (char *)(event + hist_field->field->offset); in hist_field_string()
180 static u64 hist_field_dynstring(struct hist_field *hist_field, in hist_field_dynstring() argument
185 u32 str_item = *(u32 *)(event + hist_field->field->offset); in hist_field_dynstring()
192 static u64 hist_field_pstring(struct hist_field *hist_field, in hist_field_pstring() argument
197 char **addr = (char **)(event + hist_field->field->offset); in hist_field_pstring()
202 static u64 hist_field_log2(struct hist_field *hist_field, in hist_field_log2() argument
207 struct hist_field *operand = hist_field->operands[0]; in hist_field_log2()
214 static u64 hist_field_plus(struct hist_field *hist_field, in hist_field_plus() argument
219 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_plus()
220 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_plus()
228 static u64 hist_field_minus(struct hist_field *hist_field, in hist_field_minus() argument
233 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_minus()
234 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_minus()
242 static u64 hist_field_unary_minus(struct hist_field *hist_field, in hist_field_unary_minus() argument
247 struct hist_field *operand = hist_field->operands[0]; in hist_field_unary_minus()
256 static u64 hist_field_##type(struct hist_field *hist_field, \
261 type *addr = (type *)(event + hist_field->field->offset); \
339 struct hist_field *var;
340 struct hist_field *val;
349 struct hist_field *fields[HIST_FIELDS_MAX];
363 struct hist_field *var_refs[TRACING_MAP_VARS_MAX];
445 struct hist_field *var_ref;
452 struct hist_field *track_var;
625 static u64 hist_field_timestamp(struct hist_field *hist_field, in hist_field_timestamp() argument
630 struct hist_trigger_data *hist_data = hist_field->hist_data; in hist_field_timestamp()
641 static u64 hist_field_cpu(struct hist_field *hist_field, in hist_field_cpu() argument
662 static struct hist_field *
663 check_field_for_var_ref(struct hist_field *hist_field, in check_field_for_var_ref() argument
667 WARN_ON(!(hist_field && hist_field->flags & HIST_FIELD_FL_VAR_REF)); in check_field_for_var_ref()
669 if (hist_field && hist_field->var.idx == var_idx && in check_field_for_var_ref()
670 hist_field->var.hist_data == var_data) in check_field_for_var_ref()
671 return hist_field; in check_field_for_var_ref()
688 static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data, in find_var_ref()
692 struct hist_field *hist_field; in find_var_ref() local
696 hist_field = hist_data->var_refs[i]; in find_var_ref()
697 if (check_field_for_var_ref(hist_field, var_data, var_idx)) in find_var_ref()
698 return hist_field; in find_var_ref()
718 static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, in find_any_var_ref()
722 struct hist_field *found = NULL; in find_any_var_ref()
751 struct hist_field *field; in check_var_refs()
783 static bool field_has_hist_vars(struct hist_field *hist_field, in field_has_hist_vars() argument
791 if (!hist_field) in field_has_hist_vars()
794 if (hist_field->flags & HIST_FIELD_FL_VAR || in field_has_hist_vars()
795 hist_field->flags & HIST_FIELD_FL_VAR_REF) in field_has_hist_vars()
799 struct hist_field *operand; in field_has_hist_vars()
801 operand = hist_field->operands[i]; in field_has_hist_vars()
811 struct hist_field *hist_field; in has_hist_vars() local
815 hist_field = hist_data->fields[i]; in has_hist_vars()
816 if (field_has_hist_vars(hist_field, 0)) in has_hist_vars()
866 static struct hist_field *find_var_field(struct hist_trigger_data *hist_data, in find_var_field()
869 struct hist_field *hist_field, *found = NULL; in find_var_field() local
873 hist_field = hist_data->fields[i]; in find_var_field()
874 if (hist_field && hist_field->flags & HIST_FIELD_FL_VAR && in find_var_field()
875 strcmp(hist_field->var.name, var_name) == 0) { in find_var_field()
876 found = hist_field; in find_var_field()
884 static struct hist_field *find_var(struct hist_trigger_data *hist_data, in find_var()
890 struct hist_field *hist_field; in find_var() local
894 hist_field = find_var_field(hist_data, var_name); in find_var()
895 if (hist_field) in find_var()
896 return hist_field; in find_var()
901 hist_field = find_var_field(test_data, var_name); in find_var()
902 if (hist_field) in find_var()
903 return hist_field; in find_var()
941 static struct hist_field *find_file_var(struct trace_event_file *file, in find_file_var()
946 struct hist_field *hist_field; in find_file_var() local
953 hist_field = find_var_field(test_data, var_name); in find_file_var()
954 if (hist_field) in find_file_var()
955 return hist_field; in find_file_var()
962 static struct hist_field *
966 struct hist_field *hist_field, *found = NULL; in find_match_var() local
980 hist_field = find_file_var(file, var_name); in find_match_var()
981 if (hist_field) { in find_match_var()
988 found = hist_field; in find_match_var()
995 static struct hist_field *find_event_var(struct hist_trigger_data *hist_data, in find_event_var()
1001 struct hist_field *hist_field = NULL; in find_event_var() local
1005 hist_field = find_match_var(hist_data, var_name); in find_event_var()
1006 if (IS_ERR(hist_field)) in find_event_var()
1008 if (hist_field) in find_event_var()
1009 return hist_field; in find_event_var()
1016 hist_field = find_file_var(file, var_name); in find_event_var()
1018 return hist_field; in find_event_var()
1021 static u64 hist_field_var_ref(struct hist_field *hist_field, in hist_field_var_ref() argument
1033 var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; in hist_field_var_ref()
1043 struct hist_field *hist_field; in resolve_var_refs() local
1049 hist_field = hist_data->var_refs[i]; in resolve_var_refs()
1050 var_idx = hist_field->var.idx; in resolve_var_refs()
1051 var_data = hist_field->var.hist_data; in resolve_var_refs()
1073 if (self || !hist_field->read_once) in resolve_var_refs()
1084 static const char *hist_field_name(struct hist_field *field, in hist_field_name()
1382 struct hist_field *key_field; in hist_trigger_elt_data_alloc()
1440 static const char *get_hist_field_flags(struct hist_field *hist_field) in get_hist_field_flags() argument
1444 if (hist_field->flags & HIST_FIELD_FL_HEX) in get_hist_field_flags()
1446 else if (hist_field->flags & HIST_FIELD_FL_SYM) in get_hist_field_flags()
1448 else if (hist_field->flags & HIST_FIELD_FL_SYM_OFFSET) in get_hist_field_flags()
1450 else if (hist_field->flags & HIST_FIELD_FL_EXECNAME) in get_hist_field_flags()
1452 else if (hist_field->flags & HIST_FIELD_FL_SYSCALL) in get_hist_field_flags()
1454 else if (hist_field->flags & HIST_FIELD_FL_LOG2) in get_hist_field_flags()
1456 else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP_USECS) in get_hist_field_flags()
1462 static void expr_field_str(struct hist_field *field, char *expr) in expr_field_str()
1479 static char *expr_str(struct hist_field *field, unsigned int level) in expr_str()
1557 static void get_hist_field(struct hist_field *hist_field) in get_hist_field() argument
1559 hist_field->ref++; in get_hist_field()
1562 static void __destroy_hist_field(struct hist_field *hist_field) in __destroy_hist_field() argument
1564 if (--hist_field->ref > 1) in __destroy_hist_field()
1567 kfree(hist_field->var.name); in __destroy_hist_field()
1568 kfree(hist_field->name); in __destroy_hist_field()
1569 kfree(hist_field->type); in __destroy_hist_field()
1571 kfree(hist_field->system); in __destroy_hist_field()
1572 kfree(hist_field->event_name); in __destroy_hist_field()
1574 kfree(hist_field); in __destroy_hist_field()
1577 static void destroy_hist_field(struct hist_field *hist_field, in destroy_hist_field() argument
1585 if (!hist_field) in destroy_hist_field()
1588 if (hist_field->flags & HIST_FIELD_FL_VAR_REF) in destroy_hist_field()
1592 destroy_hist_field(hist_field->operands[i], level + 1); in destroy_hist_field()
1594 __destroy_hist_field(hist_field); in destroy_hist_field()
1597 static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data, in create_hist_field()
1602 struct hist_field *hist_field; in create_hist_field() local
1607 hist_field = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_hist_field()
1608 if (!hist_field) in create_hist_field()
1611 hist_field->ref = 1; in create_hist_field()
1613 hist_field->hist_data = hist_data; in create_hist_field()
1619 hist_field->fn = hist_field_var_ref; in create_hist_field()
1624 hist_field->fn = hist_field_counter; in create_hist_field()
1625 hist_field->size = sizeof(u64); in create_hist_field()
1626 hist_field->type = kstrdup("u64", GFP_KERNEL); in create_hist_field()
1627 if (!hist_field->type) in create_hist_field()
1633 hist_field->fn = hist_field_none; in create_hist_field()
1639 hist_field->fn = hist_field_log2; in create_hist_field()
1640 hist_field->operands[0] = create_hist_field(hist_data, field, fl, NULL); in create_hist_field()
1641 hist_field->size = hist_field->operands[0]->size; in create_hist_field()
1642 hist_field->type = kstrdup(hist_field->operands[0]->type, GFP_KERNEL); in create_hist_field()
1643 if (!hist_field->type) in create_hist_field()
1649 hist_field->fn = hist_field_timestamp; in create_hist_field()
1650 hist_field->size = sizeof(u64); in create_hist_field()
1651 hist_field->type = kstrdup("u64", GFP_KERNEL); in create_hist_field()
1652 if (!hist_field->type) in create_hist_field()
1658 hist_field->fn = hist_field_cpu; in create_hist_field()
1659 hist_field->size = sizeof(int); in create_hist_field()
1660 hist_field->type = kstrdup("unsigned int", GFP_KERNEL); in create_hist_field()
1661 if (!hist_field->type) in create_hist_field()
1672 hist_field->size = MAX_FILTER_STR_VAL; in create_hist_field()
1673 hist_field->type = kstrdup(field->type, GFP_KERNEL); in create_hist_field()
1674 if (!hist_field->type) in create_hist_field()
1678 hist_field->fn = hist_field_string; in create_hist_field()
1680 hist_field->fn = hist_field_dynstring; in create_hist_field()
1682 hist_field->fn = hist_field_pstring; in create_hist_field()
1684 hist_field->size = field->size; in create_hist_field()
1685 hist_field->is_signed = field->is_signed; in create_hist_field()
1686 hist_field->type = kstrdup(field->type, GFP_KERNEL); in create_hist_field()
1687 if (!hist_field->type) in create_hist_field()
1690 hist_field->fn = select_value_fn(field->size, in create_hist_field()
1692 if (!hist_field->fn) { in create_hist_field()
1693 destroy_hist_field(hist_field, 0); in create_hist_field()
1698 hist_field->field = field; in create_hist_field()
1699 hist_field->flags = flags; in create_hist_field()
1702 hist_field->var.name = kstrdup(var_name, GFP_KERNEL); in create_hist_field()
1703 if (!hist_field->var.name) in create_hist_field()
1707 return hist_field; in create_hist_field()
1709 destroy_hist_field(hist_field, 0); in create_hist_field()
1731 static int init_var_ref(struct hist_field *ref_field, in init_var_ref()
1732 struct hist_field *var_field, in init_var_ref()
1788 struct hist_field *var_field) in find_var_ref_idx()
1790 struct hist_field *ref_field; in find_var_ref_idx()
1818 static struct hist_field *create_var_ref(struct hist_trigger_data *hist_data, in create_var_ref()
1819 struct hist_field *var_field, in create_var_ref()
1823 struct hist_field *ref_field; in create_var_ref()
1905 static struct hist_field *parse_var_ref(struct hist_trigger_data *hist_data, in parse_var_ref()
1909 struct hist_field *var_field = NULL, *ref_field = NULL; in parse_var_ref()
1985 static struct hist_field *create_alias(struct hist_trigger_data *hist_data, in create_alias()
1986 struct hist_field *var_ref, in create_alias()
1989 struct hist_field *alias = NULL; in create_alias()
2009 static struct hist_field *parse_atom(struct hist_trigger_data *hist_data, in parse_atom()
2015 struct hist_field *hist_field = NULL; in parse_atom() local
2038 hist_field = parse_var_ref(hist_data, ref_system, in parse_atom()
2040 if (hist_field) { in parse_atom()
2042 hist_field = create_alias(hist_data, hist_field, var_name); in parse_atom()
2043 if (!hist_field) { in parse_atom()
2048 return hist_field; in parse_atom()
2059 hist_field = create_hist_field(hist_data, field, *flags, var_name); in parse_atom()
2060 if (!hist_field) { in parse_atom()
2065 return hist_field; in parse_atom()
2070 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,
2075 static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, in parse_unary()
2080 struct hist_field *operand1, *expr = NULL; in parse_unary()
2144 struct hist_field *operand1, in check_expr_operands()
2145 struct hist_field *operand2) in check_expr_operands()
2152 struct hist_field *var; in check_expr_operands()
2162 struct hist_field *var; in check_expr_operands()
2179 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, in parse_expr()
2184 struct hist_field *operand1 = NULL, *operand2 = NULL, *expr = NULL; in parse_expr()
2310 struct hist_field *target_hist_field, *hist_field; in compatible_keys() local
2320 hist_field = hist_data->fields[i + n]; in compatible_keys()
2323 if (strcmp(hist_field->type, target_hist_field->type) != 0) in compatible_keys()
2325 if (hist_field->size != target_hist_field->size) in compatible_keys()
2327 if (hist_field->is_signed != target_hist_field->is_signed) in compatible_keys()
2370 static struct hist_field *
2374 struct hist_field *event_var; in find_synthetic_field_var()
2416 static struct hist_field *
2421 struct hist_field *event_var = ERR_PTR(-EINVAL); in create_field_var_hist()
2426 struct hist_field *key_field; in create_field_var_hist()
2536 static struct hist_field *
2541 struct hist_field *hist_field = NULL; in find_target_event_var() local
2558 hist_field = find_var_field(hist_data, var_name); in find_target_event_var()
2560 return hist_field; in find_target_event_var()
2576 struct hist_field *var = field_var->var; in __update_field_vars()
2577 struct hist_field *val = field_var->val; in __update_field_vars()
2611 static struct hist_field *create_var(struct hist_trigger_data *hist_data, in create_var()
2615 struct hist_field *var; in create_var()
2623 var = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_var()
2657 struct hist_field *val = NULL, *var = NULL; in create_field_var()
2933 struct hist_field *save_val = hist_data->save_vars[i]->val; in track_data_print()
2934 struct hist_field *save_var = hist_data->save_vars[i]->var; in track_data_print()
3009 struct hist_field *var_field, *ref_field, *track_var = NULL; in track_data_create()
3282 struct hist_field *hist_field, in check_synth_field() argument
3297 if (strstr(hist_field->type, "char[") && field->is_string in check_synth_field()
3301 if (strcmp(field->type, hist_field->type) != 0) { in check_synth_field()
3302 if (field->size != hist_field->size || in check_synth_field()
3303 field->is_signed != hist_field->is_signed) in check_synth_field()
3310 static struct hist_field *
3316 struct hist_field *hist_field; in trace_action_find_var() local
3320 hist_field = find_target_event_var(hist_data, system, event, var); in trace_action_find_var()
3321 if (!hist_field) { in trace_action_find_var()
3327 hist_field = find_event_var(hist_data, system, event, var); in trace_action_find_var()
3330 if (!hist_field) in trace_action_find_var()
3333 return hist_field; in trace_action_find_var()
3336 static struct hist_field *
3341 struct hist_field *hist_field = NULL; in trace_action_create_field_var() local
3354 hist_field = field_var->var; in trace_action_create_field_var()
3374 hist_field = create_field_var_hist(hist_data, system, event, var); in trace_action_create_field_var()
3375 if (IS_ERR(hist_field)) in trace_action_create_field_var()
3379 return hist_field; in trace_action_create_field_var()
3382 hist_field = NULL; in trace_action_create_field_var()
3391 struct hist_field *hist_field, *var_ref; in trace_action_create() local
3436 hist_field = trace_action_find_var(hist_data, data, in trace_action_create()
3440 hist_field = trace_action_create_field_var(hist_data, in trace_action_create()
3446 if (!hist_field) { in trace_action_create()
3452 if (check_synth_field(event, hist_field, field_pos) == 0) { in trace_action_create()
3453 var_ref = create_var_ref(hist_data, hist_field, in trace_action_create()
3635 struct hist_field *hist_field; in __create_val_field() local
3638 hist_field = parse_expr(hist_data, file, field_str, flags, var_name, 0); in __create_val_field()
3639 if (IS_ERR(hist_field)) { in __create_val_field()
3640 ret = PTR_ERR(hist_field); in __create_val_field()
3644 hist_data->fields[val_idx] = hist_field; in __create_val_field()
3738 struct hist_field *hist_field = NULL; in create_key_field() local
3751 hist_field = create_hist_field(hist_data, NULL, flags, NULL); in create_key_field()
3753 hist_field = parse_expr(hist_data, file, field_str, flags, in create_key_field()
3755 if (IS_ERR(hist_field)) { in create_key_field()
3756 ret = PTR_ERR(hist_field); in create_key_field()
3760 if (field_has_hist_vars(hist_field, 0)) { in create_key_field()
3762 destroy_hist_field(hist_field, 0); in create_key_field()
3767 key_size = hist_field->size; in create_key_field()
3770 hist_data->fields[key_idx] = hist_field; in create_key_field()
3965 struct hist_field *hist_field; in create_sort_keys() local
4007 hist_field = hist_data->fields[j]; in create_sort_keys()
4008 if (hist_field->flags & HIST_FIELD_FL_VAR) in create_sort_keys()
4013 test_name = hist_field_name(hist_field, 0); in create_sort_keys()
4306 struct hist_field *hist_field; in create_tracing_map_fields() local
4310 hist_field = hist_data->fields[i]; in create_tracing_map_fields()
4311 if (hist_field->flags & HIST_FIELD_FL_KEY) { in create_tracing_map_fields()
4314 field = hist_field->field; in create_tracing_map_fields()
4316 if (hist_field->flags & HIST_FIELD_FL_STACKTRACE) in create_tracing_map_fields()
4319 cmp_fn = tracing_map_cmp_num(hist_field->size, in create_tracing_map_fields()
4320 hist_field->is_signed); in create_tracing_map_fields()
4327 hist_field->offset, in create_tracing_map_fields()
4329 } else if (!(hist_field->flags & HIST_FIELD_FL_VAR)) in create_tracing_map_fields()
4335 if (hist_field->flags & HIST_FIELD_FL_VAR) { in create_tracing_map_fields()
4339 hist_field->var.idx = idx; in create_tracing_map_fields()
4340 hist_field->var.hist_data = hist_data; in create_tracing_map_fields()
4408 struct hist_field *hist_field; in hist_trigger_elt_update() local
4416 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4417 hist_val = hist_field->fn(hist_field, elt, rbe, rec); in hist_trigger_elt_update()
4418 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
4419 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
4421 if (hist_field->flags & HIST_FIELD_FL_STRING) { in hist_trigger_elt_update()
4427 var_str_idx = hist_field->var_str_idx; in hist_trigger_elt_update()
4443 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4444 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
4445 hist_val = hist_field->fn(hist_field, elt, rbe, rec); in hist_trigger_elt_update()
4446 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
4455 struct hist_field *key_field, void *rec) in add_to_key()
4503 struct hist_field *key_field; in event_hist_trigger()
4571 struct hist_field *key_field; in hist_trigger_print_key()
4794 struct hist_field *field, unsigned long flags) in hist_field_debug_show()
4841 struct hist_field *field; in field_var_debug_show()
5045 static void hist_field_print(struct seq_file *m, struct hist_field *hist_field) in hist_field_print() argument
5047 const char *field_name = hist_field_name(hist_field, 0); in hist_field_print()
5049 if (hist_field->var.name) in hist_field_print()
5050 seq_printf(m, "%s=", hist_field->var.name); in hist_field_print()
5052 if (hist_field->flags & HIST_FIELD_FL_CPU) in hist_field_print()
5055 if (hist_field->flags & HIST_FIELD_FL_VAR_REF || in hist_field_print()
5056 hist_field->flags & HIST_FIELD_FL_ALIAS) in hist_field_print()
5059 } else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP) in hist_field_print()
5062 if (hist_field->flags) { in hist_field_print()
5063 if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) && in hist_field_print()
5064 !(hist_field->flags & HIST_FIELD_FL_EXPR)) { in hist_field_print()
5065 const char *flags = get_hist_field_flags(hist_field); in hist_field_print()
5078 struct hist_field *field; in event_hist_trigger_print()
5321 struct hist_field *key_field, *key_field_test; in hist_trigger_match()