1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * trace_events_trigger - trace event triggers
4 *
5 * Copyright (C) 2013 Tom Zanussi <tom.zanussi@linux.intel.com>
6 */
7
8 #include <linux/security.h>
9 #include <linux/kthread.h>
10 #include <linux/module.h>
11 #include <linux/ctype.h>
12 #include <linux/mutex.h>
13 #include <linux/slab.h>
14 #include <linux/rculist.h>
15
16 #include "trace.h"
17
18 static LIST_HEAD(trigger_commands);
19 static DEFINE_MUTEX(trigger_cmd_mutex);
20
21 static struct task_struct *trigger_kthread;
22 static struct llist_head trigger_data_free_list;
23 static DEFINE_MUTEX(trigger_data_kthread_mutex);
24
25 /* Bulk garbage collection of event_trigger_data elements */
trigger_kthread_fn(void * ignore)26 static int trigger_kthread_fn(void *ignore)
27 {
28 struct event_trigger_data *data, *tmp;
29 struct llist_node *llnodes;
30
31 /* Once this task starts, it lives forever */
32 for (;;) {
33 set_current_state(TASK_INTERRUPTIBLE);
34 if (llist_empty(&trigger_data_free_list))
35 schedule();
36
37 __set_current_state(TASK_RUNNING);
38
39 llnodes = llist_del_all(&trigger_data_free_list);
40
41 /* make sure current triggers exit before free */
42 tracepoint_synchronize_unregister();
43
44 llist_for_each_entry_safe(data, tmp, llnodes, llist)
45 kfree(data);
46 }
47
48 return 0;
49 }
50
trigger_data_free(struct event_trigger_data * data)51 void trigger_data_free(struct event_trigger_data *data)
52 {
53 if (!data)
54 return;
55
56 if (data->cmd_ops->set_filter)
57 data->cmd_ops->set_filter(NULL, data, NULL);
58
59 if (unlikely(!trigger_kthread)) {
60 guard(mutex)(&trigger_data_kthread_mutex);
61 /* Check again after taking mutex */
62 if (!trigger_kthread) {
63 struct task_struct *kthread;
64
65 kthread = kthread_create(trigger_kthread_fn, NULL,
66 "trigger_data_free");
67 if (!IS_ERR(kthread))
68 WRITE_ONCE(trigger_kthread, kthread);
69 }
70 }
71
72 if (!trigger_kthread) {
73 /* Do it the slow way */
74 tracepoint_synchronize_unregister();
75 kfree(data);
76 return;
77 }
78
79 llist_add(&data->llist, &trigger_data_free_list);
80 wake_up_process(trigger_kthread);
81 }
82
data_ops_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)83 static inline void data_ops_trigger(struct event_trigger_data *data,
84 struct trace_buffer *buffer, void *rec,
85 struct ring_buffer_event *event)
86 {
87 const struct event_command *cmd_ops = data->cmd_ops;
88
89 if (data->flags & EVENT_TRIGGER_FL_COUNT) {
90 if (!cmd_ops->count_func(data, buffer, rec, event))
91 return;
92 }
93
94 cmd_ops->trigger(data, buffer, rec, event);
95 }
96
97 /**
98 * event_triggers_call - Call triggers associated with a trace event
99 * @file: The trace_event_file associated with the event
100 * @buffer: The ring buffer that the event is being written to
101 * @rec: The trace entry for the event, NULL for unconditional invocation
102 * @event: The event meta data in the ring buffer
103 *
104 * For each trigger associated with an event, invoke the trigger
105 * function registered with the associated trigger command. If rec is
106 * non-NULL, it means that the trigger requires further processing and
107 * shouldn't be unconditionally invoked. If rec is non-NULL and the
108 * trigger has a filter associated with it, rec will checked against
109 * the filter and if the record matches the trigger will be invoked.
110 * If the trigger is a 'post_trigger', meaning it shouldn't be invoked
111 * in any case until the current event is written, the trigger
112 * function isn't invoked but the bit associated with the deferred
113 * trigger is set in the return value.
114 *
115 * Returns an enum event_trigger_type value containing a set bit for
116 * any trigger that should be deferred, ETT_NONE if nothing to defer.
117 *
118 * Called from tracepoint handlers (with rcu_read_lock_sched() held).
119 *
120 * Return: an enum event_trigger_type value containing a set bit for
121 * any trigger that should be deferred, ETT_NONE if nothing to defer.
122 */
123 enum event_trigger_type
event_triggers_call(struct trace_event_file * file,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)124 event_triggers_call(struct trace_event_file *file,
125 struct trace_buffer *buffer, void *rec,
126 struct ring_buffer_event *event)
127 {
128 struct event_trigger_data *data;
129 enum event_trigger_type tt = ETT_NONE;
130 struct event_filter *filter;
131
132 if (list_empty(&file->triggers))
133 return tt;
134
135 list_for_each_entry_rcu(data, &file->triggers, list) {
136 if (data->paused)
137 continue;
138 if (!rec) {
139 data_ops_trigger(data, buffer, rec, event);
140 continue;
141 }
142 filter = rcu_dereference_sched(data->filter);
143 if (filter && !filter_match_preds(filter, rec))
144 continue;
145 if (event_command_post_trigger(data->cmd_ops)) {
146 tt |= data->cmd_ops->trigger_type;
147 continue;
148 }
149 data_ops_trigger(data, buffer, rec, event);
150 }
151 return tt;
152 }
153 EXPORT_SYMBOL_GPL(event_triggers_call);
154
__trace_trigger_soft_disabled(struct trace_event_file * file)155 bool __trace_trigger_soft_disabled(struct trace_event_file *file)
156 {
157 unsigned long eflags = file->flags;
158
159 if (eflags & EVENT_FILE_FL_TRIGGER_MODE)
160 event_triggers_call(file, NULL, NULL, NULL);
161 if (eflags & EVENT_FILE_FL_SOFT_DISABLED)
162 return true;
163 if (eflags & EVENT_FILE_FL_PID_FILTER)
164 return trace_event_ignore_this_pid(file);
165 return false;
166 }
167 EXPORT_SYMBOL_GPL(__trace_trigger_soft_disabled);
168
169 /**
170 * event_triggers_post_call - Call 'post_triggers' for a trace event
171 * @file: The trace_event_file associated with the event
172 * @tt: enum event_trigger_type containing a set bit for each trigger to invoke
173 *
174 * For each trigger associated with an event, invoke the trigger
175 * function registered with the associated trigger command, if the
176 * corresponding bit is set in the tt enum passed into this function.
177 * See @event_triggers_call for details on how those bits are set.
178 *
179 * Called from tracepoint handlers (with rcu_read_lock_sched() held).
180 */
181 void
event_triggers_post_call(struct trace_event_file * file,enum event_trigger_type tt)182 event_triggers_post_call(struct trace_event_file *file,
183 enum event_trigger_type tt)
184 {
185 struct event_trigger_data *data;
186
187 list_for_each_entry_rcu(data, &file->triggers, list) {
188 if (data->paused)
189 continue;
190 if (data->cmd_ops->trigger_type & tt)
191 data_ops_trigger(data, NULL, NULL, NULL);
192 }
193 }
194 EXPORT_SYMBOL_GPL(event_triggers_post_call);
195
196 #define SHOW_AVAILABLE_TRIGGERS (void *)(1UL)
197
trigger_next(struct seq_file * m,void * t,loff_t * pos)198 static void *trigger_next(struct seq_file *m, void *t, loff_t *pos)
199 {
200 struct trace_event_file *event_file = event_file_data(m->private);
201
202 if (t == SHOW_AVAILABLE_TRIGGERS) {
203 (*pos)++;
204 return NULL;
205 }
206 return seq_list_next(t, &event_file->triggers, pos);
207 }
208
check_user_trigger(struct trace_event_file * file)209 static bool check_user_trigger(struct trace_event_file *file)
210 {
211 struct event_trigger_data *data;
212
213 list_for_each_entry_rcu(data, &file->triggers, list,
214 lockdep_is_held(&event_mutex)) {
215 if (data->flags & EVENT_TRIGGER_FL_PROBE)
216 continue;
217 return true;
218 }
219 return false;
220 }
221
trigger_start(struct seq_file * m,loff_t * pos)222 static void *trigger_start(struct seq_file *m, loff_t *pos)
223 {
224 struct trace_event_file *event_file;
225
226 /* ->stop() is called even if ->start() fails */
227 mutex_lock(&event_mutex);
228 event_file = event_file_file(m->private);
229 if (unlikely(!event_file))
230 return ERR_PTR(-ENODEV);
231
232 if (list_empty(&event_file->triggers) || !check_user_trigger(event_file))
233 return *pos == 0 ? SHOW_AVAILABLE_TRIGGERS : NULL;
234
235 return seq_list_start(&event_file->triggers, *pos);
236 }
237
trigger_stop(struct seq_file * m,void * t)238 static void trigger_stop(struct seq_file *m, void *t)
239 {
240 mutex_unlock(&event_mutex);
241 }
242
trigger_show(struct seq_file * m,void * v)243 static int trigger_show(struct seq_file *m, void *v)
244 {
245 struct event_trigger_data *data;
246 struct event_command *p;
247
248 if (v == SHOW_AVAILABLE_TRIGGERS) {
249 seq_puts(m, "# Available triggers:\n");
250 seq_putc(m, '#');
251 mutex_lock(&trigger_cmd_mutex);
252 list_for_each_entry_reverse(p, &trigger_commands, list)
253 seq_printf(m, " %s", p->name);
254 seq_putc(m, '\n');
255 mutex_unlock(&trigger_cmd_mutex);
256 return 0;
257 }
258
259 data = list_entry(v, struct event_trigger_data, list);
260 data->cmd_ops->print(m, data);
261
262 return 0;
263 }
264
265 static const struct seq_operations event_triggers_seq_ops = {
266 .start = trigger_start,
267 .next = trigger_next,
268 .stop = trigger_stop,
269 .show = trigger_show,
270 };
271
event_trigger_regex_open(struct inode * inode,struct file * file)272 static int event_trigger_regex_open(struct inode *inode, struct file *file)
273 {
274 int ret;
275
276 ret = security_locked_down(LOCKDOWN_TRACEFS);
277 if (ret)
278 return ret;
279
280 guard(mutex)(&event_mutex);
281
282 if (unlikely(!event_file_file(file)))
283 return -ENODEV;
284
285 if ((file->f_mode & FMODE_WRITE) &&
286 (file->f_flags & O_TRUNC)) {
287 struct trace_event_file *event_file;
288 struct event_command *p;
289
290 event_file = event_file_data(file);
291
292 list_for_each_entry(p, &trigger_commands, list) {
293 if (p->unreg_all)
294 p->unreg_all(event_file);
295 }
296 }
297
298 if (file->f_mode & FMODE_READ) {
299 ret = seq_open(file, &event_triggers_seq_ops);
300 if (!ret) {
301 struct seq_file *m = file->private_data;
302 m->private = file;
303 }
304 }
305
306 return ret;
307 }
308
trigger_process_regex(struct trace_event_file * file,char * buff)309 int trigger_process_regex(struct trace_event_file *file, char *buff)
310 {
311 char *command, *next;
312 struct event_command *p;
313
314 next = buff = strim(buff);
315
316 command = strsep(&next, ": \t");
317 if (next) {
318 next = skip_spaces(next);
319 if (!*next)
320 next = NULL;
321 }
322 command = (command[0] != '!') ? command : command + 1;
323
324 guard(mutex)(&trigger_cmd_mutex);
325
326 list_for_each_entry(p, &trigger_commands, list) {
327 if (strcmp(p->name, command) == 0)
328 return p->parse(p, file, buff, command, next);
329 }
330
331 return -EINVAL;
332 }
333
event_trigger_regex_write(struct file * file,const char __user * ubuf,size_t cnt,loff_t * ppos)334 static ssize_t event_trigger_regex_write(struct file *file,
335 const char __user *ubuf,
336 size_t cnt, loff_t *ppos)
337 {
338 struct trace_event_file *event_file;
339 ssize_t ret;
340 char *buf __free(kfree) = NULL;
341
342 if (!cnt)
343 return 0;
344
345 if (cnt >= PAGE_SIZE)
346 return -EINVAL;
347
348 buf = memdup_user_nul(ubuf, cnt);
349 if (IS_ERR(buf))
350 return PTR_ERR(buf);
351
352 guard(mutex)(&event_mutex);
353
354 event_file = event_file_file(file);
355 if (unlikely(!event_file))
356 return -ENODEV;
357
358 ret = trigger_process_regex(event_file, buf);
359 if (ret < 0)
360 return ret;
361
362 *ppos += cnt;
363 return cnt;
364 }
365
event_trigger_regex_release(struct inode * inode,struct file * file)366 static int event_trigger_regex_release(struct inode *inode, struct file *file)
367 {
368 if (file->f_mode & FMODE_READ)
369 seq_release(inode, file);
370
371 return 0;
372 }
373
374 static ssize_t
event_trigger_write(struct file * filp,const char __user * ubuf,size_t cnt,loff_t * ppos)375 event_trigger_write(struct file *filp, const char __user *ubuf,
376 size_t cnt, loff_t *ppos)
377 {
378 return event_trigger_regex_write(filp, ubuf, cnt, ppos);
379 }
380
381 static int
event_trigger_open(struct inode * inode,struct file * filp)382 event_trigger_open(struct inode *inode, struct file *filp)
383 {
384 /* Checks for tracefs lockdown */
385 return event_trigger_regex_open(inode, filp);
386 }
387
388 static int
event_trigger_release(struct inode * inode,struct file * file)389 event_trigger_release(struct inode *inode, struct file *file)
390 {
391 return event_trigger_regex_release(inode, file);
392 }
393
394 const struct file_operations event_trigger_fops = {
395 .open = event_trigger_open,
396 .read = seq_read,
397 .write = event_trigger_write,
398 .llseek = tracing_lseek,
399 .release = event_trigger_release,
400 };
401
402 /*
403 * Currently we only register event commands from __init, so mark this
404 * __init too.
405 */
register_event_command(struct event_command * cmd)406 __init int register_event_command(struct event_command *cmd)
407 {
408 struct event_command *p;
409
410 guard(mutex)(&trigger_cmd_mutex);
411
412 list_for_each_entry(p, &trigger_commands, list) {
413 if (strcmp(cmd->name, p->name) == 0)
414 return -EBUSY;
415 }
416 list_add(&cmd->list, &trigger_commands);
417
418 return 0;
419 }
420
421 /*
422 * Currently we only unregister event commands from __init, so mark
423 * this __init too.
424 */
unregister_event_command(struct event_command * cmd)425 __init int unregister_event_command(struct event_command *cmd)
426 {
427 struct event_command *p, *n;
428
429 guard(mutex)(&trigger_cmd_mutex);
430
431 list_for_each_entry_safe(p, n, &trigger_commands, list) {
432 if (strcmp(cmd->name, p->name) == 0) {
433 list_del_init(&p->list);
434 return 0;
435 }
436 }
437
438 return -ENODEV;
439 }
440
441 /**
442 * event_trigger_count - Optional count function for event triggers
443 * @data: Trigger-specific data
444 * @buffer: The ring buffer that the event is being written to
445 * @rec: The trace entry for the event, NULL for unconditional invocation
446 * @event: The event meta data in the ring buffer
447 *
448 * For triggers that can take a count parameter that doesn't do anything
449 * special, they can use this function to assign to their .count_func
450 * field.
451 *
452 * This simply does a count down of the @data->count field.
453 *
454 * If the @data->count is greater than zero, it will decrement it.
455 *
456 * Returns false if @data->count is zero, otherwise true.
457 */
event_trigger_count(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)458 bool event_trigger_count(struct event_trigger_data *data,
459 struct trace_buffer *buffer, void *rec,
460 struct ring_buffer_event *event)
461 {
462 if (!data->count)
463 return false;
464
465 if (data->count != -1)
466 (data->count)--;
467
468 return true;
469 }
470
471 /**
472 * event_trigger_print - Generic event_command @print implementation
473 * @name: The name of the event trigger
474 * @m: The seq_file being printed to
475 * @data: Trigger-specific data
476 * @filter_str: filter_str to print, if present
477 *
478 * Common implementation for event triggers to print themselves.
479 *
480 * Usually wrapped by a function that simply sets the @name of the
481 * trigger command and then invokes this.
482 *
483 * Return: 0 on success, errno otherwise
484 */
485 static int
event_trigger_print(const char * name,struct seq_file * m,void * data,char * filter_str)486 event_trigger_print(const char *name, struct seq_file *m,
487 void *data, char *filter_str)
488 {
489 long count = (long)data;
490
491 seq_puts(m, name);
492
493 if (count == -1)
494 seq_puts(m, ":unlimited");
495 else
496 seq_printf(m, ":count=%ld", count);
497
498 if (filter_str)
499 seq_printf(m, " if %s\n", filter_str);
500 else
501 seq_putc(m, '\n');
502
503 return 0;
504 }
505
506 /**
507 * event_trigger_init - Generic event_command @init implementation
508 * @data: Trigger-specific data
509 *
510 * Common implementation of event trigger initialization.
511 *
512 * Usually used directly as the @init method in event trigger
513 * implementations.
514 *
515 * Return: 0 on success, errno otherwise
516 */
event_trigger_init(struct event_trigger_data * data)517 int event_trigger_init(struct event_trigger_data *data)
518 {
519 data->ref++;
520 return 0;
521 }
522
523 /**
524 * event_trigger_free - Generic event_command @free implementation
525 * @data: Trigger-specific data
526 *
527 * Common implementation of event trigger de-initialization.
528 *
529 * Usually used directly as the @free method in event trigger
530 * implementations.
531 */
532 static void
event_trigger_free(struct event_trigger_data * data)533 event_trigger_free(struct event_trigger_data *data)
534 {
535 if (WARN_ON_ONCE(data->ref <= 0))
536 return;
537
538 data->ref--;
539 if (!data->ref)
540 trigger_data_free(data);
541 }
542
trace_event_trigger_enable_disable(struct trace_event_file * file,int trigger_enable)543 int trace_event_trigger_enable_disable(struct trace_event_file *file,
544 int trigger_enable)
545 {
546 int ret = 0;
547
548 if (trigger_enable) {
549 if (atomic_inc_return(&file->tm_ref) > 1)
550 return ret;
551 set_bit(EVENT_FILE_FL_TRIGGER_MODE_BIT, &file->flags);
552 ret = trace_event_enable_disable(file, 1, 1);
553 } else {
554 if (atomic_dec_return(&file->tm_ref) > 0)
555 return ret;
556 clear_bit(EVENT_FILE_FL_TRIGGER_MODE_BIT, &file->flags);
557 ret = trace_event_enable_disable(file, 0, 1);
558 }
559
560 return ret;
561 }
562
563 /**
564 * clear_event_triggers - Clear all triggers associated with a trace array
565 * @tr: The trace array to clear
566 *
567 * For each trigger, the triggering event has its tm_ref decremented
568 * via trace_event_trigger_enable_disable(), and any associated event
569 * (in the case of enable/disable_event triggers) will have its sm_ref
570 * decremented via free()->trace_event_enable_disable(). That
571 * combination effectively reverses the soft-mode/trigger state added
572 * by trigger registration.
573 *
574 * Must be called with event_mutex held.
575 */
576 void
clear_event_triggers(struct trace_array * tr)577 clear_event_triggers(struct trace_array *tr)
578 {
579 struct trace_event_file *file;
580
581 list_for_each_entry(file, &tr->events, list) {
582 struct event_trigger_data *data, *n;
583 list_for_each_entry_safe(data, n, &file->triggers, list) {
584 trace_event_trigger_enable_disable(file, 0);
585 list_del_rcu(&data->list);
586 if (data->cmd_ops->free)
587 data->cmd_ops->free(data);
588 }
589 }
590 }
591
592 /**
593 * update_cond_flag - Set or reset the TRIGGER_COND bit
594 * @file: The trace_event_file associated with the event
595 *
596 * If an event has triggers and any of those triggers has a filter or
597 * a post_trigger, trigger invocation needs to be deferred until after
598 * the current event has logged its data, and the event should have
599 * its TRIGGER_COND bit set, otherwise the TRIGGER_COND bit should be
600 * cleared.
601 */
update_cond_flag(struct trace_event_file * file)602 void update_cond_flag(struct trace_event_file *file)
603 {
604 struct event_trigger_data *data;
605 bool set_cond = false;
606
607 lockdep_assert_held(&event_mutex);
608
609 list_for_each_entry(data, &file->triggers, list) {
610 if (data->filter || event_command_post_trigger(data->cmd_ops) ||
611 event_command_needs_rec(data->cmd_ops)) {
612 set_cond = true;
613 break;
614 }
615 }
616
617 if (set_cond)
618 set_bit(EVENT_FILE_FL_TRIGGER_COND_BIT, &file->flags);
619 else
620 clear_bit(EVENT_FILE_FL_TRIGGER_COND_BIT, &file->flags);
621 }
622
623 /**
624 * register_trigger - Generic event_command @reg implementation
625 * @glob: The raw string used to register the trigger
626 * @data: Trigger-specific data to associate with the trigger
627 * @file: The trace_event_file associated with the event
628 *
629 * Common implementation for event trigger registration.
630 *
631 * Usually used directly as the @reg method in event command
632 * implementations.
633 *
634 * Return: 0 on success, errno otherwise
635 */
register_trigger(char * glob,struct event_trigger_data * data,struct trace_event_file * file)636 static int register_trigger(char *glob,
637 struct event_trigger_data *data,
638 struct trace_event_file *file)
639 {
640 struct event_trigger_data *test;
641 int ret = 0;
642
643 lockdep_assert_held(&event_mutex);
644
645 list_for_each_entry(test, &file->triggers, list) {
646 if (test->cmd_ops->trigger_type == data->cmd_ops->trigger_type)
647 return -EEXIST;
648 }
649
650 if (data->cmd_ops->init) {
651 ret = data->cmd_ops->init(data);
652 if (ret < 0)
653 return ret;
654 }
655
656 list_add_rcu(&data->list, &file->triggers);
657
658 update_cond_flag(file);
659 ret = trace_event_trigger_enable_disable(file, 1);
660 if (ret < 0) {
661 list_del_rcu(&data->list);
662 update_cond_flag(file);
663 }
664 return ret;
665 }
666
667 /*
668 * True if the trigger was found and unregistered, else false.
669 */
try_unregister_trigger(char * glob,struct event_trigger_data * test,struct trace_event_file * file)670 static bool try_unregister_trigger(char *glob,
671 struct event_trigger_data *test,
672 struct trace_event_file *file)
673 {
674 struct event_trigger_data *data = NULL, *iter;
675
676 lockdep_assert_held(&event_mutex);
677
678 list_for_each_entry(iter, &file->triggers, list) {
679 if (iter->cmd_ops->trigger_type == test->cmd_ops->trigger_type) {
680 data = iter;
681 list_del_rcu(&data->list);
682 trace_event_trigger_enable_disable(file, 0);
683 update_cond_flag(file);
684 break;
685 }
686 }
687
688 if (data) {
689 if (data->cmd_ops->free)
690 data->cmd_ops->free(data);
691
692 return true;
693 }
694
695 return false;
696 }
697
698 /**
699 * unregister_trigger - Generic event_command @unreg implementation
700 * @glob: The raw string used to register the trigger
701 * @test: Trigger-specific data used to find the trigger to remove
702 * @file: The trace_event_file associated with the event
703 *
704 * Common implementation for event trigger unregistration.
705 *
706 * Usually used directly as the @unreg method in event command
707 * implementations.
708 */
unregister_trigger(char * glob,struct event_trigger_data * test,struct trace_event_file * file)709 static void unregister_trigger(char *glob,
710 struct event_trigger_data *test,
711 struct trace_event_file *file)
712 {
713 try_unregister_trigger(glob, test, file);
714 }
715
716 /*
717 * Event trigger parsing helper functions.
718 *
719 * These functions help make it easier to write an event trigger
720 * parsing function i.e. the struct event_command.parse() callback
721 * function responsible for parsing and registering a trigger command
722 * written to the 'trigger' file.
723 *
724 * A trigger command (or just 'trigger' for short) takes the form:
725 * [trigger] [if filter]
726 *
727 * The struct event_command.parse() callback (and other struct
728 * event_command functions) refer to several components of a trigger
729 * command. Those same components are referenced by the event trigger
730 * parsing helper functions defined below. These components are:
731 *
732 * cmd - the trigger command name
733 * glob - the trigger command name optionally prefaced with '!'
734 * param_and_filter - text following cmd and ':'
735 * param - text following cmd and ':' and stripped of filter
736 * filter - the optional filter text following (and including) 'if'
737 *
738 * To illustrate the use of these components, here are some concrete
739 * examples. For the following triggers:
740 *
741 * echo 'traceon:5 if pid == 0' > trigger
742 * - 'traceon' is both cmd and glob
743 * - '5 if pid == 0' is the param_and_filter
744 * - '5' is the param
745 * - 'if pid == 0' is the filter
746 *
747 * echo 'enable_event:sys:event:n' > trigger
748 * - 'enable_event' is both cmd and glob
749 * - 'sys:event:n' is the param_and_filter
750 * - 'sys:event:n' is the param
751 * - there is no filter
752 *
753 * echo 'hist:keys=pid if prio > 50' > trigger
754 * - 'hist' is both cmd and glob
755 * - 'keys=pid if prio > 50' is the param_and_filter
756 * - 'keys=pid' is the param
757 * - 'if prio > 50' is the filter
758 *
759 * echo '!enable_event:sys:event:n' > trigger
760 * - 'enable_event' the cmd
761 * - '!enable_event' is the glob
762 * - 'sys:event:n' is the param_and_filter
763 * - 'sys:event:n' is the param
764 * - there is no filter
765 *
766 * echo 'traceoff' > trigger
767 * - 'traceoff' is both cmd and glob
768 * - there is no param_and_filter
769 * - there is no param
770 * - there is no filter
771 *
772 * There are a few different categories of event trigger covered by
773 * these helpers:
774 *
775 * - triggers that don't require a parameter e.g. traceon
776 * - triggers that do require a parameter e.g. enable_event and hist
777 * - triggers that though they may not require a param may support an
778 * optional 'n' param (n = number of times the trigger should fire)
779 * e.g.: traceon:5 or enable_event:sys:event:n
780 * - triggers that do not support an 'n' param e.g. hist
781 *
782 * These functions can be used or ignored as necessary - it all
783 * depends on the complexity of the trigger, and the granularity of
784 * the functions supported reflects the fact that some implementations
785 * may need to customize certain aspects of their implementations and
786 * won't need certain functions. For instance, the hist trigger
787 * implementation doesn't use event_trigger_separate_filter() because
788 * it has special requirements for handling the filter.
789 */
790
791 /**
792 * event_trigger_check_remove - check whether an event trigger specifies remove
793 * @glob: The trigger command string, with optional remove(!) operator
794 *
795 * The event trigger callback implementations pass in 'glob' as a
796 * parameter. This is the command name either with or without a
797 * remove(!) operator. This function simply parses the glob and
798 * determines whether the command corresponds to a trigger removal or
799 * a trigger addition.
800 *
801 * Return: true if this is a remove command, false otherwise
802 */
event_trigger_check_remove(const char * glob)803 bool event_trigger_check_remove(const char *glob)
804 {
805 return (glob && glob[0] == '!') ? true : false;
806 }
807
808 /**
809 * event_trigger_empty_param - check whether the param is empty
810 * @param: The trigger param string
811 *
812 * The event trigger callback implementations pass in 'param' as a
813 * parameter. This corresponds to the string following the command
814 * name minus the command name. This function can be called by a
815 * callback implementation for any command that requires a param; a
816 * callback that doesn't require a param can ignore it.
817 *
818 * Return: true if this is an empty param, false otherwise
819 */
event_trigger_empty_param(const char * param)820 bool event_trigger_empty_param(const char *param)
821 {
822 return !param;
823 }
824
825 /**
826 * event_trigger_separate_filter - separate an event trigger from a filter
827 * @param_and_filter: String containing trigger and possibly filter
828 * @param: outparam, will be filled with a pointer to the trigger
829 * @filter: outparam, will be filled with a pointer to the filter
830 * @param_required: Specifies whether or not the param string is required
831 *
832 * Given a param string of the form '[trigger] [if filter]', this
833 * function separates the filter from the trigger and returns the
834 * trigger in @param and the filter in @filter. Either the @param
835 * or the @filter may be set to NULL by this function - if not set to
836 * NULL, they will contain strings corresponding to the trigger and
837 * filter.
838 *
839 * There are two cases that need to be handled with respect to the
840 * passed-in param: either the param is required, or it is not
841 * required. If @param_required is set, and there's no param, it will
842 * return -EINVAL. If @param_required is not set and there's a param
843 * that starts with a number, that corresponds to the case of a
844 * trigger with :n (n = number of times the trigger should fire) and
845 * the parsing continues normally; otherwise the function just returns
846 * and assumes param just contains a filter and there's nothing else
847 * to do.
848 *
849 * Return: 0 on success, errno otherwise
850 */
event_trigger_separate_filter(char * param_and_filter,char ** param,char ** filter,bool param_required)851 int event_trigger_separate_filter(char *param_and_filter, char **param,
852 char **filter, bool param_required)
853 {
854 int ret = 0;
855
856 *param = *filter = NULL;
857
858 if (!param_and_filter) {
859 if (param_required)
860 ret = -EINVAL;
861 return ret;
862 }
863
864 /*
865 * Here we check for an optional param. The only legal
866 * optional param is :n, and if that's the case, continue
867 * below. Otherwise we assume what's left is a filter and
868 * return it as the filter string for the caller to deal with.
869 */
870 if (!param_required && param_and_filter && !isdigit(param_and_filter[0])) {
871 *filter = param_and_filter;
872 return ret;
873 }
874
875 /*
876 * Separate the param from the filter (param [if filter]).
877 * Here we have either an optional :n param or a required
878 * param and an optional filter.
879 */
880 *param = strsep(¶m_and_filter, " \t");
881
882 /*
883 * Here we have a filter, though it may be empty.
884 */
885 if (param_and_filter) {
886 *filter = skip_spaces(param_and_filter);
887 if (!**filter)
888 *filter = NULL;
889 }
890 return ret;
891 }
892
893 /**
894 * trigger_data_alloc - allocate and init event_trigger_data for a trigger
895 * @cmd_ops: The event_command operations for the trigger
896 * @cmd: The cmd string
897 * @param: The param string
898 * @private_data: User data to associate with the event trigger
899 *
900 * Allocate an event_trigger_data instance and initialize it. The
901 * @cmd_ops defines how the trigger will operate. If @param is set,
902 * and @cmd_ops->trigger_ops->count_func is non NULL, then the
903 * data->count is set to @param and before the trigger is executed, the
904 * @cmd_ops->trigger_ops->count_func() is called. If that function returns
905 * false, the @cmd_ops->trigger_ops->trigger() function will not be called.
906 * @private_data can also be passed in and associated with the
907 * event_trigger_data.
908 *
909 * Use trigger_data_free() to free an event_trigger_data object.
910 *
911 * Return: The trigger_data object success, NULL otherwise
912 */
trigger_data_alloc(struct event_command * cmd_ops,char * cmd,char * param,void * private_data)913 struct event_trigger_data *trigger_data_alloc(struct event_command *cmd_ops,
914 char *cmd,
915 char *param,
916 void *private_data)
917 {
918 struct event_trigger_data *trigger_data;
919
920 trigger_data = kzalloc_obj(*trigger_data);
921 if (!trigger_data)
922 return NULL;
923
924 trigger_data->count = -1;
925 trigger_data->cmd_ops = cmd_ops;
926 trigger_data->private_data = private_data;
927 if (param && cmd_ops->count_func)
928 trigger_data->flags |= EVENT_TRIGGER_FL_COUNT;
929
930 INIT_LIST_HEAD(&trigger_data->list);
931 INIT_LIST_HEAD(&trigger_data->named_list);
932 RCU_INIT_POINTER(trigger_data->filter, NULL);
933
934 return trigger_data;
935 }
936
937 /**
938 * event_trigger_parse_num - parse and return the number param for a trigger
939 * @param: The param string
940 * @trigger_data: The trigger_data for the trigger
941 *
942 * Parse the :n (n = number of times the trigger should fire) param
943 * and set the count variable in the trigger_data to the parsed count.
944 *
945 * Return: 0 on success, errno otherwise
946 */
event_trigger_parse_num(char * param,struct event_trigger_data * trigger_data)947 int event_trigger_parse_num(char *param,
948 struct event_trigger_data *trigger_data)
949 {
950 char *number;
951 int ret = 0;
952
953 if (param) {
954 number = strsep(¶m, ":");
955
956 if (!strlen(number))
957 return -EINVAL;
958
959 /*
960 * We use the callback data field (which is a pointer)
961 * as our counter.
962 */
963 ret = kstrtoul(number, 0, &trigger_data->count);
964 }
965
966 return ret;
967 }
968
969 /**
970 * event_trigger_set_filter - set an event trigger's filter
971 * @cmd_ops: The event_command operations for the trigger
972 * @file: The event file for the trigger's event
973 * @param: The string containing the filter
974 * @trigger_data: The trigger_data for the trigger
975 *
976 * Set the filter for the trigger. If the filter is NULL, just return
977 * without error.
978 *
979 * Return: 0 on success, errno otherwise
980 */
event_trigger_set_filter(struct event_command * cmd_ops,struct trace_event_file * file,char * param,struct event_trigger_data * trigger_data)981 int event_trigger_set_filter(struct event_command *cmd_ops,
982 struct trace_event_file *file,
983 char *param,
984 struct event_trigger_data *trigger_data)
985 {
986 if (param && cmd_ops->set_filter)
987 return cmd_ops->set_filter(param, trigger_data, file);
988
989 return 0;
990 }
991
992 /**
993 * event_trigger_reset_filter - reset an event trigger's filter
994 * @cmd_ops: The event_command operations for the trigger
995 * @trigger_data: The trigger_data for the trigger
996 *
997 * Reset the filter for the trigger to no filter.
998 */
event_trigger_reset_filter(struct event_command * cmd_ops,struct event_trigger_data * trigger_data)999 void event_trigger_reset_filter(struct event_command *cmd_ops,
1000 struct event_trigger_data *trigger_data)
1001 {
1002 if (cmd_ops->set_filter)
1003 cmd_ops->set_filter(NULL, trigger_data, NULL);
1004 }
1005
1006 /**
1007 * event_trigger_register - register an event trigger
1008 * @cmd_ops: The event_command operations for the trigger
1009 * @file: The event file for the trigger's event
1010 * @glob: The trigger command string, with optional remove(!) operator
1011 * @trigger_data: The trigger_data for the trigger
1012 *
1013 * Register an event trigger. The @cmd_ops are used to call the
1014 * cmd_ops->reg() function which actually does the registration.
1015 *
1016 * Return: 0 on success, errno otherwise
1017 */
event_trigger_register(struct event_command * cmd_ops,struct trace_event_file * file,char * glob,struct event_trigger_data * trigger_data)1018 int event_trigger_register(struct event_command *cmd_ops,
1019 struct trace_event_file *file,
1020 char *glob,
1021 struct event_trigger_data *trigger_data)
1022 {
1023 return cmd_ops->reg(glob, trigger_data, file);
1024 }
1025
1026 /**
1027 * event_trigger_unregister - unregister an event trigger
1028 * @cmd_ops: The event_command operations for the trigger
1029 * @file: The event file for the trigger's event
1030 * @glob: The trigger command string, with optional remove(!) operator
1031 * @trigger_data: The trigger_data for the trigger
1032 *
1033 * Unregister an event trigger. The @cmd_ops are used to call the
1034 * cmd_ops->unreg() function which actually does the unregistration.
1035 */
event_trigger_unregister(struct event_command * cmd_ops,struct trace_event_file * file,char * glob,struct event_trigger_data * trigger_data)1036 void event_trigger_unregister(struct event_command *cmd_ops,
1037 struct trace_event_file *file,
1038 char *glob,
1039 struct event_trigger_data *trigger_data)
1040 {
1041 cmd_ops->unreg(glob, trigger_data, file);
1042 }
1043
1044 /*
1045 * End event trigger parsing helper functions.
1046 */
1047
1048 /**
1049 * event_trigger_parse - Generic event_command @parse implementation
1050 * @cmd_ops: The command ops, used for trigger registration
1051 * @file: The trace_event_file associated with the event
1052 * @glob: The raw string used to register the trigger
1053 * @cmd: The cmd portion of the string used to register the trigger
1054 * @param_and_filter: The param and filter portion of the string used to register the trigger
1055 *
1056 * Common implementation for event command parsing and trigger
1057 * instantiation.
1058 *
1059 * Usually used directly as the @parse method in event command
1060 * implementations.
1061 *
1062 * Return: 0 on success, errno otherwise
1063 */
1064 static int
event_trigger_parse(struct event_command * cmd_ops,struct trace_event_file * file,char * glob,char * cmd,char * param_and_filter)1065 event_trigger_parse(struct event_command *cmd_ops,
1066 struct trace_event_file *file,
1067 char *glob, char *cmd, char *param_and_filter)
1068 {
1069 struct event_trigger_data *trigger_data;
1070 char *param, *filter;
1071 bool remove;
1072 int ret;
1073
1074 remove = event_trigger_check_remove(glob);
1075
1076 ret = event_trigger_separate_filter(param_and_filter, ¶m, &filter, false);
1077 if (ret)
1078 return ret;
1079
1080 ret = -ENOMEM;
1081 trigger_data = trigger_data_alloc(cmd_ops, cmd, param, file);
1082 if (!trigger_data)
1083 return ret;
1084
1085 if (remove) {
1086 event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
1087 trigger_data_free(trigger_data);
1088 return 0;
1089 }
1090
1091 ret = event_trigger_parse_num(param, trigger_data);
1092 if (ret)
1093 goto out_free;
1094
1095 ret = event_trigger_set_filter(cmd_ops, file, filter, trigger_data);
1096 if (ret < 0)
1097 goto out_free;
1098
1099 /* Up the trigger_data count to make sure reg doesn't free it on failure */
1100 event_trigger_init(trigger_data);
1101
1102 ret = event_trigger_register(cmd_ops, file, glob, trigger_data);
1103 if (ret)
1104 goto out_free;
1105
1106 /* Down the counter of trigger_data or free it if not used anymore */
1107 event_trigger_free(trigger_data);
1108 return ret;
1109
1110 out_free:
1111 event_trigger_reset_filter(cmd_ops, trigger_data);
1112 trigger_data_free(trigger_data);
1113 return ret;
1114 }
1115
1116 /**
1117 * set_trigger_filter - Generic event_command @set_filter implementation
1118 * @filter_str: The filter string for the trigger, NULL to remove filter
1119 * @trigger_data: Trigger-specific data
1120 * @file: The trace_event_file associated with the event
1121 *
1122 * Common implementation for event command filter parsing and filter
1123 * instantiation.
1124 *
1125 * Usually used directly as the @set_filter method in event command
1126 * implementations.
1127 *
1128 * Also used to remove a filter (if filter_str = NULL).
1129 *
1130 * Return: 0 on success, errno otherwise
1131 */
set_trigger_filter(char * filter_str,struct event_trigger_data * trigger_data,struct trace_event_file * file)1132 int set_trigger_filter(char *filter_str,
1133 struct event_trigger_data *trigger_data,
1134 struct trace_event_file *file)
1135 {
1136 struct event_trigger_data *data = trigger_data;
1137 struct event_filter *filter = NULL, *tmp;
1138 int ret = -EINVAL;
1139 char *s;
1140
1141 if (!filter_str) /* clear the current filter */
1142 goto assign;
1143
1144 s = strsep(&filter_str, " \t");
1145
1146 if (!strlen(s) || strcmp(s, "if") != 0)
1147 return ret;
1148
1149 if (!filter_str)
1150 return ret;
1151
1152 /* The filter is for the 'trigger' event, not the triggered event */
1153 ret = create_event_filter(file->tr, file->event_call,
1154 filter_str, true, &filter);
1155
1156 /* Only enabled set_str for error handling */
1157 if (filter) {
1158 kfree(filter->filter_string);
1159 filter->filter_string = NULL;
1160 }
1161
1162 /*
1163 * If create_event_filter() fails, filter still needs to be freed.
1164 * Which the calling code will do with data->filter.
1165 */
1166 assign:
1167 tmp = rcu_access_pointer(data->filter);
1168
1169 rcu_assign_pointer(data->filter, filter);
1170
1171 if (tmp) {
1172 /*
1173 * Make sure the call is done with the filter.
1174 * It is possible that a filter could fail at boot up,
1175 * and then this path will be called. Avoid the synchronization
1176 * in that case.
1177 */
1178 if (system_state != SYSTEM_BOOTING)
1179 tracepoint_synchronize_unregister();
1180 free_event_filter(tmp);
1181 }
1182
1183 kfree(data->filter_str);
1184 data->filter_str = NULL;
1185
1186 if (filter_str) {
1187 data->filter_str = kstrdup(filter_str, GFP_KERNEL);
1188 if (!data->filter_str) {
1189 free_event_filter(rcu_access_pointer(data->filter));
1190 data->filter = NULL;
1191 ret = -ENOMEM;
1192 }
1193 }
1194 return ret;
1195 }
1196
1197 static LIST_HEAD(named_triggers);
1198
1199 /**
1200 * find_named_trigger - Find the common named trigger associated with @name
1201 * @name: The name of the set of named triggers to find the common data for
1202 *
1203 * Named triggers are sets of triggers that share a common set of
1204 * trigger data. The first named trigger registered with a given name
1205 * owns the common trigger data that the others subsequently
1206 * registered with the same name will reference. This function
1207 * returns the common trigger data associated with that first
1208 * registered instance.
1209 *
1210 * Return: the common trigger data for the given named trigger on
1211 * success, NULL otherwise.
1212 */
find_named_trigger(const char * name)1213 struct event_trigger_data *find_named_trigger(const char *name)
1214 {
1215 struct event_trigger_data *data;
1216
1217 if (!name)
1218 return NULL;
1219
1220 list_for_each_entry(data, &named_triggers, named_list) {
1221 if (data->named_data)
1222 continue;
1223 if (strcmp(data->name, name) == 0)
1224 return data;
1225 }
1226
1227 return NULL;
1228 }
1229
1230 /**
1231 * is_named_trigger - determine if a given trigger is a named trigger
1232 * @test: The trigger data to test
1233 *
1234 * Return: true if 'test' is a named trigger, false otherwise.
1235 */
is_named_trigger(struct event_trigger_data * test)1236 bool is_named_trigger(struct event_trigger_data *test)
1237 {
1238 struct event_trigger_data *data;
1239
1240 list_for_each_entry(data, &named_triggers, named_list) {
1241 if (test == data)
1242 return true;
1243 }
1244
1245 return false;
1246 }
1247
1248 /**
1249 * save_named_trigger - save the trigger in the named trigger list
1250 * @name: The name of the named trigger set
1251 * @data: The trigger data to save
1252 *
1253 * Return: 0 if successful, negative error otherwise.
1254 */
save_named_trigger(const char * name,struct event_trigger_data * data)1255 int save_named_trigger(const char *name, struct event_trigger_data *data)
1256 {
1257 data->name = kstrdup(name, GFP_KERNEL);
1258 if (!data->name)
1259 return -ENOMEM;
1260
1261 list_add(&data->named_list, &named_triggers);
1262
1263 return 0;
1264 }
1265
1266 /**
1267 * del_named_trigger - delete a trigger from the named trigger list
1268 * @data: The trigger data to delete
1269 */
del_named_trigger(struct event_trigger_data * data)1270 void del_named_trigger(struct event_trigger_data *data)
1271 {
1272 kfree(data->name);
1273 data->name = NULL;
1274
1275 list_del(&data->named_list);
1276 }
1277
__pause_named_trigger(struct event_trigger_data * data,bool pause)1278 static void __pause_named_trigger(struct event_trigger_data *data, bool pause)
1279 {
1280 struct event_trigger_data *test;
1281
1282 list_for_each_entry(test, &named_triggers, named_list) {
1283 if (strcmp(test->name, data->name) == 0) {
1284 if (pause) {
1285 test->paused_tmp = test->paused;
1286 test->paused = true;
1287 } else {
1288 test->paused = test->paused_tmp;
1289 }
1290 }
1291 }
1292 }
1293
1294 /**
1295 * pause_named_trigger - Pause all named triggers with the same name
1296 * @data: The trigger data of a named trigger to pause
1297 *
1298 * Pauses a named trigger along with all other triggers having the
1299 * same name. Because named triggers share a common set of data,
1300 * pausing only one is meaningless, so pausing one named trigger needs
1301 * to pause all triggers with the same name.
1302 */
pause_named_trigger(struct event_trigger_data * data)1303 void pause_named_trigger(struct event_trigger_data *data)
1304 {
1305 __pause_named_trigger(data, true);
1306 }
1307
1308 /**
1309 * unpause_named_trigger - Un-pause all named triggers with the same name
1310 * @data: The trigger data of a named trigger to unpause
1311 *
1312 * Un-pauses a named trigger along with all other triggers having the
1313 * same name. Because named triggers share a common set of data,
1314 * unpausing only one is meaningless, so unpausing one named trigger
1315 * needs to unpause all triggers with the same name.
1316 */
unpause_named_trigger(struct event_trigger_data * data)1317 void unpause_named_trigger(struct event_trigger_data *data)
1318 {
1319 __pause_named_trigger(data, false);
1320 }
1321
1322 /**
1323 * set_named_trigger_data - Associate common named trigger data
1324 * @data: The trigger data to associate
1325 * @named_data: The common named trigger to be associated
1326 *
1327 * Named triggers are sets of triggers that share a common set of
1328 * trigger data. The first named trigger registered with a given name
1329 * owns the common trigger data that the others subsequently
1330 * registered with the same name will reference. This function
1331 * associates the common trigger data from the first trigger with the
1332 * given trigger.
1333 */
set_named_trigger_data(struct event_trigger_data * data,struct event_trigger_data * named_data)1334 void set_named_trigger_data(struct event_trigger_data *data,
1335 struct event_trigger_data *named_data)
1336 {
1337 data->named_data = named_data;
1338 }
1339
1340 struct event_trigger_data *
get_named_trigger_data(struct event_trigger_data * data)1341 get_named_trigger_data(struct event_trigger_data *data)
1342 {
1343 return data->named_data;
1344 }
1345
1346 static void
traceon_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1347 traceon_trigger(struct event_trigger_data *data,
1348 struct trace_buffer *buffer, void *rec,
1349 struct ring_buffer_event *event)
1350 {
1351 struct trace_event_file *file = data->private_data;
1352
1353 if (WARN_ON_ONCE(!file))
1354 return;
1355
1356 if (tracer_tracing_is_on(file->tr))
1357 return;
1358
1359 tracer_tracing_on(file->tr);
1360 }
1361
1362 static bool
traceon_count_func(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1363 traceon_count_func(struct event_trigger_data *data,
1364 struct trace_buffer *buffer, void *rec,
1365 struct ring_buffer_event *event)
1366 {
1367 struct trace_event_file *file = data->private_data;
1368
1369 if (WARN_ON_ONCE(!file))
1370 return false;
1371
1372 if (tracer_tracing_is_on(file->tr))
1373 return false;
1374
1375 if (!data->count)
1376 return false;
1377
1378 if (data->count != -1)
1379 (data->count)--;
1380
1381 return true;
1382 }
1383
1384 static void
traceoff_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1385 traceoff_trigger(struct event_trigger_data *data,
1386 struct trace_buffer *buffer, void *rec,
1387 struct ring_buffer_event *event)
1388 {
1389 struct trace_event_file *file = data->private_data;
1390
1391 if (WARN_ON_ONCE(!file))
1392 return;
1393
1394 if (!tracer_tracing_is_on(file->tr))
1395 return;
1396
1397 tracer_tracing_off(file->tr);
1398 }
1399
1400 static bool
traceoff_count_func(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1401 traceoff_count_func(struct event_trigger_data *data,
1402 struct trace_buffer *buffer, void *rec,
1403 struct ring_buffer_event *event)
1404 {
1405 struct trace_event_file *file = data->private_data;
1406
1407 if (WARN_ON_ONCE(!file))
1408 return false;
1409
1410 if (!tracer_tracing_is_on(file->tr))
1411 return false;
1412
1413 if (!data->count)
1414 return false;
1415
1416 if (data->count != -1)
1417 (data->count)--;
1418
1419 return true;
1420 }
1421
1422 static int
traceon_trigger_print(struct seq_file * m,struct event_trigger_data * data)1423 traceon_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1424 {
1425 return event_trigger_print("traceon", m, (void *)data->count,
1426 data->filter_str);
1427 }
1428
1429 static int
traceoff_trigger_print(struct seq_file * m,struct event_trigger_data * data)1430 traceoff_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1431 {
1432 return event_trigger_print("traceoff", m, (void *)data->count,
1433 data->filter_str);
1434 }
1435
1436 static struct event_command trigger_traceon_cmd = {
1437 .name = "traceon",
1438 .trigger_type = ETT_TRACE_ONOFF,
1439 .parse = event_trigger_parse,
1440 .reg = register_trigger,
1441 .unreg = unregister_trigger,
1442 .set_filter = set_trigger_filter,
1443 .trigger = traceon_trigger,
1444 .count_func = traceon_count_func,
1445 .print = traceon_trigger_print,
1446 .init = event_trigger_init,
1447 .free = event_trigger_free,
1448 };
1449
1450 static struct event_command trigger_traceoff_cmd = {
1451 .name = "traceoff",
1452 .trigger_type = ETT_TRACE_ONOFF,
1453 .flags = EVENT_CMD_FL_POST_TRIGGER,
1454 .parse = event_trigger_parse,
1455 .reg = register_trigger,
1456 .unreg = unregister_trigger,
1457 .set_filter = set_trigger_filter,
1458 .trigger = traceoff_trigger,
1459 .count_func = traceoff_count_func,
1460 .print = traceoff_trigger_print,
1461 .init = event_trigger_init,
1462 .free = event_trigger_free,
1463 };
1464
1465 #ifdef CONFIG_TRACER_SNAPSHOT
1466 static void
snapshot_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1467 snapshot_trigger(struct event_trigger_data *data,
1468 struct trace_buffer *buffer, void *rec,
1469 struct ring_buffer_event *event)
1470 {
1471 struct trace_event_file *file = data->private_data;
1472
1473 if (WARN_ON_ONCE(!file))
1474 return;
1475
1476 tracing_snapshot_instance(file->tr);
1477 }
1478
1479 static int
register_snapshot_trigger(char * glob,struct event_trigger_data * data,struct trace_event_file * file)1480 register_snapshot_trigger(char *glob,
1481 struct event_trigger_data *data,
1482 struct trace_event_file *file)
1483 {
1484 int ret = tracing_arm_snapshot(file->tr);
1485
1486 if (ret < 0)
1487 return ret;
1488
1489 ret = register_trigger(glob, data, file);
1490 if (ret < 0)
1491 tracing_disarm_snapshot(file->tr);
1492 return ret;
1493 }
1494
unregister_snapshot_trigger(char * glob,struct event_trigger_data * data,struct trace_event_file * file)1495 static void unregister_snapshot_trigger(char *glob,
1496 struct event_trigger_data *data,
1497 struct trace_event_file *file)
1498 {
1499 if (try_unregister_trigger(glob, data, file))
1500 tracing_disarm_snapshot(file->tr);
1501 }
1502
1503 static int
snapshot_trigger_print(struct seq_file * m,struct event_trigger_data * data)1504 snapshot_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1505 {
1506 return event_trigger_print("snapshot", m, (void *)data->count,
1507 data->filter_str);
1508 }
1509
1510 static struct event_command trigger_snapshot_cmd = {
1511 .name = "snapshot",
1512 .trigger_type = ETT_SNAPSHOT,
1513 .parse = event_trigger_parse,
1514 .reg = register_snapshot_trigger,
1515 .unreg = unregister_snapshot_trigger,
1516 .set_filter = set_trigger_filter,
1517 .trigger = snapshot_trigger,
1518 .count_func = event_trigger_count,
1519 .print = snapshot_trigger_print,
1520 .init = event_trigger_init,
1521 .free = event_trigger_free,
1522 };
1523
register_trigger_snapshot_cmd(void)1524 static __init int register_trigger_snapshot_cmd(void)
1525 {
1526 int ret;
1527
1528 ret = register_event_command(&trigger_snapshot_cmd);
1529 WARN_ON(ret < 0);
1530
1531 return ret;
1532 }
1533 #else
register_trigger_snapshot_cmd(void)1534 static __init int register_trigger_snapshot_cmd(void) { return 0; }
1535 #endif /* CONFIG_TRACER_SNAPSHOT */
1536
1537 #ifdef CONFIG_STACKTRACE
1538 #ifdef CONFIG_UNWINDER_ORC
1539 /* Skip 2:
1540 * event_triggers_post_call()
1541 * trace_event_raw_event_xxx()
1542 */
1543 # define STACK_SKIP 2
1544 #else
1545 /*
1546 * Skip 4:
1547 * stacktrace_trigger()
1548 * event_triggers_post_call()
1549 * trace_event_buffer_commit()
1550 * trace_event_raw_event_xxx()
1551 */
1552 #define STACK_SKIP 4
1553 #endif
1554
1555 static void
stacktrace_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1556 stacktrace_trigger(struct event_trigger_data *data,
1557 struct trace_buffer *buffer, void *rec,
1558 struct ring_buffer_event *event)
1559 {
1560 struct trace_event_file *file = data->private_data;
1561
1562 if (WARN_ON_ONCE(!file))
1563 return;
1564
1565 __trace_stack(file->tr, tracing_gen_ctx_dec(), STACK_SKIP);
1566 }
1567
1568 static int
stacktrace_trigger_print(struct seq_file * m,struct event_trigger_data * data)1569 stacktrace_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1570 {
1571 return event_trigger_print("stacktrace", m, (void *)data->count,
1572 data->filter_str);
1573 }
1574
1575 static struct event_command trigger_stacktrace_cmd = {
1576 .name = "stacktrace",
1577 .trigger_type = ETT_STACKTRACE,
1578 .flags = EVENT_CMD_FL_POST_TRIGGER,
1579 .parse = event_trigger_parse,
1580 .reg = register_trigger,
1581 .unreg = unregister_trigger,
1582 .set_filter = set_trigger_filter,
1583 .trigger = stacktrace_trigger,
1584 .count_func = event_trigger_count,
1585 .print = stacktrace_trigger_print,
1586 .init = event_trigger_init,
1587 .free = event_trigger_free,
1588 };
1589
register_trigger_stacktrace_cmd(void)1590 static __init int register_trigger_stacktrace_cmd(void)
1591 {
1592 int ret;
1593
1594 ret = register_event_command(&trigger_stacktrace_cmd);
1595 WARN_ON(ret < 0);
1596
1597 return ret;
1598 }
1599 #else
register_trigger_stacktrace_cmd(void)1600 static __init int register_trigger_stacktrace_cmd(void) { return 0; }
1601 #endif /* CONFIG_STACKTRACE */
1602
unregister_trigger_traceon_traceoff_cmds(void)1603 static __init void unregister_trigger_traceon_traceoff_cmds(void)
1604 {
1605 unregister_event_command(&trigger_traceon_cmd);
1606 unregister_event_command(&trigger_traceoff_cmd);
1607 }
1608
1609 static void
event_enable_trigger(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1610 event_enable_trigger(struct event_trigger_data *data,
1611 struct trace_buffer *buffer, void *rec,
1612 struct ring_buffer_event *event)
1613 {
1614 struct enable_trigger_data *enable_data = data->private_data;
1615
1616 if (enable_data->enable)
1617 clear_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &enable_data->file->flags);
1618 else
1619 set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &enable_data->file->flags);
1620 }
1621
1622 static bool
event_enable_count_func(struct event_trigger_data * data,struct trace_buffer * buffer,void * rec,struct ring_buffer_event * event)1623 event_enable_count_func(struct event_trigger_data *data,
1624 struct trace_buffer *buffer, void *rec,
1625 struct ring_buffer_event *event)
1626 {
1627 struct enable_trigger_data *enable_data = data->private_data;
1628
1629 if (!data->count)
1630 return false;
1631
1632 /* Skip if the event is in a state we want to switch to */
1633 if (enable_data->enable == !(enable_data->file->flags & EVENT_FILE_FL_SOFT_DISABLED))
1634 return false;
1635
1636 if (data->count != -1)
1637 (data->count)--;
1638
1639 return true;
1640 }
1641
event_enable_trigger_print(struct seq_file * m,struct event_trigger_data * data)1642 int event_enable_trigger_print(struct seq_file *m,
1643 struct event_trigger_data *data)
1644 {
1645 struct enable_trigger_data *enable_data = data->private_data;
1646
1647 seq_printf(m, "%s:%s:%s",
1648 enable_data->hist ?
1649 (enable_data->enable ? ENABLE_HIST_STR : DISABLE_HIST_STR) :
1650 (enable_data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR),
1651 enable_data->file->event_call->class->system,
1652 trace_event_name(enable_data->file->event_call));
1653
1654 if (data->count == -1)
1655 seq_puts(m, ":unlimited");
1656 else
1657 seq_printf(m, ":count=%ld", data->count);
1658
1659 if (data->filter_str)
1660 seq_printf(m, " if %s\n", data->filter_str);
1661 else
1662 seq_putc(m, '\n');
1663
1664 return 0;
1665 }
1666
event_enable_trigger_free(struct event_trigger_data * data)1667 void event_enable_trigger_free(struct event_trigger_data *data)
1668 {
1669 struct enable_trigger_data *enable_data = data->private_data;
1670
1671 if (WARN_ON_ONCE(data->ref <= 0))
1672 return;
1673
1674 data->ref--;
1675 if (!data->ref) {
1676 /* Remove the SOFT_MODE flag */
1677 trace_event_enable_disable(enable_data->file, 0, 1);
1678 trace_event_put_ref(enable_data->file->event_call);
1679 trigger_data_free(data);
1680 kfree(enable_data);
1681 }
1682 }
1683
event_enable_trigger_parse(struct event_command * cmd_ops,struct trace_event_file * file,char * glob,char * cmd,char * param_and_filter)1684 int event_enable_trigger_parse(struct event_command *cmd_ops,
1685 struct trace_event_file *file,
1686 char *glob, char *cmd, char *param_and_filter)
1687 {
1688 struct trace_event_file *event_enable_file;
1689 struct enable_trigger_data *enable_data;
1690 struct event_trigger_data *trigger_data;
1691 struct trace_array *tr = file->tr;
1692 char *param, *filter;
1693 bool enable, remove;
1694 const char *system;
1695 const char *event;
1696 bool hist = false;
1697 int ret;
1698
1699 remove = event_trigger_check_remove(glob);
1700
1701 if (event_trigger_empty_param(param_and_filter))
1702 return -EINVAL;
1703
1704 ret = event_trigger_separate_filter(param_and_filter, ¶m, &filter, true);
1705 if (ret)
1706 return ret;
1707
1708 system = strsep(¶m, ":");
1709 if (!param)
1710 return -EINVAL;
1711
1712 event = strsep(¶m, ":");
1713
1714 ret = -EINVAL;
1715 event_enable_file = find_event_file(tr, system, event);
1716 if (!event_enable_file)
1717 return ret;
1718
1719 #ifdef CONFIG_HIST_TRIGGERS
1720 hist = ((strcmp(cmd, ENABLE_HIST_STR) == 0) ||
1721 (strcmp(cmd, DISABLE_HIST_STR) == 0));
1722
1723 enable = ((strcmp(cmd, ENABLE_EVENT_STR) == 0) ||
1724 (strcmp(cmd, ENABLE_HIST_STR) == 0));
1725 #else
1726 enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
1727 #endif
1728 ret = -ENOMEM;
1729
1730 enable_data = kzalloc_obj(*enable_data);
1731 if (!enable_data)
1732 return ret;
1733
1734 enable_data->hist = hist;
1735 enable_data->enable = enable;
1736 enable_data->file = event_enable_file;
1737
1738 trigger_data = trigger_data_alloc(cmd_ops, cmd, param, enable_data);
1739 if (!trigger_data) {
1740 kfree(enable_data);
1741 return ret;
1742 }
1743
1744 if (remove) {
1745 event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
1746 kfree(trigger_data);
1747 kfree(enable_data);
1748 ret = 0;
1749 return ret;
1750 }
1751
1752 /* Up the trigger_data count to make sure nothing frees it on failure */
1753 event_trigger_init(trigger_data);
1754
1755 ret = event_trigger_parse_num(param, trigger_data);
1756 if (ret)
1757 goto out_free;
1758
1759 ret = event_trigger_set_filter(cmd_ops, file, filter, trigger_data);
1760 if (ret < 0)
1761 goto out_free;
1762
1763 /* Don't let event modules unload while probe registered */
1764 ret = trace_event_try_get_ref(event_enable_file->event_call);
1765 if (!ret) {
1766 ret = -EBUSY;
1767 goto out_free;
1768 }
1769
1770 ret = trace_event_enable_disable(event_enable_file, 1, 1);
1771 if (ret < 0)
1772 goto out_put;
1773
1774 ret = event_trigger_register(cmd_ops, file, glob, trigger_data);
1775 if (ret)
1776 goto out_disable;
1777
1778 event_trigger_free(trigger_data);
1779 return ret;
1780 out_disable:
1781 trace_event_enable_disable(event_enable_file, 0, 1);
1782 out_put:
1783 trace_event_put_ref(event_enable_file->event_call);
1784 out_free:
1785 event_trigger_reset_filter(cmd_ops, trigger_data);
1786 event_trigger_free(trigger_data);
1787 kfree(enable_data);
1788
1789 return ret;
1790 }
1791
event_enable_register_trigger(char * glob,struct event_trigger_data * data,struct trace_event_file * file)1792 int event_enable_register_trigger(char *glob,
1793 struct event_trigger_data *data,
1794 struct trace_event_file *file)
1795 {
1796 struct enable_trigger_data *enable_data = data->private_data;
1797 struct enable_trigger_data *test_enable_data;
1798 struct event_trigger_data *test;
1799 int ret = 0;
1800
1801 lockdep_assert_held(&event_mutex);
1802
1803 list_for_each_entry(test, &file->triggers, list) {
1804 test_enable_data = test->private_data;
1805 if (test_enable_data &&
1806 (test->cmd_ops->trigger_type ==
1807 data->cmd_ops->trigger_type) &&
1808 (test_enable_data->file == enable_data->file)) {
1809 return -EEXIST;
1810 }
1811 }
1812
1813 if (data->cmd_ops->init) {
1814 ret = data->cmd_ops->init(data);
1815 if (ret < 0)
1816 return ret;
1817 }
1818
1819 list_add_rcu(&data->list, &file->triggers);
1820
1821 update_cond_flag(file);
1822 ret = trace_event_trigger_enable_disable(file, 1);
1823 if (ret < 0) {
1824 list_del_rcu(&data->list);
1825 update_cond_flag(file);
1826 }
1827 return ret;
1828 }
1829
event_enable_unregister_trigger(char * glob,struct event_trigger_data * test,struct trace_event_file * file)1830 void event_enable_unregister_trigger(char *glob,
1831 struct event_trigger_data *test,
1832 struct trace_event_file *file)
1833 {
1834 struct enable_trigger_data *test_enable_data = test->private_data;
1835 struct event_trigger_data *data = NULL, *iter;
1836 struct enable_trigger_data *enable_data;
1837
1838 lockdep_assert_held(&event_mutex);
1839
1840 list_for_each_entry(iter, &file->triggers, list) {
1841 enable_data = iter->private_data;
1842 if (enable_data &&
1843 (iter->cmd_ops->trigger_type ==
1844 test->cmd_ops->trigger_type) &&
1845 (enable_data->file == test_enable_data->file)) {
1846 data = iter;
1847 list_del_rcu(&data->list);
1848 trace_event_trigger_enable_disable(file, 0);
1849 update_cond_flag(file);
1850 break;
1851 }
1852 }
1853
1854 if (data && data->cmd_ops->free)
1855 data->cmd_ops->free(data);
1856 }
1857
1858 static struct event_command trigger_enable_cmd = {
1859 .name = ENABLE_EVENT_STR,
1860 .trigger_type = ETT_EVENT_ENABLE,
1861 .parse = event_enable_trigger_parse,
1862 .reg = event_enable_register_trigger,
1863 .unreg = event_enable_unregister_trigger,
1864 .set_filter = set_trigger_filter,
1865 .trigger = event_enable_trigger,
1866 .count_func = event_enable_count_func,
1867 .print = event_enable_trigger_print,
1868 .init = event_trigger_init,
1869 .free = event_enable_trigger_free,
1870 };
1871
1872 static struct event_command trigger_disable_cmd = {
1873 .name = DISABLE_EVENT_STR,
1874 .trigger_type = ETT_EVENT_ENABLE,
1875 .parse = event_enable_trigger_parse,
1876 .reg = event_enable_register_trigger,
1877 .unreg = event_enable_unregister_trigger,
1878 .set_filter = set_trigger_filter,
1879 .trigger = event_enable_trigger,
1880 .count_func = event_enable_count_func,
1881 .print = event_enable_trigger_print,
1882 .init = event_trigger_init,
1883 .free = event_enable_trigger_free,
1884 };
1885
unregister_trigger_enable_disable_cmds(void)1886 static __init void unregister_trigger_enable_disable_cmds(void)
1887 {
1888 unregister_event_command(&trigger_enable_cmd);
1889 unregister_event_command(&trigger_disable_cmd);
1890 }
1891
register_trigger_enable_disable_cmds(void)1892 static __init int register_trigger_enable_disable_cmds(void)
1893 {
1894 int ret;
1895
1896 ret = register_event_command(&trigger_enable_cmd);
1897 if (WARN_ON(ret < 0))
1898 return ret;
1899 ret = register_event_command(&trigger_disable_cmd);
1900 if (WARN_ON(ret < 0))
1901 unregister_trigger_enable_disable_cmds();
1902
1903 return ret;
1904 }
1905
register_trigger_traceon_traceoff_cmds(void)1906 static __init int register_trigger_traceon_traceoff_cmds(void)
1907 {
1908 int ret;
1909
1910 ret = register_event_command(&trigger_traceon_cmd);
1911 if (WARN_ON(ret < 0))
1912 return ret;
1913 ret = register_event_command(&trigger_traceoff_cmd);
1914 if (WARN_ON(ret < 0))
1915 unregister_trigger_traceon_traceoff_cmds();
1916
1917 return ret;
1918 }
1919
register_trigger_cmds(void)1920 __init int register_trigger_cmds(void)
1921 {
1922 register_trigger_traceon_traceoff_cmds();
1923 register_trigger_snapshot_cmd();
1924 register_trigger_stacktrace_cmd();
1925 register_trigger_enable_disable_cmds();
1926 register_trigger_hist_enable_disable_cmds();
1927 register_trigger_hist_cmd();
1928
1929 return 0;
1930 }
1931