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()
84 return -1; in save_trace_to_file()
113 * collect_registered_events - call the existing callback function for the event
123 struct trace_seq *s = trace->seq; in collect_registered_events()
125 trace->processed_events++; in collect_registered_events()
127 if (!event->handler) in collect_registered_events()
130 event->handler(s, record, event, context); in collect_registered_events()
136 * collect_missed_events - record number of missed events
148 if (trace->missed_events == UINT64_MAX) in collect_missed_events()
151 if (record->missed_events > 0) in collect_missed_events()
152 trace->missed_events += record->missed_events; in collect_missed_events()
155 trace->missed_events = UINT64_MAX; in collect_missed_events()
161 * trace_instance_destroy - destroy and free a rtla trace instance
165 if (trace->inst) { in trace_instance_destroy()
166 disable_tracer(trace->inst); in trace_instance_destroy()
167 destroy_instance(trace->inst); in trace_instance_destroy()
168 trace->inst = NULL; in trace_instance_destroy()
171 if (trace->seq) { in trace_instance_destroy()
172 free(trace->seq); in trace_instance_destroy()
173 trace->seq = NULL; in trace_instance_destroy()
176 if (trace->tep) { in trace_instance_destroy()
177 tep_free(trace->tep); in trace_instance_destroy()
178 trace->tep = NULL; in trace_instance_destroy()
183 * trace_instance_init - create an rtla trace instance
195 trace->seq = calloc(1, sizeof(*trace->seq)); in trace_instance_init()
196 if (!trace->seq) in trace_instance_init()
199 trace_seq_init(trace->seq); in trace_instance_init()
201 trace->inst = create_instance(tool_name); in trace_instance_init()
202 if (!trace->inst) in trace_instance_init()
205 trace->tep = tracefs_local_events(NULL); in trace_instance_init()
206 if (!trace->tep) in trace_instance_init()
213 tracefs_trace_off(trace->inst); in trace_instance_init()
219 trace->missed_events = 0; in trace_instance_init()
220 tracefs_follow_missed_events(trace->inst, in trace_instance_init()
224 trace->processed_events = 0; in trace_instance_init()
234 * trace_instance_start - start tracing a given rtla instance
238 return tracefs_trace_on(trace->inst); in trace_instance_start()
242 * trace_instance_stop - stop tracing a given rtla instance
246 return tracefs_trace_off(trace->inst); in trace_instance_stop()
250 * trace_events_free - free a list of trace events
260 tevent = tevent->next; in trace_events_free()
262 if (free_event->filter) in trace_events_free()
263 free(free_event->filter); in trace_events_free()
264 if (free_event->trigger) in trace_events_free()
265 free(free_event->trigger); in trace_events_free()
266 free(free_event->system); in trace_events_free()
272 * trace_event_alloc - alloc and parse a single trace event
282 tevent->system = strdup(event_string); in trace_event_alloc()
283 if (!tevent->system) { in trace_event_alloc()
288 tevent->event = strstr(tevent->system, ":"); in trace_event_alloc()
289 if (tevent->event) { in trace_event_alloc()
290 *tevent->event = '\0'; in trace_event_alloc()
291 tevent->event = &tevent->event[1]; in trace_event_alloc()
298 * trace_event_add_filter - record an event filter
302 if (event->filter) in trace_event_add_filter()
303 free(event->filter); in trace_event_add_filter()
305 event->filter = strdup(filter); in trace_event_add_filter()
306 if (!event->filter) in trace_event_add_filter()
313 * trace_event_add_trigger - record an event trigger action
315 int trace_event_add_trigger(struct trace_events *event, char *trigger) in trace_event_add_trigger() argument
317 if (event->trigger) in trace_event_add_trigger()
318 free(event->trigger); in trace_event_add_trigger()
320 event->trigger = strdup(trigger); in trace_event_add_trigger()
321 if (!event->trigger) in trace_event_add_trigger()
328 * trace_event_disable_filter - disable an event filter
336 if (!tevent->filter) in trace_event_disable_filter()
339 if (!tevent->filter_enabled) in trace_event_disable_filter()
342 debug_msg("Disabling %s:%s filter %s\n", tevent->system, in trace_event_disable_filter()
343 tevent->event ? : "*", tevent->filter); in trace_event_disable_filter()
345 snprintf(filter, 1024, "!%s\n", tevent->filter); in trace_event_disable_filter()
347 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_disable_filter()
348 tevent->event, "filter", filter); in trace_event_disable_filter()
350 err_msg("Error disabling %s:%s filter %s\n", tevent->system, in trace_event_disable_filter()
351 tevent->event ? : "*", tevent->filter); in trace_event_disable_filter()
355 * trace_event_save_hist - save the content of an event hist
357 * If the trigger is a hist: one, save the content of the hist file.
370 /* trigger enables hist */ in trace_event_save_hist()
371 if (!tevent->trigger) in trace_event_save_hist()
374 /* is this a hist: trigger? */ in trace_event_save_hist()
375 retval = strncmp(tevent->trigger, "hist:", strlen("hist:")); in trace_event_save_hist()
379 snprintf(path, 1024, "%s_%s_hist.txt", tevent->system, tevent->event); in trace_event_save_hist()
381 printf(" Saving event %s:%s hist to %s\n", tevent->system, tevent->event, path); in trace_event_save_hist()
389 hist = tracefs_event_file_read(instance->inst, tevent->system, tevent->event, "hist", 0); in trace_event_save_hist()
391 err_msg(" Failed to read %s:%s hist file\n", tevent->system, tevent->event); in trace_event_save_hist()
397 index += write(out_fd, &hist[index], strlen(hist) - index); in trace_event_save_hist()
406 * trace_event_disable_trigger - disable an event trigger
411 char trigger[1024]; in trace_event_disable_trigger() local
414 if (!tevent->trigger) in trace_event_disable_trigger()
417 if (!tevent->trigger_enabled) in trace_event_disable_trigger()
420 debug_msg("Disabling %s:%s trigger %s\n", tevent->system, in trace_event_disable_trigger()
421 tevent->event ? : "*", tevent->trigger); in trace_event_disable_trigger()
425 snprintf(trigger, 1024, "!%s\n", tevent->trigger); in trace_event_disable_trigger()
427 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_disable_trigger()
428 tevent->event, "trigger", trigger); in trace_event_disable_trigger()
430 err_msg("Error disabling %s:%s trigger %s\n", tevent->system, in trace_event_disable_trigger()
431 tevent->event ? : "*", tevent->trigger); in trace_event_disable_trigger()
435 * trace_events_disable - disable all trace events
446 debug_msg("Disabling event %s:%s\n", tevent->system, tevent->event ? : "*"); in trace_events_disable()
447 if (tevent->enabled) { in trace_events_disable()
450 tracefs_event_disable(instance->inst, tevent->system, tevent->event); in trace_events_disable()
453 tevent->enabled = 0; in trace_events_disable()
454 tevent = tevent->next; in trace_events_disable()
459 * trace_event_enable_filter - enable an event filter associated with an event
467 if (!tevent->filter) in trace_event_enable_filter()
470 if (!tevent->event) { in trace_event_enable_filter()
471 err_msg("Filter %s applies only for single events, not for all %s:* events\n", in trace_event_enable_filter()
472 tevent->filter, tevent->system); in trace_event_enable_filter()
476 snprintf(filter, 1024, "%s\n", tevent->filter); in trace_event_enable_filter()
478 debug_msg("Enabling %s:%s filter %s\n", tevent->system, in trace_event_enable_filter()
479 tevent->event ? : "*", tevent->filter); in trace_event_enable_filter()
481 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_enable_filter()
482 tevent->event, "filter", filter); in trace_event_enable_filter()
484 err_msg("Error enabling %s:%s filter %s\n", tevent->system, in trace_event_enable_filter()
485 tevent->event ? : "*", tevent->filter); in trace_event_enable_filter()
489 tevent->filter_enabled = 1; in trace_event_enable_filter()
494 * trace_event_enable_trigger - enable an event trigger associated with an event
499 char trigger[1024]; in trace_event_enable_trigger() local
502 if (!tevent->trigger) in trace_event_enable_trigger()
505 if (!tevent->event) { in trace_event_enable_trigger()
506 err_msg("Trigger %s applies only for single events, not for all %s:* events\n", in trace_event_enable_trigger()
507 tevent->trigger, tevent->system); in trace_event_enable_trigger()
511 snprintf(trigger, 1024, "%s\n", tevent->trigger); in trace_event_enable_trigger()
513 debug_msg("Enabling %s:%s trigger %s\n", tevent->system, in trace_event_enable_trigger()
514 tevent->event ? : "*", tevent->trigger); in trace_event_enable_trigger()
516 retval = tracefs_event_file_write(instance->inst, tevent->system, in trace_event_enable_trigger()
517 tevent->event, "trigger", trigger); in trace_event_enable_trigger()
519 err_msg("Error enabling %s:%s trigger %s\n", tevent->system, in trace_event_enable_trigger()
520 tevent->event ? : "*", tevent->trigger); in trace_event_enable_trigger()
524 tevent->trigger_enabled = 1; in trace_event_enable_trigger()
530 * trace_events_enable - enable all events
539 debug_msg("Enabling event %s:%s\n", tevent->system, tevent->event ? : "*"); in trace_events_enable()
540 retval = tracefs_event_enable(instance->inst, tevent->system, tevent->event); in trace_events_enable()
542 err_msg("Error enabling event %s:%s\n", tevent->system, in trace_events_enable()
543 tevent->event ? : "*"); in trace_events_enable()
555 tevent->enabled = 1; in trace_events_enable()
556 tevent = tevent->next; in trace_events_enable()
563 * trace_events_destroy - disable and free all trace events
576 * trace_set_buffer_size - set the per-cpu tracing buffer size.
583 retval = tracefs_instance_set_buffer_size(trace->inst, size, -1); in trace_set_buffer_size()