Lines Matching refs:hist_field
81 struct hist_field;
83 typedef u64 (*hist_field_fn_t) (struct hist_field *field,
115 struct hist_field { struct
123 struct hist_field *operands[HIST_FIELD_OPERANDS_MAX]; argument
152 static u64 hist_field_none(struct hist_field *field, in hist_field_none() argument
160 static u64 hist_field_counter(struct hist_field *field, in hist_field_counter()
168 static u64 hist_field_string(struct hist_field *hist_field, in hist_field_string() argument
173 char *addr = (char *)(event + hist_field->field->offset); in hist_field_string()
178 static u64 hist_field_dynstring(struct hist_field *hist_field, in hist_field_dynstring() argument
183 u32 str_item = *(u32 *)(event + hist_field->field->offset); in hist_field_dynstring()
190 static u64 hist_field_pstring(struct hist_field *hist_field, in hist_field_pstring() argument
195 char **addr = (char **)(event + hist_field->field->offset); in hist_field_pstring()
200 static u64 hist_field_log2(struct hist_field *hist_field, in hist_field_log2() argument
205 struct hist_field *operand = hist_field->operands[0]; in hist_field_log2()
212 static u64 hist_field_plus(struct hist_field *hist_field, in hist_field_plus() argument
217 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_plus()
218 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_plus()
226 static u64 hist_field_minus(struct hist_field *hist_field, in hist_field_minus() argument
231 struct hist_field *operand1 = hist_field->operands[0]; in hist_field_minus()
232 struct hist_field *operand2 = hist_field->operands[1]; in hist_field_minus()
240 static u64 hist_field_unary_minus(struct hist_field *hist_field, in hist_field_unary_minus() argument
245 struct hist_field *operand = hist_field->operands[0]; in hist_field_unary_minus()
254 static u64 hist_field_##type(struct hist_field *hist_field, \
259 type *addr = (type *)(event + hist_field->field->offset); \
337 struct hist_field *var;
338 struct hist_field *val;
347 struct hist_field *fields[HIST_FIELDS_MAX];
360 struct hist_field *var_refs[TRACING_MAP_VARS_MAX];
502 struct hist_field *var_ref;
509 struct hist_field *track_var;
1483 static u64 hist_field_timestamp(struct hist_field *hist_field, in hist_field_timestamp() argument
1488 struct hist_trigger_data *hist_data = hist_field->hist_data; in hist_field_timestamp()
1499 static u64 hist_field_cpu(struct hist_field *hist_field, in hist_field_cpu() argument
1520 static struct hist_field *
1521 check_field_for_var_ref(struct hist_field *hist_field, in check_field_for_var_ref() argument
1525 WARN_ON(!(hist_field && hist_field->flags & HIST_FIELD_FL_VAR_REF)); in check_field_for_var_ref()
1527 if (hist_field && hist_field->var.idx == var_idx && in check_field_for_var_ref()
1528 hist_field->var.hist_data == var_data) in check_field_for_var_ref()
1529 return hist_field; in check_field_for_var_ref()
1546 static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data, in find_var_ref()
1550 struct hist_field *hist_field; in find_var_ref() local
1554 hist_field = hist_data->var_refs[i]; in find_var_ref()
1555 if (check_field_for_var_ref(hist_field, var_data, var_idx)) in find_var_ref()
1556 return hist_field; in find_var_ref()
1576 static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, in find_any_var_ref()
1580 struct hist_field *found = NULL; in find_any_var_ref()
1609 struct hist_field *field; in check_var_refs()
1641 static bool field_has_hist_vars(struct hist_field *hist_field, in field_has_hist_vars() argument
1649 if (!hist_field) in field_has_hist_vars()
1652 if (hist_field->flags & HIST_FIELD_FL_VAR || in field_has_hist_vars()
1653 hist_field->flags & HIST_FIELD_FL_VAR_REF) in field_has_hist_vars()
1657 struct hist_field *operand; in field_has_hist_vars()
1659 operand = hist_field->operands[i]; in field_has_hist_vars()
1669 struct hist_field *hist_field; in has_hist_vars() local
1673 hist_field = hist_data->fields[i]; in has_hist_vars()
1674 if (field_has_hist_vars(hist_field, 0)) in has_hist_vars()
1724 static struct hist_field *find_var_field(struct hist_trigger_data *hist_data, in find_var_field()
1727 struct hist_field *hist_field, *found = NULL; in find_var_field() local
1731 hist_field = hist_data->fields[i]; in find_var_field()
1732 if (hist_field && hist_field->flags & HIST_FIELD_FL_VAR && in find_var_field()
1733 strcmp(hist_field->var.name, var_name) == 0) { in find_var_field()
1734 found = hist_field; in find_var_field()
1742 static struct hist_field *find_var(struct hist_trigger_data *hist_data, in find_var()
1748 struct hist_field *hist_field; in find_var() local
1750 hist_field = find_var_field(hist_data, var_name); in find_var()
1751 if (hist_field) in find_var()
1752 return hist_field; in find_var()
1757 hist_field = find_var_field(test_data, var_name); in find_var()
1758 if (hist_field) in find_var()
1759 return hist_field; in find_var()
1797 static struct hist_field *find_file_var(struct trace_event_file *file, in find_file_var()
1802 struct hist_field *hist_field; in find_file_var() local
1807 hist_field = find_var_field(test_data, var_name); in find_file_var()
1808 if (hist_field) in find_file_var()
1809 return hist_field; in find_file_var()
1816 static struct hist_field *
1820 struct hist_field *hist_field, *found = NULL; in find_match_var() local
1834 hist_field = find_file_var(file, var_name); in find_match_var()
1835 if (hist_field) { in find_match_var()
1842 found = hist_field; in find_match_var()
1849 static struct hist_field *find_event_var(struct hist_trigger_data *hist_data, in find_event_var()
1855 struct hist_field *hist_field = NULL; in find_event_var() local
1859 hist_field = find_match_var(hist_data, var_name); in find_event_var()
1860 if (IS_ERR(hist_field)) in find_event_var()
1862 if (hist_field) in find_event_var()
1863 return hist_field; in find_event_var()
1870 hist_field = find_file_var(file, var_name); in find_event_var()
1872 return hist_field; in find_event_var()
1875 static u64 hist_field_var_ref(struct hist_field *hist_field, in hist_field_var_ref() argument
1887 var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; in hist_field_var_ref()
1897 struct hist_field *hist_field; in resolve_var_refs() local
1903 hist_field = hist_data->var_refs[i]; in resolve_var_refs()
1904 var_idx = hist_field->var.idx; in resolve_var_refs()
1905 var_data = hist_field->var.hist_data; in resolve_var_refs()
1927 if (self || !hist_field->read_once) in resolve_var_refs()
1938 static const char *hist_field_name(struct hist_field *field, in hist_field_name()
2239 struct hist_field *key_field; in hist_trigger_elt_data_alloc()
2290 static const char *get_hist_field_flags(struct hist_field *hist_field) in get_hist_field_flags() argument
2294 if (hist_field->flags & HIST_FIELD_FL_HEX) in get_hist_field_flags()
2296 else if (hist_field->flags & HIST_FIELD_FL_SYM) in get_hist_field_flags()
2298 else if (hist_field->flags & HIST_FIELD_FL_SYM_OFFSET) in get_hist_field_flags()
2300 else if (hist_field->flags & HIST_FIELD_FL_EXECNAME) in get_hist_field_flags()
2302 else if (hist_field->flags & HIST_FIELD_FL_SYSCALL) in get_hist_field_flags()
2304 else if (hist_field->flags & HIST_FIELD_FL_LOG2) in get_hist_field_flags()
2306 else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP_USECS) in get_hist_field_flags()
2312 static void expr_field_str(struct hist_field *field, char *expr) in expr_field_str()
2329 static char *expr_str(struct hist_field *field, unsigned int level) in expr_str()
2407 static void __destroy_hist_field(struct hist_field *hist_field) in __destroy_hist_field() argument
2409 kfree(hist_field->var.name); in __destroy_hist_field()
2410 kfree(hist_field->name); in __destroy_hist_field()
2411 kfree(hist_field->type); in __destroy_hist_field()
2413 kfree(hist_field); in __destroy_hist_field()
2416 static void destroy_hist_field(struct hist_field *hist_field, in destroy_hist_field() argument
2424 if (!hist_field) in destroy_hist_field()
2427 if (hist_field->flags & HIST_FIELD_FL_VAR_REF) in destroy_hist_field()
2431 destroy_hist_field(hist_field->operands[i], level + 1); in destroy_hist_field()
2433 __destroy_hist_field(hist_field); in destroy_hist_field()
2436 static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data, in create_hist_field()
2441 struct hist_field *hist_field; in create_hist_field() local
2446 hist_field = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_hist_field()
2447 if (!hist_field) in create_hist_field()
2450 hist_field->hist_data = hist_data; in create_hist_field()
2456 hist_field->fn = hist_field_var_ref; in create_hist_field()
2461 hist_field->fn = hist_field_counter; in create_hist_field()
2462 hist_field->size = sizeof(u64); in create_hist_field()
2463 hist_field->type = kstrdup("u64", GFP_KERNEL); in create_hist_field()
2464 if (!hist_field->type) in create_hist_field()
2470 hist_field->fn = hist_field_none; in create_hist_field()
2476 hist_field->fn = hist_field_log2; in create_hist_field()
2477 hist_field->operands[0] = create_hist_field(hist_data, field, fl, NULL); in create_hist_field()
2478 hist_field->size = hist_field->operands[0]->size; in create_hist_field()
2479 hist_field->type = kstrdup(hist_field->operands[0]->type, GFP_KERNEL); in create_hist_field()
2480 if (!hist_field->type) in create_hist_field()
2486 hist_field->fn = hist_field_timestamp; in create_hist_field()
2487 hist_field->size = sizeof(u64); in create_hist_field()
2488 hist_field->type = kstrdup("u64", GFP_KERNEL); in create_hist_field()
2489 if (!hist_field->type) in create_hist_field()
2495 hist_field->fn = hist_field_cpu; in create_hist_field()
2496 hist_field->size = sizeof(int); in create_hist_field()
2497 hist_field->type = kstrdup("unsigned int", GFP_KERNEL); in create_hist_field()
2498 if (!hist_field->type) in create_hist_field()
2509 hist_field->size = MAX_FILTER_STR_VAL; in create_hist_field()
2510 hist_field->type = kstrdup(field->type, GFP_KERNEL); in create_hist_field()
2511 if (!hist_field->type) in create_hist_field()
2515 hist_field->fn = hist_field_string; in create_hist_field()
2517 hist_field->fn = hist_field_dynstring; in create_hist_field()
2519 hist_field->fn = hist_field_pstring; in create_hist_field()
2521 hist_field->size = field->size; in create_hist_field()
2522 hist_field->is_signed = field->is_signed; in create_hist_field()
2523 hist_field->type = kstrdup(field->type, GFP_KERNEL); in create_hist_field()
2524 if (!hist_field->type) in create_hist_field()
2527 hist_field->fn = select_value_fn(field->size, in create_hist_field()
2529 if (!hist_field->fn) { in create_hist_field()
2530 destroy_hist_field(hist_field, 0); in create_hist_field()
2535 hist_field->field = field; in create_hist_field()
2536 hist_field->flags = flags; in create_hist_field()
2539 hist_field->var.name = kstrdup(var_name, GFP_KERNEL); in create_hist_field()
2540 if (!hist_field->var.name) in create_hist_field()
2544 return hist_field; in create_hist_field()
2546 destroy_hist_field(hist_field, 0); in create_hist_field()
2568 static int init_var_ref(struct hist_field *ref_field, in init_var_ref()
2569 struct hist_field *var_field, in init_var_ref()
2639 static struct hist_field *create_var_ref(struct hist_trigger_data *hist_data, in create_var_ref()
2640 struct hist_field *var_field, in create_var_ref()
2644 struct hist_field *ref_field; in create_var_ref()
2715 static struct hist_field *parse_var_ref(struct hist_trigger_data *hist_data, in parse_var_ref()
2719 struct hist_field *var_field = NULL, *ref_field = NULL; in parse_var_ref()
2795 static struct hist_field *create_alias(struct hist_trigger_data *hist_data, in create_alias()
2796 struct hist_field *var_ref, in create_alias()
2799 struct hist_field *alias = NULL; in create_alias()
2819 static struct hist_field *parse_atom(struct hist_trigger_data *hist_data, in parse_atom()
2825 struct hist_field *hist_field = NULL; in parse_atom() local
2848 hist_field = parse_var_ref(hist_data, ref_system, in parse_atom()
2850 if (hist_field) { in parse_atom()
2852 hist_field = create_alias(hist_data, hist_field, var_name); in parse_atom()
2853 if (!hist_field) { in parse_atom()
2858 return hist_field; in parse_atom()
2869 hist_field = create_hist_field(hist_data, field, *flags, var_name); in parse_atom()
2870 if (!hist_field) { in parse_atom()
2875 return hist_field; in parse_atom()
2880 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,
2885 static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, in parse_unary()
2890 struct hist_field *operand1, *expr = NULL; in parse_unary()
2954 struct hist_field *operand1, in check_expr_operands()
2955 struct hist_field *operand2) in check_expr_operands()
2962 struct hist_field *var; in check_expr_operands()
2972 struct hist_field *var; in check_expr_operands()
2989 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, in parse_expr()
2994 struct hist_field *operand1 = NULL, *operand2 = NULL, *expr = NULL; in parse_expr()
3118 struct hist_field *target_hist_field, *hist_field; in compatible_keys() local
3128 hist_field = hist_data->fields[i + n]; in compatible_keys()
3131 if (strcmp(hist_field->type, target_hist_field->type) != 0) in compatible_keys()
3133 if (hist_field->size != target_hist_field->size) in compatible_keys()
3135 if (hist_field->is_signed != target_hist_field->is_signed) in compatible_keys()
3176 static struct hist_field *
3180 struct hist_field *event_var; in find_synthetic_field_var()
3222 static struct hist_field *
3227 struct hist_field *event_var = ERR_PTR(-EINVAL); in create_field_var_hist()
3232 struct hist_field *key_field; in create_field_var_hist()
3342 static struct hist_field *
3347 struct hist_field *hist_field = NULL; in find_target_event_var() local
3364 hist_field = find_var_field(hist_data, var_name); in find_target_event_var()
3366 return hist_field; in find_target_event_var()
3382 struct hist_field *var = field_var->var; in __update_field_vars()
3383 struct hist_field *val = field_var->val; in __update_field_vars()
3417 static struct hist_field *create_var(struct hist_trigger_data *hist_data, in create_var()
3421 struct hist_field *var; in create_var()
3429 var = kzalloc(sizeof(struct hist_field), GFP_KERNEL); in create_var()
3462 struct hist_field *val = NULL, *var = NULL; in create_field_var()
3738 struct hist_field *save_val = hist_data->save_vars[i]->val; in track_data_print()
3739 struct hist_field *save_var = hist_data->save_vars[i]->var; in track_data_print()
3814 struct hist_field *var_field, *ref_field, *track_var = NULL; in track_data_create()
4084 struct hist_field *hist_field, in check_synth_field() argument
4094 if (strcmp(field->type, hist_field->type) != 0) in check_synth_field()
4100 static struct hist_field *
4106 struct hist_field *hist_field; in trace_action_find_var() local
4110 hist_field = find_target_event_var(hist_data, system, event, var); in trace_action_find_var()
4111 if (!hist_field) { in trace_action_find_var()
4117 hist_field = find_event_var(hist_data, system, event, var); in trace_action_find_var()
4120 if (!hist_field) in trace_action_find_var()
4123 return hist_field; in trace_action_find_var()
4126 static struct hist_field *
4131 struct hist_field *hist_field = NULL; in trace_action_create_field_var() local
4144 hist_field = field_var->var; in trace_action_create_field_var()
4164 hist_field = create_field_var_hist(hist_data, system, event, var); in trace_action_create_field_var()
4165 if (IS_ERR(hist_field)) in trace_action_create_field_var()
4169 return hist_field; in trace_action_create_field_var()
4172 hist_field = NULL; in trace_action_create_field_var()
4181 struct hist_field *hist_field, *var_ref; in trace_action_create() local
4228 hist_field = trace_action_find_var(hist_data, data, in trace_action_create()
4232 hist_field = trace_action_create_field_var(hist_data, in trace_action_create()
4238 if (!hist_field) { in trace_action_create()
4244 if (check_synth_field(event, hist_field, field_pos) == 0) { in trace_action_create()
4245 var_ref = create_var_ref(hist_data, hist_field, in trace_action_create()
4420 struct hist_field *hist_field; in __create_val_field() local
4423 hist_field = parse_expr(hist_data, file, field_str, flags, var_name, 0); in __create_val_field()
4424 if (IS_ERR(hist_field)) { in __create_val_field()
4425 ret = PTR_ERR(hist_field); in __create_val_field()
4429 hist_data->fields[val_idx] = hist_field; in __create_val_field()
4521 struct hist_field *hist_field = NULL; in create_key_field() local
4534 hist_field = create_hist_field(hist_data, NULL, flags, NULL); in create_key_field()
4536 hist_field = parse_expr(hist_data, file, field_str, flags, in create_key_field()
4538 if (IS_ERR(hist_field)) { in create_key_field()
4539 ret = PTR_ERR(hist_field); in create_key_field()
4543 if (field_has_hist_vars(hist_field, 0)) { in create_key_field()
4545 destroy_hist_field(hist_field, 0); in create_key_field()
4550 key_size = hist_field->size; in create_key_field()
4553 hist_data->fields[key_idx] = hist_field; in create_key_field()
4756 struct hist_field *hist_field; in create_sort_keys() local
4793 hist_field = hist_data->fields[j]; in create_sort_keys()
4794 if (hist_field->flags & HIST_FIELD_FL_VAR) in create_sort_keys()
4799 test_name = hist_field_name(hist_field, 0); in create_sort_keys()
5091 struct hist_field *hist_field; in create_tracing_map_fields() local
5095 hist_field = hist_data->fields[i]; in create_tracing_map_fields()
5096 if (hist_field->flags & HIST_FIELD_FL_KEY) { in create_tracing_map_fields()
5099 field = hist_field->field; in create_tracing_map_fields()
5101 if (hist_field->flags & HIST_FIELD_FL_STACKTRACE) in create_tracing_map_fields()
5104 cmp_fn = tracing_map_cmp_num(hist_field->size, in create_tracing_map_fields()
5105 hist_field->is_signed); in create_tracing_map_fields()
5112 hist_field->offset, in create_tracing_map_fields()
5114 } else if (!(hist_field->flags & HIST_FIELD_FL_VAR)) in create_tracing_map_fields()
5120 if (hist_field->flags & HIST_FIELD_FL_VAR) { in create_tracing_map_fields()
5124 hist_field->var.idx = idx; in create_tracing_map_fields()
5125 hist_field->var.hist_data = hist_data; in create_tracing_map_fields()
5193 struct hist_field *hist_field; in hist_trigger_elt_update() local
5201 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
5202 hist_val = hist_field->fn(hist_field, elt, rbe, rec); in hist_trigger_elt_update()
5203 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
5204 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
5212 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
5213 if (hist_field->flags & HIST_FIELD_FL_VAR) { in hist_trigger_elt_update()
5214 hist_val = hist_field->fn(hist_field, elt, rbe, rec); in hist_trigger_elt_update()
5215 var_idx = hist_field->var.idx; in hist_trigger_elt_update()
5224 struct hist_field *key_field, void *rec) in add_to_key()
5272 struct hist_field *key_field; in event_hist_trigger()
5340 struct hist_field *key_field; in hist_trigger_print_key()
5541 static void hist_field_print(struct seq_file *m, struct hist_field *hist_field) in hist_field_print() argument
5543 const char *field_name = hist_field_name(hist_field, 0); in hist_field_print()
5545 if (hist_field->var.name) in hist_field_print()
5546 seq_printf(m, "%s=", hist_field->var.name); in hist_field_print()
5548 if (hist_field->flags & HIST_FIELD_FL_CPU) in hist_field_print()
5551 if (hist_field->flags & HIST_FIELD_FL_VAR_REF || in hist_field_print()
5552 hist_field->flags & HIST_FIELD_FL_ALIAS) in hist_field_print()
5555 } else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP) in hist_field_print()
5558 if (hist_field->flags) { in hist_field_print()
5559 if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) && in hist_field_print()
5560 !(hist_field->flags & HIST_FIELD_FL_EXPR)) { in hist_field_print()
5561 const char *flags = get_hist_field_flags(hist_field); in hist_field_print()
5574 struct hist_field *field; in event_hist_trigger_print()
5817 struct hist_field *key_field, *key_field_test; in hist_trigger_match()