Lines Matching +full:single +full:- +full:trigger

1 // SPDX-License-Identifier: GPL-2.0
14 * enable_tracer_by_name - enable a tracer on the given instance
31 return -1; in enable_tracer_by_name()
38 * disable_tracer - set nop tracer to the insta
51 * create_instance - create a trace instance with *instance_name
59 * destroy_instance - remove a trace instance and free the data
68 * save_trace_to_file - save the trace output of the instance to the file
76 int retval = -1; in save_trace_to_file()
81 return -1; in save_trace_to_file()
109 * collect_registered_events - call the existing callback function for the event
119 struct trace_seq *s = trace->seq; in collect_registered_events()
121 trace->processed_events++; in collect_registered_events()
123 if (!event->handler) in collect_registered_events()
126 event->handler(s, record, event, context); in collect_registered_events()
132 * collect_missed_events - record number of missed events
144 if (trace->missed_events == UINT64_MAX) in collect_missed_events()
147 if (record->missed_events > 0) in collect_missed_events()
148 trace->missed_events += record->missed_events; in collect_missed_events()
151 trace->missed_events = UINT64_MAX; in collect_missed_events()
157 * trace_instance_destroy - destroy and free a rtla trace instance
161 if (trace->inst) { in trace_instance_destroy()
162 disable_tracer(trace->inst); in trace_instance_destroy()
163 destroy_instance(trace->inst); in trace_instance_destroy()
164 trace->inst = NULL; in trace_instance_destroy()
167 if (trace->seq) { in trace_instance_destroy()
168 free(trace->seq); in trace_instance_destroy()
169 trace->seq = NULL; in trace_instance_destroy()
172 if (trace->tep) { in trace_instance_destroy()
173 tep_free(trace->tep); in trace_instance_destroy()
174 trace->tep = NULL; in trace_instance_destroy()
179 * trace_instance_init - create an rtla trace instance
191 trace->seq = calloc(1, sizeof(*trace->seq)); in trace_instance_init()
192 if (!trace->seq) in trace_instance_init()
195 trace_seq_init(trace->seq); in trace_instance_init()
197 trace->inst = create_instance(tool_name); in trace_instance_init()
198 if (!trace->inst) in trace_instance_init()
201 trace->tep = tracefs_local_events(NULL); in trace_instance_init()
202 if (!trace->tep) in trace_instance_init()
209 tracefs_trace_off(trace->inst); in trace_instance_init()
215 trace->missed_events = 0; in trace_instance_init()
216 tracefs_follow_missed_events(trace->inst, in trace_instance_init()
220 trace->processed_events = 0; in trace_instance_init()
230 * trace_instance_start - start tracing a given rtla instance
234 return tracefs_trace_on(trace->inst); in trace_instance_start()
238 * trace_instance_stop - stop tracing a given rtla instance
242 return tracefs_trace_off(trace->inst); in trace_instance_stop()
246 * trace_events_free - free a list of trace events
256 tevent = tevent->next; in trace_events_free()
258 if (free_event->filter) in trace_events_free()
259 free(free_event->filter); in trace_events_free()
260 if (free_event->trigger) in trace_events_free()
261 free(free_event->trigger); in trace_events_free()
262 free(free_event->system); in trace_events_free()
268 * trace_event_alloc - alloc and parse a single trace event
278 tevent->system = strdup(event_string); in trace_event_alloc()
279 if (!tevent->system) { in trace_event_alloc()
284 tevent->event = strstr(tevent->system, ":"); in trace_event_alloc()
285 if (tevent->event) { in trace_event_alloc()
286 *tevent->event = '\0'; in trace_event_alloc()
287 tevent->event = &tevent->event[1]; in trace_event_alloc()
294 * trace_event_add_filter - record an event filter
298 if (event->filter) in trace_event_add_filter()
299 free(event->filter); in trace_event_add_filter()
301 event->filter = strdup(filter); in trace_event_add_filter()
302 if (!event->filter) in trace_event_add_filter()
309 * trace_event_add_trigger - record an event trigger action
311 int trace_event_add_trigger(struct trace_events *event, char *trigger) in trace_event_add_trigger() argument
313 if (event->trigger) in trace_event_add_trigger()
314 free(event->trigger); in trace_event_add_trigger()
316 event->trigger = strdup(trigger); in trace_event_add_trigger()
317 if (!event->trigger) in trace_event_add_trigger()
324 * trace_event_disable_filter - disable an event filter
332 if (!tevent->filter) in trace_event_disable_filter()
335 if (!tevent->filter_enabled) in trace_event_disable_filter()
338 debug_msg("Disabling %s:%s filter %s\n", tevent->system, in trace_event_disable_filter()
339 tevent->event ? : "*", tevent->filter); in trace_event_disable_filter()
341 snprintf(filter, 1024, "!%s\n", tevent->filter); in trace_event_disable_filter()
343 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_disable_filter()
344 tevent->event, "filter", filter); in trace_event_disable_filter()
346 err_msg("Error disabling %s:%s filter %s\n", tevent->system, in trace_event_disable_filter()
347 tevent->event ? : "*", tevent->filter); in trace_event_disable_filter()
351 * trace_event_save_hist - save the content of an event hist
353 * If the trigger is a hist: one, save the content of the hist file.
366 /* trigger enables hist */ in trace_event_save_hist()
367 if (!tevent->trigger) in trace_event_save_hist()
370 /* is this a hist: trigger? */ in trace_event_save_hist()
371 retval = strncmp(tevent->trigger, "hist:", strlen("hist:")); in trace_event_save_hist()
375 snprintf(path, 1024, "%s_%s_hist.txt", tevent->system, tevent->event); in trace_event_save_hist()
377 printf(" Saving event %s:%s hist to %s\n", tevent->system, tevent->event, path); in trace_event_save_hist()
385 hist = tracefs_event_file_read(instance->inst, tevent->system, tevent->event, "hist", 0); in trace_event_save_hist()
387 err_msg(" Failed to read %s:%s hist file\n", tevent->system, tevent->event); in trace_event_save_hist()
393 index += write(out_fd, &hist[index], strlen(hist) - index); in trace_event_save_hist()
402 * trace_event_disable_trigger - disable an event trigger
407 char trigger[1024]; in trace_event_disable_trigger() local
410 if (!tevent->trigger) in trace_event_disable_trigger()
413 if (!tevent->trigger_enabled) in trace_event_disable_trigger()
416 debug_msg("Disabling %s:%s trigger %s\n", tevent->system, in trace_event_disable_trigger()
417 tevent->event ? : "*", tevent->trigger); in trace_event_disable_trigger()
421 snprintf(trigger, 1024, "!%s\n", tevent->trigger); in trace_event_disable_trigger()
423 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_disable_trigger()
424 tevent->event, "trigger", trigger); in trace_event_disable_trigger()
426 err_msg("Error disabling %s:%s trigger %s\n", tevent->system, in trace_event_disable_trigger()
427 tevent->event ? : "*", tevent->trigger); in trace_event_disable_trigger()
431 * trace_events_disable - disable all trace events
442 debug_msg("Disabling event %s:%s\n", tevent->system, tevent->event ? : "*"); in trace_events_disable()
443 if (tevent->enabled) { in trace_events_disable()
446 tracefs_event_disable(instance->inst, tevent->system, tevent->event); in trace_events_disable()
449 tevent->enabled = 0; in trace_events_disable()
450 tevent = tevent->next; in trace_events_disable()
455 * trace_event_enable_filter - enable an event filter associated with an event
463 if (!tevent->filter) in trace_event_enable_filter()
466 if (!tevent->event) { in trace_event_enable_filter()
467 err_msg("Filter %s applies only for single events, not for all %s:* events\n", in trace_event_enable_filter()
468 tevent->filter, tevent->system); in trace_event_enable_filter()
472 snprintf(filter, 1024, "%s\n", tevent->filter); in trace_event_enable_filter()
474 debug_msg("Enabling %s:%s filter %s\n", tevent->system, in trace_event_enable_filter()
475 tevent->event ? : "*", tevent->filter); in trace_event_enable_filter()
477 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_enable_filter()
478 tevent->event, "filter", filter); in trace_event_enable_filter()
480 err_msg("Error enabling %s:%s filter %s\n", tevent->system, in trace_event_enable_filter()
481 tevent->event ? : "*", tevent->filter); in trace_event_enable_filter()
485 tevent->filter_enabled = 1; in trace_event_enable_filter()
490 * trace_event_enable_trigger - enable an event trigger associated with an event
495 char trigger[1024]; in trace_event_enable_trigger() local
498 if (!tevent->trigger) in trace_event_enable_trigger()
501 if (!tevent->event) { in trace_event_enable_trigger()
502 err_msg("Trigger %s applies only for single events, not for all %s:* events\n", in trace_event_enable_trigger()
503 tevent->trigger, tevent->system); in trace_event_enable_trigger()
507 snprintf(trigger, 1024, "%s\n", tevent->trigger); in trace_event_enable_trigger()
509 debug_msg("Enabling %s:%s trigger %s\n", tevent->system, in trace_event_enable_trigger()
510 tevent->event ? : "*", tevent->trigger); in trace_event_enable_trigger()
512 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_enable_trigger()
513 tevent->event, "trigger", trigger); in trace_event_enable_trigger()
515 err_msg("Error enabling %s:%s trigger %s\n", tevent->system, in trace_event_enable_trigger()
516 tevent->event ? : "*", tevent->trigger); in trace_event_enable_trigger()
520 tevent->trigger_enabled = 1; in trace_event_enable_trigger()
526 * trace_events_enable - enable all events
535 debug_msg("Enabling event %s:%s\n", tevent->system, tevent->event ? : "*"); in trace_events_enable()
536 retval = tracefs_event_enable(instance->inst, tevent->system, tevent->event); in trace_events_enable()
538 err_msg("Error enabling event %s:%s\n", tevent->system, in trace_events_enable()
539 tevent->event ? : "*"); in trace_events_enable()
551 tevent->enabled = 1; in trace_events_enable()
552 tevent = tevent->next; in trace_events_enable()
559 * trace_events_destroy - disable and free all trace events
572 * trace_set_buffer_size - set the per-cpu tracing buffer size.
579 retval = tracefs_instance_set_buffer_size(trace->inst, size, -1); in trace_set_buffer_size()