• Home
  • Raw
  • Download

Lines Matching +full:se +full:- +full:pos

1 // SPDX-License-Identifier: GPL-2.0
3 * trace_events_synth - synthetic trace events
29 C(INVALID_DYN_CMD, "Command must be of the form: s or -:[synthetic/]<name> field[;field] ..."),\
104 return ev->ops == &synth_event_ops; in is_synth_event()
116 return event->ref != 0; in synth_event_is_busy()
124 return strcmp(sev->name, event) == 0 && in synth_event_match()
137 struct synth_event *event = call->data; in synth_event_define_fields()
143 for (i = 0, n_u64 = 0; i < event->n_fields; i++) { in synth_event_define_fields()
144 size = event->fields[i]->size; in synth_event_define_fields()
145 is_signed = event->fields[i]->is_signed; in synth_event_define_fields()
146 type = event->fields[i]->type; in synth_event_define_fields()
147 name = event->fields[i]->name; in synth_event_define_fields()
153 event->fields[i]->offset = n_u64; in synth_event_define_fields()
155 if (event->fields[i]->is_string && !event->fields[i]->is_dynamic) { in synth_event_define_fields()
164 event->n_u64 = n_u64; in synth_event_define_fields()
203 return -EINVAL; in synth_field_string_size()
204 start += sizeof("char[") - 1; in synth_field_string_size()
208 return -EINVAL; in synth_field_string_size()
210 len = end - start; in synth_field_string_size()
212 return -EINVAL; in synth_field_string_size()
215 return 0; /* variable-length string */ in synth_field_string_size()
225 return -EINVAL; in synth_field_string_size()
328 trace_seq_printf(s, print_fmt, name, val->as_u8, space); in print_synth_event_num_val()
332 trace_seq_printf(s, print_fmt, name, val->as_u16, space); in print_synth_event_num_val()
336 trace_seq_printf(s, print_fmt, name, val->as_u32, space); in print_synth_event_num_val()
340 trace_seq_printf(s, print_fmt, name, val->as_u64, space); in print_synth_event_num_val()
349 struct trace_array *tr = iter->tr; in print_synth_event()
350 struct trace_seq *s = &iter->seq; in print_synth_event()
352 struct synth_event *se; in print_synth_event() local
357 entry = (struct synth_trace_event *)iter->ent; in print_synth_event()
358 se = container_of(event, struct synth_event, call.event); in print_synth_event()
360 trace_seq_printf(s, "%s: ", se->name); in print_synth_event()
362 for (i = 0, n_u64 = 0; i < se->n_fields; i++) { in print_synth_event()
366 fmt = synth_field_fmt(se->fields[i]->type); in print_synth_event()
369 if (tr && tr->trace_flags & TRACE_ITER_VERBOSE) in print_synth_event()
375 if (se->fields[i]->is_string) { in print_synth_event()
376 if (se->fields[i]->is_dynamic) { in print_synth_event()
377 union trace_synth_field *data = &entry->fields[n_u64]; in print_synth_event()
379 trace_seq_printf(s, print_fmt, se->fields[i]->name, in print_synth_event()
381 (char *)entry + data->as_dynamic.offset, in print_synth_event()
382 i == se->n_fields - 1 ? "" : " "); in print_synth_event()
385 trace_seq_printf(s, print_fmt, se->fields[i]->name, in print_synth_event()
387 (char *)&entry->fields[n_u64].as_u64, in print_synth_event()
388 i == se->n_fields - 1 ? "" : " "); in print_synth_event()
391 } else if (se->fields[i]->is_stack) { in print_synth_event()
392 union trace_synth_field *data = &entry->fields[n_u64]; in print_synth_event()
393 unsigned long *p = (void *)entry + data->as_dynamic.offset; in print_synth_event()
395 trace_seq_printf(s, "%s=STACK:\n", se->fields[i]->name); in print_synth_event()
396 for (j = 1; j < data->as_dynamic.len / sizeof(long); j++) in print_synth_event()
401 __def_gfpflag_names, {-1, NULL} }; in print_synth_event()
402 char *space = (i == se->n_fields - 1 ? "" : " "); in print_synth_event()
405 se->fields[i]->name, in print_synth_event()
406 se->fields[i]->size, in print_synth_event()
407 &entry->fields[n_u64], in print_synth_event()
410 if (strcmp(se->fields[i]->type, "gfp_t") == 0) { in print_synth_event()
413 entry->fields[n_u64].as_u64, in print_synth_event()
442 union trace_synth_field *data = &entry->fields[*n_u64]; in trace_string()
445 data->as_dynamic.offset = struct_size(entry, fields, event->n_u64) + data_size; in trace_string()
446 data->as_dynamic.len = len; in trace_string()
448 ret = fetch_store_string((unsigned long)str_val, &entry->fields[*n_u64], entry); in trace_string()
452 str_field = (char *)&entry->fields[*n_u64].as_u64; in trace_string()
476 union trace_synth_field *data = &entry->fields[*n_u64]; in trace_stack()
481 data_offset = struct_size(entry, fields, event->n_u64); in trace_stack()
497 data->as_dynamic.offset = data_offset; in trace_stack()
498 data->as_dynamic.len = len; in trace_stack()
517 event = trace_file->event_call->data; in trace_event_raw_event_synth()
522 fields_size = event->n_u64 * sizeof(u64); in trace_event_raw_event_synth()
524 for (i = 0; i < event->n_dynamic_fields; i++) { in trace_event_raw_event_synth()
525 unsigned int field_pos = event->dynamic_fields[i]->field_pos; in trace_event_raw_event_synth()
531 if (event->dynamic_fields[i]->is_stack) { in trace_event_raw_event_synth()
546 buffer = trace_file->tr->array_buffer.buffer; in trace_event_raw_event_synth()
554 for (i = 0, n_u64 = 0; i < event->n_fields; i++) { in trace_event_raw_event_synth()
556 if (event->fields[i]->is_string) { in trace_event_raw_event_synth()
560 event->fields[i]->is_dynamic, in trace_event_raw_event_synth()
563 } else if (event->fields[i]->is_stack) { in trace_event_raw_event_synth()
570 struct synth_field *field = event->fields[i]; in trace_event_raw_event_synth()
573 switch (field->size) { in trace_event_raw_event_synth()
575 entry->fields[n_u64].as_u8 = (u8)val; in trace_event_raw_event_synth()
579 entry->fields[n_u64].as_u16 = (u16)val; in trace_event_raw_event_synth()
583 entry->fields[n_u64].as_u32 = (u32)val; in trace_event_raw_event_synth()
587 entry->fields[n_u64].as_u64 = val; in trace_event_raw_event_synth()
602 kfree(call->print_fmt); in free_synth_event_print_fmt()
603 call->print_fmt = NULL; in free_synth_event_print_fmt()
611 int pos = 0; in __set_synth_event_print_fmt() local
615 #define LEN_OR_ZERO (len ? len - pos : 0) in __set_synth_event_print_fmt()
617 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); in __set_synth_event_print_fmt()
618 for (i = 0; i < event->n_fields; i++) { in __set_synth_event_print_fmt()
619 fmt = synth_field_fmt(event->fields[i]->type); in __set_synth_event_print_fmt()
620 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s=%s%s", in __set_synth_event_print_fmt()
621 event->fields[i]->name, fmt, in __set_synth_event_print_fmt()
622 i == event->n_fields - 1 ? "" : ", "); in __set_synth_event_print_fmt()
624 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); in __set_synth_event_print_fmt()
626 for (i = 0; i < event->n_fields; i++) { in __set_synth_event_print_fmt()
627 if (event->fields[i]->is_string && in __set_synth_event_print_fmt()
628 event->fields[i]->is_dynamic) in __set_synth_event_print_fmt()
629 pos += snprintf(buf + pos, LEN_OR_ZERO, in __set_synth_event_print_fmt()
630 ", __get_str(%s)", event->fields[i]->name); in __set_synth_event_print_fmt()
631 else if (event->fields[i]->is_stack) in __set_synth_event_print_fmt()
632 pos += snprintf(buf + pos, LEN_OR_ZERO, in __set_synth_event_print_fmt()
633 ", __get_stacktrace(%s)", event->fields[i]->name); in __set_synth_event_print_fmt()
635 pos += snprintf(buf + pos, LEN_OR_ZERO, in __set_synth_event_print_fmt()
636 ", REC->%s", event->fields[i]->name); in __set_synth_event_print_fmt()
642 return pos; in __set_synth_event_print_fmt()
647 struct synth_event *event = call->data; in set_synth_event_print_fmt()
656 return -ENOMEM; in set_synth_event_print_fmt()
660 call->print_fmt = print_fmt; in set_synth_event_print_fmt()
667 kfree(field->type); in free_synth_field()
668 kfree(field->name); in free_synth_field()
694 int len, ret = -ENOMEM; in parse_synth_field()
701 return ERR_PTR(-EINVAL); in parse_synth_field()
714 return ERR_PTR(-EINVAL); in parse_synth_field()
721 return ERR_PTR(-ENOMEM); in parse_synth_field()
726 len -= strlen(array); in parse_synth_field()
728 field->name = kmemdup_nul(field_name, len, GFP_KERNEL); in parse_synth_field()
729 if (!field->name) in parse_synth_field()
732 if (!is_good_name(field->name)) { in parse_synth_field()
734 ret = -EINVAL; in parse_synth_field()
746 field->type = kzalloc(len, GFP_KERNEL); in parse_synth_field()
747 if (!field->type) in parse_synth_field()
750 seq_buf_init(&s, field->type, len); in parse_synth_field()
761 size = synth_field_size(field->type); in parse_synth_field()
767 ret = -EINVAL; in parse_synth_field()
770 if (synth_field_is_string(field->type) || in parse_synth_field()
771 synth_field_is_stack(field->type)) { in parse_synth_field()
774 len = sizeof("__data_loc ") + strlen(field->type) + 1; in parse_synth_field()
781 seq_buf_puts(&s, field->type); in parse_synth_field()
787 kfree(field->type); in parse_synth_field()
788 field->type = type; in parse_synth_field()
790 field->is_dynamic = true; in parse_synth_field()
794 ret = -EINVAL; in parse_synth_field()
798 field->size = size; in parse_synth_field()
800 if (synth_field_is_string(field->type)) in parse_synth_field()
801 field->is_string = true; in parse_synth_field()
802 else if (synth_field_is_stack(field->type)) in parse_synth_field()
803 field->is_stack = true; in parse_synth_field()
805 field->is_signed = synth_field_signed(field->type); in parse_synth_field()
819 kfree(tp->name); in free_synth_tracepoint()
829 return ERR_PTR(-ENOMEM); in alloc_synth_tracepoint()
831 tp->name = kstrdup(name, GFP_KERNEL); in alloc_synth_tracepoint()
832 if (!tp->name) { in alloc_synth_tracepoint()
834 return ERR_PTR(-ENOMEM); in alloc_synth_tracepoint()
842 struct dyn_event *pos; in find_synth_event() local
845 for_each_dyn_event(pos) { in find_synth_event()
846 if (!is_synth_event(pos)) in find_synth_event()
848 event = to_synth_event(pos); in find_synth_event()
849 if (strcmp(event->name, name) == 0) in find_synth_event()
864 struct trace_event_call *call = &event->call; in register_synth_event()
867 event->call.class = &event->class; in register_synth_event()
868 event->class.system = kstrdup(SYNTH_SYSTEM, GFP_KERNEL); in register_synth_event()
869 if (!event->class.system) { in register_synth_event()
870 ret = -ENOMEM; in register_synth_event()
874 event->tp = alloc_synth_tracepoint(event->name); in register_synth_event()
875 if (IS_ERR(event->tp)) { in register_synth_event()
876 ret = PTR_ERR(event->tp); in register_synth_event()
877 event->tp = NULL; in register_synth_event()
881 INIT_LIST_HEAD(&call->class->fields); in register_synth_event()
882 call->event.funcs = &synth_event_funcs; in register_synth_event()
883 call->class->fields_array = synth_event_fields_array; in register_synth_event()
885 ret = register_trace_event(&call->event); in register_synth_event()
887 ret = -ENODEV; in register_synth_event()
890 call->flags = TRACE_EVENT_FL_TRACEPOINT; in register_synth_event()
891 call->class->reg = trace_event_reg; in register_synth_event()
892 call->class->probe = trace_event_raw_event_synth; in register_synth_event()
893 call->data = event; in register_synth_event()
894 call->tp = event->tp; in register_synth_event()
910 unregister_trace_event(&call->event); in register_synth_event()
916 struct trace_event_call *call = &event->call; in unregister_synth_event()
931 for (i = 0; i < event->n_fields; i++) in free_synth_event()
932 free_synth_field(event->fields[i]); in free_synth_event()
934 kfree(event->fields); in free_synth_event()
935 kfree(event->dynamic_fields); in free_synth_event()
936 kfree(event->name); in free_synth_event()
937 kfree(event->class.system); in free_synth_event()
938 free_synth_tracepoint(event->tp); in free_synth_event()
939 free_synth_event_print_fmt(&event->call); in free_synth_event()
951 event = ERR_PTR(-ENOMEM); in alloc_synth_event()
955 event->name = kstrdup(name, GFP_KERNEL); in alloc_synth_event()
956 if (!event->name) { in alloc_synth_event()
958 event = ERR_PTR(-ENOMEM); in alloc_synth_event()
962 event->fields = kcalloc(n_fields, sizeof(*event->fields), GFP_KERNEL); in alloc_synth_event()
963 if (!event->fields) { in alloc_synth_event()
965 event = ERR_PTR(-ENOMEM); in alloc_synth_event()
970 if (fields[i]->is_dynamic) in alloc_synth_event()
974 event->dynamic_fields = kcalloc(n_dynamic_fields, in alloc_synth_event()
975 sizeof(*event->dynamic_fields), in alloc_synth_event()
977 if (!event->dynamic_fields) { in alloc_synth_event()
979 event = ERR_PTR(-ENOMEM); in alloc_synth_event()
984 dyn_event_init(&event->devent, &synth_event_ops); in alloc_synth_event()
987 fields[i]->field_pos = i; in alloc_synth_event()
988 event->fields[i] = fields[i]; in alloc_synth_event()
990 if (fields[i]->is_dynamic) in alloc_synth_event()
991 event->dynamic_fields[j++] = fields[i]; in alloc_synth_event()
993 event->n_dynamic_fields = j; in alloc_synth_event()
994 event->n_fields = n_fields; in alloc_synth_event()
1004 size = synth_field_size((char *)arg_pair->lhs); in synth_event_check_arg_fn()
1006 if (strstr((char *)arg_pair->lhs, "[")) in synth_event_check_arg_fn()
1010 return size ? 0 : -EINVAL; in synth_event_check_arg_fn()
1014 * synth_event_add_field - Add a new field to a synthetic event cmd
1033 if (cmd->type != DYNEVENT_TYPE_SYNTH) in synth_event_add_field()
1034 return -EINVAL; in synth_event_add_field()
1037 return -EINVAL; in synth_event_add_field()
1048 if (++cmd->n_fields > SYNTH_FIELDS_MAX) in synth_event_add_field()
1049 ret = -EINVAL; in synth_event_add_field()
1056 * synth_event_add_field_str - Add a new field to a synthetic event cmd
1062 * name', which will be appended by ';'. No sanity checking is done -
1063 * what's passed in is assumed to already be well-formed. Field
1076 if (cmd->type != DYNEVENT_TYPE_SYNTH) in synth_event_add_field_str()
1077 return -EINVAL; in synth_event_add_field_str()
1080 return -EINVAL; in synth_event_add_field_str()
1090 if (++cmd->n_fields > SYNTH_FIELDS_MAX) in synth_event_add_field_str()
1091 ret = -EINVAL; in synth_event_add_field_str()
1098 * synth_event_add_fields - Add multiple fields to a synthetic event cmd
1123 ret = -EINVAL; in synth_event_add_fields()
1137 * __synth_event_gen_cmd_start - Start a synthetic event command from arg list
1171 cmd->event_name = name; in __synth_event_gen_cmd_start()
1172 cmd->private_data = mod; in __synth_event_gen_cmd_start()
1174 if (cmd->type != DYNEVENT_TYPE_SYNTH) in __synth_event_gen_cmd_start()
1175 return -EINVAL; in __synth_event_gen_cmd_start()
1194 if (++cmd->n_fields > SYNTH_FIELDS_MAX) { in __synth_event_gen_cmd_start()
1195 ret = -EINVAL; in __synth_event_gen_cmd_start()
1210 * synth_event_gen_cmd_array_start - Start synthetic event command from an array
1243 cmd->event_name = name; in synth_event_gen_cmd_array_start()
1244 cmd->private_data = mod; in synth_event_gen_cmd_array_start()
1246 if (cmd->type != DYNEVENT_TYPE_SYNTH) in synth_event_gen_cmd_array_start()
1247 return -EINVAL; in synth_event_gen_cmd_array_start()
1250 return -EINVAL; in synth_event_gen_cmd_array_start()
1260 return -EINVAL; in synth_event_gen_cmd_array_start()
1281 * - Add synthetic event: <event_name> field[;field] ... in __create_synth_event()
1282 * - Remove synthetic event: !<event_name> field[;field] ... in __create_synth_event()
1288 return -EINVAL; in __create_synth_event()
1293 return -EINVAL; in __create_synth_event()
1301 ret = -EEXIST; in __create_synth_event()
1307 ret = -ENOMEM; in __create_synth_event()
1314 ret = -ENOMEM; in __create_synth_event()
1328 field = parse_synth_field(argc - consumed, in __create_synth_event()
1355 ret = -EINVAL; in __create_synth_event()
1361 ret = -EINVAL; in __create_synth_event()
1372 ret = -EINVAL; in __create_synth_event()
1380 ret = -EINVAL; in __create_synth_event()
1392 dyn_event_add(&event->devent, &event->call); in __create_synth_event()
1411 * synth_event_create - Create a new synthetic event
1425 * param must be non-NULL. This will ensure that the trace buffer
1443 return -ENOMEM; in synth_event_create()
1460 static int destroy_synth_event(struct synth_event *se) in destroy_synth_event() argument
1464 if (se->ref) in destroy_synth_event()
1465 return -EBUSY; in destroy_synth_event()
1467 if (trace_event_dyn_busy(&se->call)) in destroy_synth_event()
1468 return -EBUSY; in destroy_synth_event()
1470 ret = unregister_synth_event(se); in destroy_synth_event()
1472 dyn_event_remove(&se->devent); in destroy_synth_event()
1473 free_synth_event(se); in destroy_synth_event()
1480 * synth_event_delete - Delete a synthetic event
1489 struct synth_event *se = NULL; in synth_event_delete() local
1491 int ret = -ENOENT; in synth_event_delete()
1494 se = find_synth_event(event_name); in synth_event_delete()
1495 if (se) { in synth_event_delete()
1496 mod = se->mod; in synth_event_delete()
1497 ret = destroy_synth_event(se); in synth_event_delete()
1526 return -ENOMEM; in check_command()
1530 ret = -EINVAL; in check_command()
1539 ret = -ENOMEM; in check_command()
1545 ret = -EINVAL; in check_command()
1572 ret = -EINVAL; in create_or_delete_synth_event()
1576 name = kmemdup_nul(raw_command, p ? p - raw_command : strlen(raw_command), GFP_KERNEL); in create_or_delete_synth_event()
1578 return -ENOMEM; in create_or_delete_synth_event()
1596 struct synth_event *se; in synth_event_run_command() local
1599 ret = create_or_delete_synth_event(cmd->seq.buffer); in synth_event_run_command()
1603 se = find_synth_event(cmd->event_name); in synth_event_run_command()
1604 if (WARN_ON(!se)) in synth_event_run_command()
1605 return -ENOENT; in synth_event_run_command()
1607 se->mod = cmd->private_data; in synth_event_run_command()
1613 * synth_event_cmd_init - Initialize a synthetic event command object
1645 if (!(file->flags & EVENT_FILE_FL_ENABLED) || in __synth_event_trace_init()
1647 trace_state->disabled = true; in __synth_event_trace_init()
1648 ret = -ENOENT; in __synth_event_trace_init()
1652 trace_state->event = file->event_call->data; in __synth_event_trace_init()
1665 fields_size = trace_state->event->n_u64 * sizeof(u64); in __synth_event_trace_start()
1672 trace_state->buffer = file->tr->array_buffer.buffer; in __synth_event_trace_start()
1673 ring_buffer_nest_start(trace_state->buffer); in __synth_event_trace_start()
1675 entry_size = sizeof(*trace_state->entry) + fields_size; in __synth_event_trace_start()
1676 trace_state->entry = trace_event_buffer_reserve(&trace_state->fbuffer, in __synth_event_trace_start()
1679 if (!trace_state->entry) { in __synth_event_trace_start()
1680 ring_buffer_nest_end(trace_state->buffer); in __synth_event_trace_start()
1681 ret = -EINVAL; in __synth_event_trace_start()
1690 trace_event_buffer_commit(&trace_state->fbuffer); in __synth_event_trace_end()
1692 ring_buffer_nest_end(trace_state->buffer); in __synth_event_trace_end()
1696 * synth_event_trace - Trace a synthetic event
1723 if (ret == -ENOENT) in synth_event_trace()
1728 if (state.event->n_dynamic_fields) { in synth_event_trace()
1731 for (i = 0; i < state.event->n_fields; i++) { in synth_event_trace()
1734 if (state.event->fields[i]->is_string && in synth_event_trace()
1735 state.event->fields[i]->is_dynamic) { in synth_event_trace()
1749 if (n_vals != state.event->n_fields) { in synth_event_trace()
1750 ret = -EINVAL; in synth_event_trace()
1757 for (i = 0, n_u64 = 0; i < state.event->n_fields; i++) { in synth_event_trace()
1762 if (state.event->fields[i]->is_string) { in synth_event_trace()
1766 state.event->fields[i]->is_dynamic, in synth_event_trace()
1770 struct synth_field *field = state.event->fields[i]; in synth_event_trace()
1772 switch (field->size) { in synth_event_trace()
1774 state.entry->fields[n_u64].as_u8 = (u8)val; in synth_event_trace()
1778 state.entry->fields[n_u64].as_u16 = (u16)val; in synth_event_trace()
1782 state.entry->fields[n_u64].as_u32 = (u32)val; in synth_event_trace()
1786 state.entry->fields[n_u64].as_u64 = val; in synth_event_trace()
1801 * synth_event_trace_array - Trace a synthetic event from an array
1828 if (ret == -ENOENT) in synth_event_trace_array()
1833 if (state.event->n_dynamic_fields) { in synth_event_trace_array()
1834 for (i = 0; i < state.event->n_dynamic_fields; i++) { in synth_event_trace_array()
1835 field_pos = state.event->dynamic_fields[i]->field_pos; in synth_event_trace_array()
1846 if (n_vals != state.event->n_fields) { in synth_event_trace_array()
1847 ret = -EINVAL; in synth_event_trace_array()
1853 for (i = 0, n_u64 = 0; i < state.event->n_fields; i++) { in synth_event_trace_array()
1854 if (state.event->fields[i]->is_string) { in synth_event_trace_array()
1858 state.event->fields[i]->is_dynamic, in synth_event_trace_array()
1862 struct synth_field *field = state.event->fields[i]; in synth_event_trace_array()
1865 switch (field->size) { in synth_event_trace_array()
1867 state.entry->fields[n_u64].as_u8 = (u8)val; in synth_event_trace_array()
1871 state.entry->fields[n_u64].as_u16 = (u16)val; in synth_event_trace_array()
1875 state.entry->fields[n_u64].as_u32 = (u32)val; in synth_event_trace_array()
1879 state.entry->fields[n_u64].as_u64 = val; in synth_event_trace_array()
1893 * synth_event_trace_start - Start piecewise synthetic event trace
1897 * Start the trace of a synthetic event field-by-field rather than all
1926 return -EINVAL; in synth_event_trace_start()
1930 if (ret == -ENOENT) in synth_event_trace_start()
1935 if (trace_state->event->n_dynamic_fields) in synth_event_trace_start()
1936 return -ENOTSUPP; in synth_event_trace_start()
1953 ret = -EINVAL; in __synth_event_add_val()
1959 if (trace_state->add_next) { in __synth_event_add_val()
1960 ret = -EINVAL; in __synth_event_add_val()
1963 trace_state->add_name = true; in __synth_event_add_val()
1965 if (trace_state->add_name) { in __synth_event_add_val()
1966 ret = -EINVAL; in __synth_event_add_val()
1969 trace_state->add_next = true; in __synth_event_add_val()
1972 if (trace_state->disabled) in __synth_event_add_val()
1975 event = trace_state->event; in __synth_event_add_val()
1976 if (trace_state->add_name) { in __synth_event_add_val()
1977 for (i = 0; i < event->n_fields; i++) { in __synth_event_add_val()
1978 field = event->fields[i]; in __synth_event_add_val()
1979 if (strcmp(field->name, field_name) == 0) in __synth_event_add_val()
1983 ret = -EINVAL; in __synth_event_add_val()
1987 if (trace_state->cur_field >= event->n_fields) { in __synth_event_add_val()
1988 ret = -EINVAL; in __synth_event_add_val()
1991 field = event->fields[trace_state->cur_field++]; in __synth_event_add_val()
1994 entry = trace_state->entry; in __synth_event_add_val()
1995 if (field->is_string) { in __synth_event_add_val()
1999 if (field->is_dynamic) { /* add_val can't do dynamic strings */ in __synth_event_add_val()
2000 ret = -EINVAL; in __synth_event_add_val()
2005 ret = -EINVAL; in __synth_event_add_val()
2009 str_field = (char *)&entry->fields[field->offset]; in __synth_event_add_val()
2012 switch (field->size) { in __synth_event_add_val()
2014 trace_state->entry->fields[field->offset].as_u8 = (u8)val; in __synth_event_add_val()
2018 trace_state->entry->fields[field->offset].as_u16 = (u16)val; in __synth_event_add_val()
2022 trace_state->entry->fields[field->offset].as_u32 = (u32)val; in __synth_event_add_val()
2026 trace_state->entry->fields[field->offset].as_u64 = val; in __synth_event_add_val()
2035 * synth_event_add_next_val - Add the next field's value to an open synth trace
2046 * after another - successive calls to this function are made, one for
2053 * synth_event_add_val() can't be intermixed for a given event trace -
2070 * synth_event_add_val - Add a named field's value to an open synth trace
2084 * none-piecewise synth_event_trace() instead if efficiency is more
2088 * synth_event_add_val() can't be intermixed for a given event trace -
2105 * synth_event_trace_end - End piecewise synthetic event trace
2127 return -EINVAL; in synth_event_trace_end()
2151 return -ECANCELED; in create_synth_event()
2157 return -EINVAL; in create_synth_event()
2167 return -EINVAL; in create_synth_event()
2172 len = name - raw_command; in create_synth_event()
2180 name = kmemdup_nul(raw_command + len, p - raw_command - len, GFP_KERNEL); in create_synth_event()
2182 return -ENOMEM; in create_synth_event()
2196 if (event->ref) in synth_event_release()
2197 return -EBUSY; in synth_event_release()
2199 if (trace_event_dyn_busy(&event->call)) in synth_event_release()
2200 return -EBUSY; in synth_event_release()
2217 seq_printf(m, "%s\t", event->name); in __synth_event_show()
2219 for (i = 0; i < event->n_fields; i++) { in __synth_event_show()
2220 field = event->fields[i]; in __synth_event_show()
2222 type = field->type; in __synth_event_show()
2230 seq_printf(m, "%s %s%s", type, field->name, in __synth_event_show()
2231 i == event->n_fields - 1 ? "" : "; "); in __synth_event_show()
2243 seq_printf(m, "s:%s/", event->class.system); in synth_event_show()
2273 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) { in synth_events_open()
2325 err = -ENODEV; in trace_events_synth_init()