Lines Matching refs:hist_data
44 struct hist_trigger_data *hist_data; member
57 struct hist_trigger_data *hist_data; member
189 #define for_each_hist_field(i, hist_data) \ argument
190 for ((i) = 0; (i) < (hist_data)->n_fields; (i)++)
192 #define for_each_hist_val_field(i, hist_data) \ argument
193 for ((i) = 0; (i) < (hist_data)->n_vals; (i)++)
195 #define for_each_hist_key_field(i, hist_data) \ argument
196 for ((i) = (hist_data)->n_vals; (i) < (hist_data)->n_fields; (i)++)
258 struct hist_trigger_data *hist_data; member
317 typedef void (*action_fn_t) (struct hist_trigger_data *hist_data,
996 static void action_trace(struct hist_trigger_data *hist_data, in action_trace() argument
1008 struct hist_trigger_data *hist_data; member
1237 struct hist_trigger_data *hist_data = hist_field->hist_data; in hist_field_timestamp() local
1238 struct trace_array *tr = hist_data->event_file->tr; in hist_field_timestamp()
1242 if (hist_data->attrs->ts_in_usecs && trace_clock_in_ns(tr)) in hist_field_timestamp()
1267 hist_field->var.hist_data == var_data) { in check_field_for_var_ref()
1276 check_field_for_var_refs(struct hist_trigger_data *hist_data, in check_field_for_var_refs() argument
1299 found = check_field_for_var_refs(hist_data, operand, var_data, in check_field_for_var_refs()
1308 static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data, in find_var_ref() argument
1315 for_each_hist_field(i, hist_data) { in find_var_ref()
1316 hist_field = hist_data->fields[i]; in find_var_ref()
1317 found = check_field_for_var_refs(hist_data, hist_field, in find_var_ref()
1323 for (i = 0; i < hist_data->n_synth_var_refs; i++) { in find_var_ref()
1324 hist_field = hist_data->synth_var_refs[i]; in find_var_ref()
1325 found = check_field_for_var_refs(hist_data, hist_field, in find_var_ref()
1334 static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, in find_any_var_ref() argument
1337 struct trace_array *tr = hist_data->event_file->tr; in find_any_var_ref()
1342 if (var_data->hist_data == hist_data) in find_any_var_ref()
1344 found = find_var_ref(var_data->hist_data, hist_data, var_idx); in find_any_var_ref()
1352 static bool check_var_refs(struct hist_trigger_data *hist_data) in check_var_refs() argument
1358 for_each_hist_field(i, hist_data) { in check_var_refs()
1359 field = hist_data->fields[i]; in check_var_refs()
1361 if (find_any_var_ref(hist_data, field->var.idx)) { in check_var_refs()
1371 static struct hist_var_data *find_hist_vars(struct hist_trigger_data *hist_data) in find_hist_vars() argument
1373 struct trace_array *tr = hist_data->event_file->tr; in find_hist_vars()
1377 if (var_data->hist_data == hist_data) { in find_hist_vars()
1412 static bool has_hist_vars(struct hist_trigger_data *hist_data) in has_hist_vars() argument
1417 for_each_hist_field(i, hist_data) { in has_hist_vars()
1418 hist_field = hist_data->fields[i]; in has_hist_vars()
1426 static int save_hist_vars(struct hist_trigger_data *hist_data) in save_hist_vars() argument
1428 struct trace_array *tr = hist_data->event_file->tr; in save_hist_vars()
1431 var_data = find_hist_vars(hist_data); in save_hist_vars()
1444 var_data->hist_data = hist_data; in save_hist_vars()
1450 static void remove_hist_vars(struct hist_trigger_data *hist_data) in remove_hist_vars() argument
1452 struct trace_array *tr = hist_data->event_file->tr; in remove_hist_vars()
1455 var_data = find_hist_vars(hist_data); in remove_hist_vars()
1459 if (WARN_ON(check_var_refs(hist_data))) in remove_hist_vars()
1469 static struct hist_field *find_var_field(struct hist_trigger_data *hist_data, in find_var_field() argument
1475 for_each_hist_field(i, hist_data) { in find_var_field()
1476 hist_field = hist_data->fields[i]; in find_var_field()
1487 static struct hist_field *find_var(struct hist_trigger_data *hist_data, in find_var() argument
1495 hist_field = find_var_field(hist_data, var_name); in find_var()
1524 var_hist_data = var_data->hist_data; in find_var_file()
1562 find_match_var(struct hist_trigger_data *hist_data, char *var_name) in find_match_var() argument
1564 struct trace_array *tr = hist_data->event_file->tr; in find_match_var()
1569 for (i = 0; i < hist_data->n_actions; i++) { in find_match_var()
1570 struct action_data *data = hist_data->actions[i]; in find_match_var()
1593 static struct hist_field *find_event_var(struct hist_trigger_data *hist_data, in find_event_var() argument
1598 struct trace_array *tr = hist_data->event_file->tr; in find_event_var()
1603 hist_field = find_match_var(hist_data, var_name); in find_event_var()
1639 static bool resolve_var_refs(struct hist_trigger_data *hist_data, void *key, in resolve_var_refs() argument
1649 for (i = 0; i < hist_data->n_var_refs; i++) { in resolve_var_refs()
1650 hist_field = hist_data->var_refs[i]; in resolve_var_refs()
1652 var_data = hist_field->var.hist_data; in resolve_var_refs()
1659 if ((self && var_data != hist_data) || in resolve_var_refs()
1660 (!self && var_data == hist_data)) in resolve_var_refs()
1981 struct hist_trigger_data *hist_data = elt->map->private_data; in hist_trigger_elt_data_alloc() local
1991 for_each_hist_key_field(i, hist_data) { in hist_trigger_elt_data_alloc()
1992 key_field = hist_data->fields[i]; in hist_trigger_elt_data_alloc()
2004 n_str = hist_data->n_field_var_str + hist_data->n_max_var_str; in hist_trigger_elt_data_alloc()
2173 static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data, in create_hist_field() argument
2187 hist_field->hist_data = hist_data; in create_hist_field()
2214 hist_field->operands[0] = create_hist_field(hist_data, field, fl, NULL); in create_hist_field()
2287 static void destroy_hist_fields(struct hist_trigger_data *hist_data) in destroy_hist_fields() argument
2292 if (hist_data->fields[i]) { in destroy_hist_fields()
2293 destroy_hist_field(hist_data->fields[i], 0); in destroy_hist_fields()
2294 hist_data->fields[i] = NULL; in destroy_hist_fields()
2306 ref_field->var.hist_data = var_field->hist_data; in init_var_ref()
2361 ref_field = create_hist_field(var_field->hist_data, NULL, flags, NULL); in create_var_ref()
2380 static char *field_name_from_var(struct hist_trigger_data *hist_data, in field_name_from_var() argument
2386 for (i = 0; i < hist_data->attrs->var_defs.n_vars; i++) { in field_name_from_var()
2387 name = hist_data->attrs->var_defs.name[i]; in field_name_from_var()
2390 field = hist_data->attrs->var_defs.expr[i]; in field_name_from_var()
2400 static char *local_field_var_ref(struct hist_trigger_data *hist_data, in local_field_var_ref() argument
2407 call = hist_data->event_file->event_call; in local_field_var_ref()
2424 return field_name_from_var(hist_data, var_name); in local_field_var_ref()
2427 static struct hist_field *parse_var_ref(struct hist_trigger_data *hist_data, in parse_var_ref() argument
2438 var_field = find_event_var(hist_data, system, event_name, var_name); in parse_var_ref()
2450 parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file, in parse_field() argument
2486 hist_data->enable_timestamps = true; in parse_field()
2488 hist_data->attrs->ts_in_usecs = true; in parse_field()
2505 static struct hist_field *create_alias(struct hist_trigger_data *hist_data, in create_alias() argument
2512 alias = create_hist_field(hist_data, NULL, flags, var_name); in create_alias()
2527 static struct hist_field *parse_atom(struct hist_trigger_data *hist_data, in parse_atom() argument
2554 s = local_field_var_ref(hist_data, ref_system, ref_event, ref_var); in parse_atom()
2556 hist_field = parse_var_ref(hist_data, ref_system, ref_event, ref_var); in parse_atom()
2558 hist_data->var_refs[hist_data->n_var_refs] = hist_field; in parse_atom()
2559 hist_field->var_ref_idx = hist_data->n_var_refs++; in parse_atom()
2561 hist_field = create_alias(hist_data, hist_field, var_name); in parse_atom()
2572 field = parse_field(hist_data, file, str, flags); in parse_atom()
2578 hist_field = create_hist_field(hist_data, field, *flags, var_name); in parse_atom()
2589 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,
2594 static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, in parse_unary() argument
2631 expr = create_hist_field(hist_data, NULL, flags, var_name); in parse_unary()
2638 operand1 = parse_expr(hist_data, file, str, operand_flags, NULL, ++level); in parse_unary()
2672 var = find_var_field(operand1->var.hist_data, operand1->name); in check_expr_operands()
2682 var = find_var_field(operand2->var.hist_data, operand2->name); in check_expr_operands()
2697 static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, in parse_expr() argument
2715 return parse_atom(hist_data, file, str, &flags, var_name); in parse_expr()
2718 return parse_unary(hist_data, file, str, flags, var_name, ++level); in parse_expr()
2736 operand1 = parse_atom(hist_data, file, operand1_str, in parse_expr()
2746 operand2 = parse_expr(hist_data, file, str, operand_flags, NULL, ++level); in parse_expr()
2762 expr = create_hist_field(hist_data, NULL, flags, var_name); in parse_expr()
2802 static char *find_trigger_filter(struct hist_trigger_data *hist_data, in find_trigger_filter() argument
2809 if (test->private_data == hist_data) in find_trigger_filter()
2823 struct hist_trigger_data *hist_data, in compatible_keys() argument
2829 if (hist_data->n_fields - hist_data->n_vals != n_keys) in compatible_keys()
2832 i = hist_data->n_vals; in compatible_keys()
2836 hist_field = hist_data->fields[i + n]; in compatible_keys()
2854 struct hist_trigger_data *hist_data; in find_compatible_hist() local
2862 hist_data = test->private_data; in find_compatible_hist()
2864 if (compatible_keys(target_hist_data, hist_data, n_keys)) in find_compatible_hist()
2865 return hist_data; in find_compatible_hist()
2936 struct hist_trigger_data *hist_data; in create_field_var_hist() local
2966 hist_data = find_compatible_hist(target_hist_data, file); in create_field_var_hist()
2967 if (!hist_data) { in create_field_var_hist()
2992 for_each_hist_key_field(i, hist_data) { in create_field_var_hist()
2993 key_field = hist_data->fields[i]; in create_field_var_hist()
3007 saved_filter = find_trigger_filter(hist_data, file); in create_field_var_hist()
3021 var_hist->hist_data = hist_data; in create_field_var_hist()
3056 find_target_event_var(struct hist_trigger_data *hist_data, in find_target_event_var() argument
3059 struct trace_event_file *file = hist_data->event_file; in find_target_event_var()
3077 hist_field = find_var_field(hist_data, var_name); in find_target_event_var()
3112 static void update_field_vars(struct hist_trigger_data *hist_data, in update_field_vars() argument
3117 __update_field_vars(elt, rbe, rec, hist_data->field_vars, in update_field_vars()
3118 hist_data->n_field_vars, 0); in update_field_vars()
3121 static void update_max_vars(struct hist_trigger_data *hist_data, in update_max_vars() argument
3126 __update_field_vars(elt, rbe, rec, hist_data->max_vars, in update_max_vars()
3127 hist_data->n_max_vars, hist_data->n_field_var_str); in update_max_vars()
3130 static struct hist_field *create_var(struct hist_trigger_data *hist_data, in create_var() argument
3137 if (find_var(hist_data, file, name) && !hist_data->remove) { in create_var()
3148 idx = tracing_map_add_var(hist_data->map); in create_var()
3157 var->var.hist_data = var->hist_data = hist_data; in create_var()
3171 static struct field_var *create_field_var(struct hist_trigger_data *hist_data, in create_field_var() argument
3180 if (hist_data->n_field_vars >= SYNTH_FIELDS_MAX) { in create_field_var()
3186 val = parse_atom(hist_data, file, field_name, &flags, NULL); in create_field_var()
3193 var = create_var(hist_data, file, field_name, val->size, val->type); in create_field_var()
3263 struct hist_trigger_data *hist_data, in onmax_print() argument
3271 for (i = 0; i < hist_data->n_max_vars; i++) { in onmax_print()
3272 struct hist_field *save_val = hist_data->max_vars[i]->val; in onmax_print()
3273 struct hist_field *save_var = hist_data->max_vars[i]->var; in onmax_print()
3288 static void onmax_save(struct hist_trigger_data *hist_data, in onmax_save() argument
3306 update_max_vars(hist_data, elt, rbe, rec); in onmax_save()
3325 static int onmax_create(struct hist_trigger_data *hist_data, in onmax_create() argument
3328 struct trace_event_file *file = hist_data->event_file; in onmax_create()
3330 unsigned int var_ref_idx = hist_data->n_var_refs; in onmax_create()
3344 var_field = find_target_event_var(hist_data, NULL, NULL, onmax_var_str); in onmax_create()
3351 ref_field = create_hist_field(hist_data, NULL, flags, NULL); in onmax_create()
3360 hist_data->var_refs[hist_data->n_var_refs] = ref_field; in onmax_create()
3361 ref_field->var_ref_idx = hist_data->n_var_refs++; in onmax_create()
3366 max_var = create_var(hist_data, file, "max", sizeof(u64), "u64"); in onmax_create()
3381 field_var = create_target_field_var(hist_data, NULL, NULL, param); in onmax_create()
3389 hist_data->max_vars[hist_data->n_max_vars++] = field_var; in onmax_create()
3391 hist_data->n_max_var_str++; in onmax_create()
3522 static void destroy_field_vars(struct hist_trigger_data *hist_data) in destroy_field_vars() argument
3526 for (i = 0; i < hist_data->n_field_vars; i++) in destroy_field_vars()
3527 destroy_field_var(hist_data->field_vars[i]); in destroy_field_vars()
3530 static void save_field_var(struct hist_trigger_data *hist_data, in save_field_var() argument
3533 hist_data->field_vars[hist_data->n_field_vars++] = field_var; in save_field_var()
3536 hist_data->n_field_var_str++; in save_field_var()
3540 static void destroy_synth_var_refs(struct hist_trigger_data *hist_data) in destroy_synth_var_refs() argument
3544 for (i = 0; i < hist_data->n_synth_var_refs; i++) in destroy_synth_var_refs()
3545 destroy_hist_field(hist_data->synth_var_refs[i], 0); in destroy_synth_var_refs()
3548 static void save_synth_var_ref(struct hist_trigger_data *hist_data, in save_synth_var_ref() argument
3551 hist_data->synth_var_refs[hist_data->n_synth_var_refs++] = var_ref; in save_synth_var_ref()
3553 hist_data->var_refs[hist_data->n_var_refs] = var_ref; in save_synth_var_ref()
3554 var_ref->var_ref_idx = hist_data->n_var_refs++; in save_synth_var_ref()
3575 onmatch_find_var(struct hist_trigger_data *hist_data, struct action_data *data, in onmatch_find_var() argument
3582 hist_field = find_target_event_var(hist_data, system, event, var); in onmatch_find_var()
3589 hist_field = find_event_var(hist_data, system, event, var); in onmatch_find_var()
3599 onmatch_create_field_var(struct hist_trigger_data *hist_data, in onmatch_create_field_var() argument
3612 field_var = create_target_field_var(hist_data, system, event, var); in onmatch_create_field_var()
3615 save_field_var(hist_data, field_var); in onmatch_create_field_var()
3636 hist_field = create_field_var_hist(hist_data, system, event, var); in onmatch_create_field_var()
3648 static int onmatch_create(struct hist_trigger_data *hist_data, in onmatch_create() argument
3669 var_ref_idx = hist_data->n_var_refs; in onmatch_create()
3694 hist_field = onmatch_find_var(hist_data, data, system, in onmatch_create()
3697 hist_field = onmatch_create_field_var(hist_data, data, in onmatch_create()
3716 save_synth_var_ref(hist_data, var_ref); in onmatch_create()
3824 static int create_hitcount_val(struct hist_trigger_data *hist_data) in create_hitcount_val() argument
3826 hist_data->fields[HITCOUNT_IDX] = in create_hitcount_val()
3827 create_hist_field(hist_data, NULL, HIST_FIELD_FL_HITCOUNT, NULL); in create_hitcount_val()
3828 if (!hist_data->fields[HITCOUNT_IDX]) in create_hitcount_val()
3831 hist_data->n_vals++; in create_hitcount_val()
3832 hist_data->n_fields++; in create_hitcount_val()
3834 if (WARN_ON(hist_data->n_vals > TRACING_MAP_VALS_MAX)) in create_hitcount_val()
3840 static int __create_val_field(struct hist_trigger_data *hist_data, in __create_val_field() argument
3849 hist_field = parse_expr(hist_data, file, field_str, flags, var_name, 0); in __create_val_field()
3855 hist_data->fields[val_idx] = hist_field; in __create_val_field()
3857 ++hist_data->n_vals; in __create_val_field()
3858 ++hist_data->n_fields; in __create_val_field()
3860 if (WARN_ON(hist_data->n_vals > TRACING_MAP_VALS_MAX + TRACING_MAP_VARS_MAX)) in __create_val_field()
3866 static int create_val_field(struct hist_trigger_data *hist_data, in create_val_field() argument
3874 return __create_val_field(hist_data, val_idx, file, NULL, field_str, 0); in create_val_field()
3877 static int create_var_field(struct hist_trigger_data *hist_data, in create_var_field() argument
3887 if (find_var(hist_data, file, var_name) && !hist_data->remove) { in create_var_field()
3893 hist_data->n_vars++; in create_var_field()
3894 if (WARN_ON(hist_data->n_vars > TRACING_MAP_VARS_MAX)) in create_var_field()
3897 return __create_val_field(hist_data, val_idx, file, var_name, expr_str, flags); in create_var_field()
3900 static int create_val_fields(struct hist_trigger_data *hist_data, in create_val_fields() argument
3907 ret = create_hitcount_val(hist_data); in create_val_fields()
3911 fields_str = hist_data->attrs->vals_str; in create_val_fields()
3928 ret = create_val_field(hist_data, j++, file, field_str); in create_val_fields()
3939 static int create_key_field(struct hist_trigger_data *hist_data, in create_key_field() argument
3959 hist_field = create_hist_field(hist_data, NULL, flags, NULL); in create_key_field()
3961 hist_field = parse_expr(hist_data, file, field_str, flags, in create_key_field()
3978 hist_data->fields[key_idx] = hist_field; in create_key_field()
3981 hist_data->fields[key_idx]->size = key_size; in create_key_field()
3982 hist_data->fields[key_idx]->offset = key_offset; in create_key_field()
3984 hist_data->key_size += key_size; in create_key_field()
3986 if (hist_data->key_size > HIST_KEY_SIZE_MAX) { in create_key_field()
3991 hist_data->n_keys++; in create_key_field()
3992 hist_data->n_fields++; in create_key_field()
3994 if (WARN_ON(hist_data->n_keys > TRACING_MAP_KEYS_MAX)) in create_key_field()
4002 static int create_key_fields(struct hist_trigger_data *hist_data, in create_key_fields() argument
4005 unsigned int i, key_offset = 0, n_vals = hist_data->n_vals; in create_key_fields()
4009 fields_str = hist_data->attrs->keys_str; in create_key_fields()
4021 ret = create_key_field(hist_data, i, key_offset, in create_key_fields()
4036 static int create_var_fields(struct hist_trigger_data *hist_data, in create_var_fields() argument
4039 unsigned int i, j = hist_data->n_vals; in create_var_fields()
4042 unsigned int n_vars = hist_data->attrs->var_defs.n_vars; in create_var_fields()
4045 char *var_name = hist_data->attrs->var_defs.name[i]; in create_var_fields()
4046 char *expr = hist_data->attrs->var_defs.expr[i]; in create_var_fields()
4048 ret = create_var_field(hist_data, j++, file, var_name, expr); in create_var_fields()
4056 static void free_var_defs(struct hist_trigger_data *hist_data) in free_var_defs() argument
4060 for (i = 0; i < hist_data->attrs->var_defs.n_vars; i++) { in free_var_defs()
4061 kfree(hist_data->attrs->var_defs.name[i]); in free_var_defs()
4062 kfree(hist_data->attrs->var_defs.expr[i]); in free_var_defs()
4065 hist_data->attrs->var_defs.n_vars = 0; in free_var_defs()
4068 static int parse_var_defs(struct hist_trigger_data *hist_data) in parse_var_defs() argument
4074 for (i = 0; i < hist_data->attrs->n_assignments; i++) { in parse_var_defs()
4075 str = hist_data->attrs->assignment_str[i]; in parse_var_defs()
4099 hist_data->attrs->var_defs.name[n_vars] = s; in parse_var_defs()
4103 kfree(hist_data->attrs->var_defs.name[n_vars]); in parse_var_defs()
4107 hist_data->attrs->var_defs.expr[n_vars++] = s; in parse_var_defs()
4109 hist_data->attrs->var_defs.n_vars = n_vars; in parse_var_defs()
4115 free_var_defs(hist_data); in parse_var_defs()
4120 static int create_hist_fields(struct hist_trigger_data *hist_data, in create_hist_fields() argument
4125 ret = parse_var_defs(hist_data); in create_hist_fields()
4129 ret = create_val_fields(hist_data, file); in create_hist_fields()
4133 ret = create_var_fields(hist_data, file); in create_hist_fields()
4137 ret = create_key_fields(hist_data, file); in create_hist_fields()
4141 free_var_defs(hist_data); in create_hist_fields()
4160 static int create_sort_keys(struct hist_trigger_data *hist_data) in create_sort_keys() argument
4162 char *fields_str = hist_data->attrs->sort_key_str; in create_sort_keys()
4167 hist_data->n_sort_keys = 1; /* we always have at least one, hitcount */ in create_sort_keys()
4183 sort_key = &hist_data->sort_keys[i]; in create_sort_keys()
4213 for (j = 1, k = 1; j < hist_data->n_fields; j++) { in create_sort_keys()
4216 hist_field = hist_data->fields[j]; in create_sort_keys()
4235 if (j == hist_data->n_fields) { in create_sort_keys()
4241 hist_data->n_sort_keys = i; in create_sort_keys()
4246 static void destroy_actions(struct hist_trigger_data *hist_data) in destroy_actions() argument
4250 for (i = 0; i < hist_data->n_actions; i++) { in destroy_actions()
4251 struct action_data *data = hist_data->actions[i]; in destroy_actions()
4262 static int parse_actions(struct hist_trigger_data *hist_data) in parse_actions() argument
4264 struct trace_array *tr = hist_data->event_file->tr; in parse_actions()
4270 for (i = 0; i < hist_data->attrs->n_actions; i++) { in parse_actions()
4271 str = hist_data->attrs->action_str[i]; in parse_actions()
4296 hist_data->actions[hist_data->n_actions++] = data; in parse_actions()
4302 static int create_actions(struct hist_trigger_data *hist_data, in create_actions() argument
4309 for (i = 0; i < hist_data->attrs->n_actions; i++) { in create_actions()
4310 data = hist_data->actions[i]; in create_actions()
4313 ret = onmatch_create(hist_data, file, data); in create_actions()
4317 ret = onmax_create(hist_data, data); in create_actions()
4327 struct hist_trigger_data *hist_data, in print_actions() argument
4332 for (i = 0; i < hist_data->n_actions; i++) { in print_actions()
4333 struct action_data *data = hist_data->actions[i]; in print_actions()
4336 onmax_print(m, hist_data, elt, data); in print_actions()
4341 struct hist_trigger_data *hist_data, in print_onmax_spec() argument
4350 for (i = 0; i < hist_data->n_max_vars; i++) { in print_onmax_spec()
4351 seq_printf(m, "%s", hist_data->max_vars[i]->var->var.name); in print_onmax_spec()
4352 if (i < hist_data->n_max_vars - 1) in print_onmax_spec()
4359 struct hist_trigger_data *hist_data, in print_onmatch_spec() argument
4378 static bool actions_match(struct hist_trigger_data *hist_data, in actions_match() argument
4383 if (hist_data->n_actions != hist_data_test->n_actions) in actions_match()
4386 for (i = 0; i < hist_data->n_actions; i++) { in actions_match()
4387 struct action_data *data = hist_data->actions[i]; in actions_match()
4426 struct hist_trigger_data *hist_data) in print_actions_spec() argument
4430 for (i = 0; i < hist_data->n_actions; i++) { in print_actions_spec()
4431 struct action_data *data = hist_data->actions[i]; in print_actions_spec()
4434 print_onmatch_spec(m, hist_data, data); in print_actions_spec()
4436 print_onmax_spec(m, hist_data, data); in print_actions_spec()
4440 static void destroy_field_var_hists(struct hist_trigger_data *hist_data) in destroy_field_var_hists() argument
4444 for (i = 0; i < hist_data->n_field_var_hists; i++) { in destroy_field_var_hists()
4445 kfree(hist_data->field_var_hists[i]->cmd); in destroy_field_var_hists()
4446 kfree(hist_data->field_var_hists[i]); in destroy_field_var_hists()
4450 static void destroy_hist_data(struct hist_trigger_data *hist_data) in destroy_hist_data() argument
4452 if (!hist_data) in destroy_hist_data()
4455 destroy_hist_trigger_attrs(hist_data->attrs); in destroy_hist_data()
4456 destroy_hist_fields(hist_data); in destroy_hist_data()
4457 tracing_map_destroy(hist_data->map); in destroy_hist_data()
4459 destroy_actions(hist_data); in destroy_hist_data()
4460 destroy_field_vars(hist_data); in destroy_hist_data()
4461 destroy_field_var_hists(hist_data); in destroy_hist_data()
4462 destroy_synth_var_refs(hist_data); in destroy_hist_data()
4464 kfree(hist_data); in destroy_hist_data()
4467 static int create_tracing_map_fields(struct hist_trigger_data *hist_data) in create_tracing_map_fields() argument
4469 struct tracing_map *map = hist_data->map; in create_tracing_map_fields()
4474 for_each_hist_field(i, hist_data) { in create_tracing_map_fields()
4475 hist_field = hist_data->fields[i]; in create_tracing_map_fields()
4505 hist_field->var.hist_data = hist_data; in create_tracing_map_fields()
4519 struct hist_trigger_data *hist_data; in create_hist_data() local
4522 hist_data = kzalloc(sizeof(*hist_data), GFP_KERNEL); in create_hist_data()
4523 if (!hist_data) in create_hist_data()
4526 hist_data->attrs = attrs; in create_hist_data()
4527 hist_data->remove = remove; in create_hist_data()
4528 hist_data->event_file = file; in create_hist_data()
4530 ret = parse_actions(hist_data); in create_hist_data()
4534 ret = create_hist_fields(hist_data, file); in create_hist_data()
4538 ret = create_sort_keys(hist_data); in create_hist_data()
4544 hist_data->map = tracing_map_create(map_bits, hist_data->key_size, in create_hist_data()
4545 map_ops, hist_data); in create_hist_data()
4546 if (IS_ERR(hist_data->map)) { in create_hist_data()
4547 ret = PTR_ERR(hist_data->map); in create_hist_data()
4548 hist_data->map = NULL; in create_hist_data()
4552 ret = create_tracing_map_fields(hist_data); in create_hist_data()
4556 return hist_data; in create_hist_data()
4558 hist_data->attrs = NULL; in create_hist_data()
4560 destroy_hist_data(hist_data); in create_hist_data()
4562 hist_data = ERR_PTR(ret); in create_hist_data()
4567 static void hist_trigger_elt_update(struct hist_trigger_data *hist_data, in hist_trigger_elt_update() argument
4580 for_each_hist_val_field(i, hist_data) { in hist_trigger_elt_update()
4581 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4591 for_each_hist_key_field(i, hist_data) { in hist_trigger_elt_update()
4592 hist_field = hist_data->fields[i]; in hist_trigger_elt_update()
4600 update_field_vars(hist_data, elt, rbe, rec); in hist_trigger_elt_update()
4628 hist_trigger_actions(struct hist_trigger_data *hist_data, in hist_trigger_actions() argument
4635 for (i = 0; i < hist_data->n_actions; i++) { in hist_trigger_actions()
4636 data = hist_data->actions[i]; in hist_trigger_actions()
4637 data->fn(hist_data, elt, rec, rbe, data, var_ref_vals); in hist_trigger_actions()
4644 struct hist_trigger_data *hist_data = data->private_data; in event_hist_trigger() local
4645 bool use_compound_key = (hist_data->n_keys > 1); in event_hist_trigger()
4656 memset(compound_key, 0, hist_data->key_size); in event_hist_trigger()
4658 for_each_hist_key_field(i, hist_data) { in event_hist_trigger()
4659 key_field = hist_data->fields[i]; in event_hist_trigger()
4687 if (hist_data->n_var_refs && in event_hist_trigger()
4688 !resolve_var_refs(hist_data, key, var_ref_vals, false)) in event_hist_trigger()
4691 elt = tracing_map_insert(hist_data->map, key); in event_hist_trigger()
4695 hist_trigger_elt_update(hist_data, elt, rec, rbe, var_ref_vals); in event_hist_trigger()
4697 if (resolve_var_refs(hist_data, key, var_ref_vals, true)) in event_hist_trigger()
4698 hist_trigger_actions(hist_data, elt, rec, rbe, var_ref_vals); in event_hist_trigger()
4721 struct hist_trigger_data *hist_data, void *key, in hist_trigger_entry_print() argument
4733 for_each_hist_key_field(i, hist_data) { in hist_trigger_entry_print()
4734 key_field = hist_data->fields[i]; in hist_trigger_entry_print()
4736 if (i > hist_data->n_vals) in hist_trigger_entry_print()
4802 for (i = 1; i < hist_data->n_vals; i++) { in hist_trigger_entry_print()
4803 field_name = hist_field_name(hist_data->fields[i], 0); in hist_trigger_entry_print()
4805 if (hist_data->fields[i]->flags & HIST_FIELD_FL_VAR || in hist_trigger_entry_print()
4806 hist_data->fields[i]->flags & HIST_FIELD_FL_EXPR) in hist_trigger_entry_print()
4809 if (hist_data->fields[i]->flags & HIST_FIELD_FL_HEX) { in hist_trigger_entry_print()
4818 print_actions(m, hist_data, elt); in hist_trigger_entry_print()
4824 struct hist_trigger_data *hist_data) in print_entries() argument
4827 struct tracing_map *map = hist_data->map; in print_entries()
4830 n_entries = tracing_map_sort_entries(map, hist_data->sort_keys, in print_entries()
4831 hist_data->n_sort_keys, in print_entries()
4837 hist_trigger_entry_print(m, hist_data, in print_entries()
4849 struct hist_trigger_data *hist_data; in hist_trigger_show() local
4859 hist_data = data->private_data; in hist_trigger_show()
4860 n_entries = print_entries(m, hist_data); in hist_trigger_show()
4865 (u64)atomic64_read(&hist_data->map->hits), in hist_trigger_show()
4866 n_entries, (u64)atomic64_read(&hist_data->map->drops)); in hist_trigger_show()
4943 struct hist_trigger_data *hist_data = data->private_data; in event_hist_trigger_print() local
4955 for_each_hist_key_field(i, hist_data) { in event_hist_trigger_print()
4956 field = hist_data->fields[i]; in event_hist_trigger_print()
4958 if (i > hist_data->n_vals) in event_hist_trigger_print()
4969 for_each_hist_val_field(i, hist_data) { in event_hist_trigger_print()
4970 field = hist_data->fields[i]; in event_hist_trigger_print()
4989 for_each_hist_val_field(i, hist_data) { in event_hist_trigger_print()
4990 field = hist_data->fields[i]; in event_hist_trigger_print()
5002 for (i = 0; i < hist_data->n_sort_keys; i++) { in event_hist_trigger_print()
5007 first_key_idx = hist_data->n_vals - hist_data->n_vars; in event_hist_trigger_print()
5009 sort_key = &hist_data->sort_keys[i]; in event_hist_trigger_print()
5022 idx += hist_data->n_vars; in event_hist_trigger_print()
5023 hist_field_print(m, hist_data->fields[idx]); in event_hist_trigger_print()
5029 seq_printf(m, ":size=%u", (1 << hist_data->map->map_bits)); in event_hist_trigger_print()
5030 if (hist_data->enable_timestamps) in event_hist_trigger_print()
5031 seq_printf(m, ":clock=%s", hist_data->attrs->clock); in event_hist_trigger_print()
5033 print_actions_spec(m, hist_data); in event_hist_trigger_print()
5051 struct hist_trigger_data *hist_data = data->private_data; in event_hist_trigger_init() local
5053 if (!data->ref && hist_data->attrs->name) in event_hist_trigger_init()
5054 save_named_trigger(hist_data->attrs->name, data); in event_hist_trigger_init()
5061 static void unregister_field_var_hists(struct hist_trigger_data *hist_data) in unregister_field_var_hists() argument
5068 for (i = 0; i < hist_data->n_field_var_hists; i++) { in unregister_field_var_hists()
5069 file = hist_data->field_var_hists[i]->hist_data->event_file; in unregister_field_var_hists()
5070 cmd = hist_data->field_var_hists[i]->cmd; in unregister_field_var_hists()
5079 struct hist_trigger_data *hist_data = data->private_data; in event_hist_trigger_free() local
5091 remove_hist_vars(hist_data); in event_hist_trigger_free()
5093 unregister_field_var_hists(hist_data); in event_hist_trigger_free()
5095 destroy_hist_data(hist_data); in event_hist_trigger_free()
5148 struct hist_trigger_data *hist_data = data->private_data; in hist_clear() local
5155 tracing_map_clear(hist_data->map); in hist_clear()
5186 struct hist_trigger_data *hist_data, *hist_data_test; in hist_trigger_match() local
5197 hist_data = data->private_data; in hist_trigger_match()
5200 if (hist_data->n_vals != hist_data_test->n_vals || in hist_trigger_match()
5201 hist_data->n_fields != hist_data_test->n_fields || in hist_trigger_match()
5202 hist_data->n_sort_keys != hist_data_test->n_sort_keys) in hist_trigger_match()
5211 for_each_hist_field(i, hist_data) { in hist_trigger_match()
5212 key_field = hist_data->fields[i]; in hist_trigger_match()
5232 for (i = 0; i < hist_data->n_sort_keys; i++) { in hist_trigger_match()
5233 sort_key = &hist_data->sort_keys[i]; in hist_trigger_match()
5245 if (!actions_match(hist_data, hist_data_test)) in hist_trigger_match()
5255 struct hist_trigger_data *hist_data = data->private_data; in hist_register_trigger() local
5259 if (hist_data->attrs->name) { in hist_register_trigger()
5260 named_data = find_named_trigger(hist_data->attrs->name); in hist_register_trigger()
5264 …hist trigger doesn't match existing named trigger (includes variables): ", hist_data->attrs->name); in hist_register_trigger()
5271 if (hist_data->attrs->name && !named_data) in hist_register_trigger()
5278 if (hist_data->attrs->pause) in hist_register_trigger()
5280 else if (hist_data->attrs->cont) in hist_register_trigger()
5282 else if (hist_data->attrs->clear) in hist_register_trigger()
5292 if (hist_data->attrs->cont || hist_data->attrs->clear) { in hist_register_trigger()
5298 if (hist_data->attrs->pause) in hist_register_trigger()
5313 if (hist_data->enable_timestamps) { in hist_register_trigger()
5314 char *clock = hist_data->attrs->clock; in hist_register_trigger()
5316 ret = tracing_set_clock(file->tr, hist_data->attrs->clock); in hist_register_trigger()
5326 destroy_hist_data(hist_data); in hist_register_trigger()
5354 struct hist_trigger_data *hist_data = data->private_data; in have_hist_trigger_match() local
5358 if (hist_data->attrs->name) in have_hist_trigger_match()
5359 named_data = find_named_trigger(hist_data->attrs->name); in have_hist_trigger_match()
5376 struct hist_trigger_data *hist_data = data->private_data; in hist_trigger_check_refs() local
5379 if (hist_data->attrs->name) in hist_trigger_check_refs()
5380 named_data = find_named_trigger(hist_data->attrs->name); in hist_trigger_check_refs()
5386 hist_data = test->private_data; in hist_trigger_check_refs()
5387 if (check_var_refs(hist_data)) in hist_trigger_check_refs()
5400 struct hist_trigger_data *hist_data = data->private_data; in hist_unregister_trigger() local
5404 if (hist_data->attrs->name) in hist_unregister_trigger()
5405 named_data = find_named_trigger(hist_data->attrs->name); in hist_unregister_trigger()
5422 if (hist_data->enable_timestamps) { in hist_unregister_trigger()
5423 if (!hist_data->remove || unregistered) in hist_unregister_trigger()
5430 struct hist_trigger_data *hist_data; in hist_file_check_refs() local
5435 hist_data = test->private_data; in hist_file_check_refs()
5436 if (check_var_refs(hist_data)) in hist_file_check_refs()
5447 struct hist_trigger_data *hist_data; in hist_unreg_all() local
5456 hist_data = test->private_data; in hist_unreg_all()
5468 if (hist_data->enable_timestamps) in hist_unreg_all()
5484 struct hist_trigger_data *hist_data; in event_hist_trigger_func() local
5541 hist_data = create_hist_data(hist_trigger_bits, attrs, file, remove); in event_hist_trigger_func()
5542 if (IS_ERR(hist_data)) { in event_hist_trigger_func()
5544 return PTR_ERR(hist_data); in event_hist_trigger_func()
5562 trigger_data->private_data = hist_data; in event_hist_trigger_func()
5609 if (has_hist_vars(hist_data)) in event_hist_trigger_func()
5610 save_hist_vars(hist_data); in event_hist_trigger_func()
5612 ret = create_actions(hist_data, file); in event_hist_trigger_func()
5616 ret = tracing_map_init(hist_data->map); in event_hist_trigger_func()
5644 remove_hist_vars(hist_data); in event_hist_trigger_func()
5648 destroy_hist_data(hist_data); in event_hist_trigger_func()