Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * trace_events_trigger - trace event triggers
0004  *
0005  * Copyright (C) 2013 Tom Zanussi <tom.zanussi@linux.intel.com>
0006  */
0007 
0008 #include <linux/security.h>
0009 #include <linux/module.h>
0010 #include <linux/ctype.h>
0011 #include <linux/mutex.h>
0012 #include <linux/slab.h>
0013 #include <linux/rculist.h>
0014 
0015 #include "trace.h"
0016 
0017 static LIST_HEAD(trigger_commands);
0018 static DEFINE_MUTEX(trigger_cmd_mutex);
0019 
0020 void trigger_data_free(struct event_trigger_data *data)
0021 {
0022     if (data->cmd_ops->set_filter)
0023         data->cmd_ops->set_filter(NULL, data, NULL);
0024 
0025     /* make sure current triggers exit before free */
0026     tracepoint_synchronize_unregister();
0027 
0028     kfree(data);
0029 }
0030 
0031 /**
0032  * event_triggers_call - Call triggers associated with a trace event
0033  * @file: The trace_event_file associated with the event
0034  * @rec: The trace entry for the event, NULL for unconditional invocation
0035  *
0036  * For each trigger associated with an event, invoke the trigger
0037  * function registered with the associated trigger command.  If rec is
0038  * non-NULL, it means that the trigger requires further processing and
0039  * shouldn't be unconditionally invoked.  If rec is non-NULL and the
0040  * trigger has a filter associated with it, rec will checked against
0041  * the filter and if the record matches the trigger will be invoked.
0042  * If the trigger is a 'post_trigger', meaning it shouldn't be invoked
0043  * in any case until the current event is written, the trigger
0044  * function isn't invoked but the bit associated with the deferred
0045  * trigger is set in the return value.
0046  *
0047  * Returns an enum event_trigger_type value containing a set bit for
0048  * any trigger that should be deferred, ETT_NONE if nothing to defer.
0049  *
0050  * Called from tracepoint handlers (with rcu_read_lock_sched() held).
0051  *
0052  * Return: an enum event_trigger_type value containing a set bit for
0053  * any trigger that should be deferred, ETT_NONE if nothing to defer.
0054  */
0055 enum event_trigger_type
0056 event_triggers_call(struct trace_event_file *file,
0057             struct trace_buffer *buffer, void *rec,
0058             struct ring_buffer_event *event)
0059 {
0060     struct event_trigger_data *data;
0061     enum event_trigger_type tt = ETT_NONE;
0062     struct event_filter *filter;
0063 
0064     if (list_empty(&file->triggers))
0065         return tt;
0066 
0067     list_for_each_entry_rcu(data, &file->triggers, list) {
0068         if (data->paused)
0069             continue;
0070         if (!rec) {
0071             data->ops->trigger(data, buffer, rec, event);
0072             continue;
0073         }
0074         filter = rcu_dereference_sched(data->filter);
0075         if (filter && !filter_match_preds(filter, rec))
0076             continue;
0077         if (event_command_post_trigger(data->cmd_ops)) {
0078             tt |= data->cmd_ops->trigger_type;
0079             continue;
0080         }
0081         data->ops->trigger(data, buffer, rec, event);
0082     }
0083     return tt;
0084 }
0085 EXPORT_SYMBOL_GPL(event_triggers_call);
0086 
0087 bool __trace_trigger_soft_disabled(struct trace_event_file *file)
0088 {
0089     unsigned long eflags = file->flags;
0090 
0091     if (eflags & EVENT_FILE_FL_TRIGGER_MODE)
0092         event_triggers_call(file, NULL, NULL, NULL);
0093     if (eflags & EVENT_FILE_FL_SOFT_DISABLED)
0094         return true;
0095     if (eflags & EVENT_FILE_FL_PID_FILTER)
0096         return trace_event_ignore_this_pid(file);
0097     return false;
0098 }
0099 EXPORT_SYMBOL_GPL(__trace_trigger_soft_disabled);
0100 
0101 /**
0102  * event_triggers_post_call - Call 'post_triggers' for a trace event
0103  * @file: The trace_event_file associated with the event
0104  * @tt: enum event_trigger_type containing a set bit for each trigger to invoke
0105  *
0106  * For each trigger associated with an event, invoke the trigger
0107  * function registered with the associated trigger command, if the
0108  * corresponding bit is set in the tt enum passed into this function.
0109  * See @event_triggers_call for details on how those bits are set.
0110  *
0111  * Called from tracepoint handlers (with rcu_read_lock_sched() held).
0112  */
0113 void
0114 event_triggers_post_call(struct trace_event_file *file,
0115              enum event_trigger_type tt)
0116 {
0117     struct event_trigger_data *data;
0118 
0119     list_for_each_entry_rcu(data, &file->triggers, list) {
0120         if (data->paused)
0121             continue;
0122         if (data->cmd_ops->trigger_type & tt)
0123             data->ops->trigger(data, NULL, NULL, NULL);
0124     }
0125 }
0126 EXPORT_SYMBOL_GPL(event_triggers_post_call);
0127 
0128 #define SHOW_AVAILABLE_TRIGGERS (void *)(1UL)
0129 
0130 static void *trigger_next(struct seq_file *m, void *t, loff_t *pos)
0131 {
0132     struct trace_event_file *event_file = event_file_data(m->private);
0133 
0134     if (t == SHOW_AVAILABLE_TRIGGERS) {
0135         (*pos)++;
0136         return NULL;
0137     }
0138     return seq_list_next(t, &event_file->triggers, pos);
0139 }
0140 
0141 static bool check_user_trigger(struct trace_event_file *file)
0142 {
0143     struct event_trigger_data *data;
0144 
0145     list_for_each_entry_rcu(data, &file->triggers, list,
0146                 lockdep_is_held(&event_mutex)) {
0147         if (data->flags & EVENT_TRIGGER_FL_PROBE)
0148             continue;
0149         return true;
0150     }
0151     return false;
0152 }
0153 
0154 static void *trigger_start(struct seq_file *m, loff_t *pos)
0155 {
0156     struct trace_event_file *event_file;
0157 
0158     /* ->stop() is called even if ->start() fails */
0159     mutex_lock(&event_mutex);
0160     event_file = event_file_data(m->private);
0161     if (unlikely(!event_file))
0162         return ERR_PTR(-ENODEV);
0163 
0164     if (list_empty(&event_file->triggers) || !check_user_trigger(event_file))
0165         return *pos == 0 ? SHOW_AVAILABLE_TRIGGERS : NULL;
0166 
0167     return seq_list_start(&event_file->triggers, *pos);
0168 }
0169 
0170 static void trigger_stop(struct seq_file *m, void *t)
0171 {
0172     mutex_unlock(&event_mutex);
0173 }
0174 
0175 static int trigger_show(struct seq_file *m, void *v)
0176 {
0177     struct event_trigger_data *data;
0178     struct event_command *p;
0179 
0180     if (v == SHOW_AVAILABLE_TRIGGERS) {
0181         seq_puts(m, "# Available triggers:\n");
0182         seq_putc(m, '#');
0183         mutex_lock(&trigger_cmd_mutex);
0184         list_for_each_entry_reverse(p, &trigger_commands, list)
0185             seq_printf(m, " %s", p->name);
0186         seq_putc(m, '\n');
0187         mutex_unlock(&trigger_cmd_mutex);
0188         return 0;
0189     }
0190 
0191     data = list_entry(v, struct event_trigger_data, list);
0192     data->ops->print(m, data);
0193 
0194     return 0;
0195 }
0196 
0197 static const struct seq_operations event_triggers_seq_ops = {
0198     .start = trigger_start,
0199     .next = trigger_next,
0200     .stop = trigger_stop,
0201     .show = trigger_show,
0202 };
0203 
0204 static int event_trigger_regex_open(struct inode *inode, struct file *file)
0205 {
0206     int ret;
0207 
0208     ret = security_locked_down(LOCKDOWN_TRACEFS);
0209     if (ret)
0210         return ret;
0211 
0212     mutex_lock(&event_mutex);
0213 
0214     if (unlikely(!event_file_data(file))) {
0215         mutex_unlock(&event_mutex);
0216         return -ENODEV;
0217     }
0218 
0219     if ((file->f_mode & FMODE_WRITE) &&
0220         (file->f_flags & O_TRUNC)) {
0221         struct trace_event_file *event_file;
0222         struct event_command *p;
0223 
0224         event_file = event_file_data(file);
0225 
0226         list_for_each_entry(p, &trigger_commands, list) {
0227             if (p->unreg_all)
0228                 p->unreg_all(event_file);
0229         }
0230     }
0231 
0232     if (file->f_mode & FMODE_READ) {
0233         ret = seq_open(file, &event_triggers_seq_ops);
0234         if (!ret) {
0235             struct seq_file *m = file->private_data;
0236             m->private = file;
0237         }
0238     }
0239 
0240     mutex_unlock(&event_mutex);
0241 
0242     return ret;
0243 }
0244 
0245 int trigger_process_regex(struct trace_event_file *file, char *buff)
0246 {
0247     char *command, *next;
0248     struct event_command *p;
0249     int ret = -EINVAL;
0250 
0251     next = buff = skip_spaces(buff);
0252     command = strsep(&next, ": \t");
0253     if (next) {
0254         next = skip_spaces(next);
0255         if (!*next)
0256             next = NULL;
0257     }
0258     command = (command[0] != '!') ? command : command + 1;
0259 
0260     mutex_lock(&trigger_cmd_mutex);
0261     list_for_each_entry(p, &trigger_commands, list) {
0262         if (strcmp(p->name, command) == 0) {
0263             ret = p->parse(p, file, buff, command, next);
0264             goto out_unlock;
0265         }
0266     }
0267  out_unlock:
0268     mutex_unlock(&trigger_cmd_mutex);
0269 
0270     return ret;
0271 }
0272 
0273 static ssize_t event_trigger_regex_write(struct file *file,
0274                      const char __user *ubuf,
0275                      size_t cnt, loff_t *ppos)
0276 {
0277     struct trace_event_file *event_file;
0278     ssize_t ret;
0279     char *buf;
0280 
0281     if (!cnt)
0282         return 0;
0283 
0284     if (cnt >= PAGE_SIZE)
0285         return -EINVAL;
0286 
0287     buf = memdup_user_nul(ubuf, cnt);
0288     if (IS_ERR(buf))
0289         return PTR_ERR(buf);
0290 
0291     strim(buf);
0292 
0293     mutex_lock(&event_mutex);
0294     event_file = event_file_data(file);
0295     if (unlikely(!event_file)) {
0296         mutex_unlock(&event_mutex);
0297         kfree(buf);
0298         return -ENODEV;
0299     }
0300     ret = trigger_process_regex(event_file, buf);
0301     mutex_unlock(&event_mutex);
0302 
0303     kfree(buf);
0304     if (ret < 0)
0305         goto out;
0306 
0307     *ppos += cnt;
0308     ret = cnt;
0309  out:
0310     return ret;
0311 }
0312 
0313 static int event_trigger_regex_release(struct inode *inode, struct file *file)
0314 {
0315     mutex_lock(&event_mutex);
0316 
0317     if (file->f_mode & FMODE_READ)
0318         seq_release(inode, file);
0319 
0320     mutex_unlock(&event_mutex);
0321 
0322     return 0;
0323 }
0324 
0325 static ssize_t
0326 event_trigger_write(struct file *filp, const char __user *ubuf,
0327             size_t cnt, loff_t *ppos)
0328 {
0329     return event_trigger_regex_write(filp, ubuf, cnt, ppos);
0330 }
0331 
0332 static int
0333 event_trigger_open(struct inode *inode, struct file *filp)
0334 {
0335     /* Checks for tracefs lockdown */
0336     return event_trigger_regex_open(inode, filp);
0337 }
0338 
0339 static int
0340 event_trigger_release(struct inode *inode, struct file *file)
0341 {
0342     return event_trigger_regex_release(inode, file);
0343 }
0344 
0345 const struct file_operations event_trigger_fops = {
0346     .open = event_trigger_open,
0347     .read = seq_read,
0348     .write = event_trigger_write,
0349     .llseek = tracing_lseek,
0350     .release = event_trigger_release,
0351 };
0352 
0353 /*
0354  * Currently we only register event commands from __init, so mark this
0355  * __init too.
0356  */
0357 __init int register_event_command(struct event_command *cmd)
0358 {
0359     struct event_command *p;
0360     int ret = 0;
0361 
0362     mutex_lock(&trigger_cmd_mutex);
0363     list_for_each_entry(p, &trigger_commands, list) {
0364         if (strcmp(cmd->name, p->name) == 0) {
0365             ret = -EBUSY;
0366             goto out_unlock;
0367         }
0368     }
0369     list_add(&cmd->list, &trigger_commands);
0370  out_unlock:
0371     mutex_unlock(&trigger_cmd_mutex);
0372 
0373     return ret;
0374 }
0375 
0376 /*
0377  * Currently we only unregister event commands from __init, so mark
0378  * this __init too.
0379  */
0380 __init int unregister_event_command(struct event_command *cmd)
0381 {
0382     struct event_command *p, *n;
0383     int ret = -ENODEV;
0384 
0385     mutex_lock(&trigger_cmd_mutex);
0386     list_for_each_entry_safe(p, n, &trigger_commands, list) {
0387         if (strcmp(cmd->name, p->name) == 0) {
0388             ret = 0;
0389             list_del_init(&p->list);
0390             goto out_unlock;
0391         }
0392     }
0393  out_unlock:
0394     mutex_unlock(&trigger_cmd_mutex);
0395 
0396     return ret;
0397 }
0398 
0399 /**
0400  * event_trigger_print - Generic event_trigger_ops @print implementation
0401  * @name: The name of the event trigger
0402  * @m: The seq_file being printed to
0403  * @data: Trigger-specific data
0404  * @filter_str: filter_str to print, if present
0405  *
0406  * Common implementation for event triggers to print themselves.
0407  *
0408  * Usually wrapped by a function that simply sets the @name of the
0409  * trigger command and then invokes this.
0410  *
0411  * Return: 0 on success, errno otherwise
0412  */
0413 static int
0414 event_trigger_print(const char *name, struct seq_file *m,
0415             void *data, char *filter_str)
0416 {
0417     long count = (long)data;
0418 
0419     seq_puts(m, name);
0420 
0421     if (count == -1)
0422         seq_puts(m, ":unlimited");
0423     else
0424         seq_printf(m, ":count=%ld", count);
0425 
0426     if (filter_str)
0427         seq_printf(m, " if %s\n", filter_str);
0428     else
0429         seq_putc(m, '\n');
0430 
0431     return 0;
0432 }
0433 
0434 /**
0435  * event_trigger_init - Generic event_trigger_ops @init implementation
0436  * @data: Trigger-specific data
0437  *
0438  * Common implementation of event trigger initialization.
0439  *
0440  * Usually used directly as the @init method in event trigger
0441  * implementations.
0442  *
0443  * Return: 0 on success, errno otherwise
0444  */
0445 int event_trigger_init(struct event_trigger_data *data)
0446 {
0447     data->ref++;
0448     return 0;
0449 }
0450 
0451 /**
0452  * event_trigger_free - Generic event_trigger_ops @free implementation
0453  * @data: Trigger-specific data
0454  *
0455  * Common implementation of event trigger de-initialization.
0456  *
0457  * Usually used directly as the @free method in event trigger
0458  * implementations.
0459  */
0460 static void
0461 event_trigger_free(struct event_trigger_data *data)
0462 {
0463     if (WARN_ON_ONCE(data->ref <= 0))
0464         return;
0465 
0466     data->ref--;
0467     if (!data->ref)
0468         trigger_data_free(data);
0469 }
0470 
0471 int trace_event_trigger_enable_disable(struct trace_event_file *file,
0472                        int trigger_enable)
0473 {
0474     int ret = 0;
0475 
0476     if (trigger_enable) {
0477         if (atomic_inc_return(&file->tm_ref) > 1)
0478             return ret;
0479         set_bit(EVENT_FILE_FL_TRIGGER_MODE_BIT, &file->flags);
0480         ret = trace_event_enable_disable(file, 1, 1);
0481     } else {
0482         if (atomic_dec_return(&file->tm_ref) > 0)
0483             return ret;
0484         clear_bit(EVENT_FILE_FL_TRIGGER_MODE_BIT, &file->flags);
0485         ret = trace_event_enable_disable(file, 0, 1);
0486     }
0487 
0488     return ret;
0489 }
0490 
0491 /**
0492  * clear_event_triggers - Clear all triggers associated with a trace array
0493  * @tr: The trace array to clear
0494  *
0495  * For each trigger, the triggering event has its tm_ref decremented
0496  * via trace_event_trigger_enable_disable(), and any associated event
0497  * (in the case of enable/disable_event triggers) will have its sm_ref
0498  * decremented via free()->trace_event_enable_disable().  That
0499  * combination effectively reverses the soft-mode/trigger state added
0500  * by trigger registration.
0501  *
0502  * Must be called with event_mutex held.
0503  */
0504 void
0505 clear_event_triggers(struct trace_array *tr)
0506 {
0507     struct trace_event_file *file;
0508 
0509     list_for_each_entry(file, &tr->events, list) {
0510         struct event_trigger_data *data, *n;
0511         list_for_each_entry_safe(data, n, &file->triggers, list) {
0512             trace_event_trigger_enable_disable(file, 0);
0513             list_del_rcu(&data->list);
0514             if (data->ops->free)
0515                 data->ops->free(data);
0516         }
0517     }
0518 }
0519 
0520 /**
0521  * update_cond_flag - Set or reset the TRIGGER_COND bit
0522  * @file: The trace_event_file associated with the event
0523  *
0524  * If an event has triggers and any of those triggers has a filter or
0525  * a post_trigger, trigger invocation needs to be deferred until after
0526  * the current event has logged its data, and the event should have
0527  * its TRIGGER_COND bit set, otherwise the TRIGGER_COND bit should be
0528  * cleared.
0529  */
0530 void update_cond_flag(struct trace_event_file *file)
0531 {
0532     struct event_trigger_data *data;
0533     bool set_cond = false;
0534 
0535     lockdep_assert_held(&event_mutex);
0536 
0537     list_for_each_entry(data, &file->triggers, list) {
0538         if (data->filter || event_command_post_trigger(data->cmd_ops) ||
0539             event_command_needs_rec(data->cmd_ops)) {
0540             set_cond = true;
0541             break;
0542         }
0543     }
0544 
0545     if (set_cond)
0546         set_bit(EVENT_FILE_FL_TRIGGER_COND_BIT, &file->flags);
0547     else
0548         clear_bit(EVENT_FILE_FL_TRIGGER_COND_BIT, &file->flags);
0549 }
0550 
0551 /**
0552  * register_trigger - Generic event_command @reg implementation
0553  * @glob: The raw string used to register the trigger
0554  * @data: Trigger-specific data to associate with the trigger
0555  * @file: The trace_event_file associated with the event
0556  *
0557  * Common implementation for event trigger registration.
0558  *
0559  * Usually used directly as the @reg method in event command
0560  * implementations.
0561  *
0562  * Return: 0 on success, errno otherwise
0563  */
0564 static int register_trigger(char *glob,
0565                 struct event_trigger_data *data,
0566                 struct trace_event_file *file)
0567 {
0568     struct event_trigger_data *test;
0569     int ret = 0;
0570 
0571     lockdep_assert_held(&event_mutex);
0572 
0573     list_for_each_entry(test, &file->triggers, list) {
0574         if (test->cmd_ops->trigger_type == data->cmd_ops->trigger_type) {
0575             ret = -EEXIST;
0576             goto out;
0577         }
0578     }
0579 
0580     if (data->ops->init) {
0581         ret = data->ops->init(data);
0582         if (ret < 0)
0583             goto out;
0584     }
0585 
0586     list_add_rcu(&data->list, &file->triggers);
0587 
0588     update_cond_flag(file);
0589     ret = trace_event_trigger_enable_disable(file, 1);
0590     if (ret < 0) {
0591         list_del_rcu(&data->list);
0592         update_cond_flag(file);
0593     }
0594 out:
0595     return ret;
0596 }
0597 
0598 /**
0599  * unregister_trigger - Generic event_command @unreg implementation
0600  * @glob: The raw string used to register the trigger
0601  * @test: Trigger-specific data used to find the trigger to remove
0602  * @file: The trace_event_file associated with the event
0603  *
0604  * Common implementation for event trigger unregistration.
0605  *
0606  * Usually used directly as the @unreg method in event command
0607  * implementations.
0608  */
0609 static void unregister_trigger(char *glob,
0610                    struct event_trigger_data *test,
0611                    struct trace_event_file *file)
0612 {
0613     struct event_trigger_data *data = NULL, *iter;
0614 
0615     lockdep_assert_held(&event_mutex);
0616 
0617     list_for_each_entry(iter, &file->triggers, list) {
0618         if (iter->cmd_ops->trigger_type == test->cmd_ops->trigger_type) {
0619             data = iter;
0620             list_del_rcu(&data->list);
0621             trace_event_trigger_enable_disable(file, 0);
0622             update_cond_flag(file);
0623             break;
0624         }
0625     }
0626 
0627     if (data && data->ops->free)
0628         data->ops->free(data);
0629 }
0630 
0631 /*
0632  * Event trigger parsing helper functions.
0633  *
0634  * These functions help make it easier to write an event trigger
0635  * parsing function i.e. the struct event_command.parse() callback
0636  * function responsible for parsing and registering a trigger command
0637  * written to the 'trigger' file.
0638  *
0639  * A trigger command (or just 'trigger' for short) takes the form:
0640  *   [trigger] [if filter]
0641  *
0642  * The struct event_command.parse() callback (and other struct
0643  * event_command functions) refer to several components of a trigger
0644  * command.  Those same components are referenced by the event trigger
0645  * parsing helper functions defined below.  These components are:
0646  *
0647  *   cmd               - the trigger command name
0648  *   glob              - the trigger command name optionally prefaced with '!'
0649  *   param_and_filter  - text following cmd and ':'
0650  *   param             - text following cmd and ':' and stripped of filter
0651  *   filter            - the optional filter text following (and including) 'if'
0652  *
0653  * To illustrate the use of these componenents, here are some concrete
0654  * examples. For the following triggers:
0655  *
0656  *   echo 'traceon:5 if pid == 0' > trigger
0657  *     - 'traceon' is both cmd and glob
0658  *     - '5 if pid == 0' is the param_and_filter
0659  *     - '5' is the param
0660  *     - 'if pid == 0' is the filter
0661  *
0662  *   echo 'enable_event:sys:event:n' > trigger
0663  *     - 'enable_event' is both cmd and glob
0664  *     - 'sys:event:n' is the param_and_filter
0665  *     - 'sys:event:n' is the param
0666  *     - there is no filter
0667  *
0668  *   echo 'hist:keys=pid if prio > 50' > trigger
0669  *     - 'hist' is both cmd and glob
0670  *     - 'keys=pid if prio > 50' is the param_and_filter
0671  *     - 'keys=pid' is the param
0672  *     - 'if prio > 50' is the filter
0673  *
0674  *   echo '!enable_event:sys:event:n' > trigger
0675  *     - 'enable_event' the cmd
0676  *     - '!enable_event' is the glob
0677  *     - 'sys:event:n' is the param_and_filter
0678  *     - 'sys:event:n' is the param
0679  *     - there is no filter
0680  *
0681  *   echo 'traceoff' > trigger
0682  *     - 'traceoff' is both cmd and glob
0683  *     - there is no param_and_filter
0684  *     - there is no param
0685  *     - there is no filter
0686  *
0687  * There are a few different categories of event trigger covered by
0688  * these helpers:
0689  *
0690  *  - triggers that don't require a parameter e.g. traceon
0691  *  - triggers that do require a parameter e.g. enable_event and hist
0692  *  - triggers that though they may not require a param may support an
0693  *    optional 'n' param (n = number of times the trigger should fire)
0694  *    e.g.: traceon:5 or enable_event:sys:event:n
0695  *  - triggers that do not support an 'n' param e.g. hist
0696  *
0697  * These functions can be used or ignored as necessary - it all
0698  * depends on the complexity of the trigger, and the granularity of
0699  * the functions supported reflects the fact that some implementations
0700  * may need to customize certain aspects of their implementations and
0701  * won't need certain functions.  For instance, the hist trigger
0702  * implementation doesn't use event_trigger_separate_filter() because
0703  * it has special requirements for handling the filter.
0704  */
0705 
0706 /**
0707  * event_trigger_check_remove - check whether an event trigger specifies remove
0708  * @glob: The trigger command string, with optional remove(!) operator
0709  *
0710  * The event trigger callback implementations pass in 'glob' as a
0711  * parameter.  This is the command name either with or without a
0712  * remove(!)  operator.  This function simply parses the glob and
0713  * determines whether the command corresponds to a trigger removal or
0714  * a trigger addition.
0715  *
0716  * Return: true if this is a remove command, false otherwise
0717  */
0718 bool event_trigger_check_remove(const char *glob)
0719 {
0720     return (glob && glob[0] == '!') ? true : false;
0721 }
0722 
0723 /**
0724  * event_trigger_empty_param - check whether the param is empty
0725  * @param: The trigger param string
0726  *
0727  * The event trigger callback implementations pass in 'param' as a
0728  * parameter.  This corresponds to the string following the command
0729  * name minus the command name.  This function can be called by a
0730  * callback implementation for any command that requires a param; a
0731  * callback that doesn't require a param can ignore it.
0732  *
0733  * Return: true if this is an empty param, false otherwise
0734  */
0735 bool event_trigger_empty_param(const char *param)
0736 {
0737     return !param;
0738 }
0739 
0740 /**
0741  * event_trigger_separate_filter - separate an event trigger from a filter
0742  * @param_and_filter: String containing trigger and possibly filter
0743  * @param: outparam, will be filled with a pointer to the trigger
0744  * @filter: outparam, will be filled with a pointer to the filter
0745  * @param_required: Specifies whether or not the param string is required
0746  *
0747  * Given a param string of the form '[trigger] [if filter]', this
0748  * function separates the filter from the trigger and returns the
0749  * trigger in @param and the filter in @filter.  Either the @param
0750  * or the @filter may be set to NULL by this function - if not set to
0751  * NULL, they will contain strings corresponding to the trigger and
0752  * filter.
0753  *
0754  * There are two cases that need to be handled with respect to the
0755  * passed-in param: either the param is required, or it is not
0756  * required.  If @param_required is set, and there's no param, it will
0757  * return -EINVAL.  If @param_required is not set and there's a param
0758  * that starts with a number, that corresponds to the case of a
0759  * trigger with :n (n = number of times the trigger should fire) and
0760  * the parsing continues normally; otherwise the function just returns
0761  * and assumes param just contains a filter and there's nothing else
0762  * to do.
0763  *
0764  * Return: 0 on success, errno otherwise
0765  */
0766 int event_trigger_separate_filter(char *param_and_filter, char **param,
0767                   char **filter, bool param_required)
0768 {
0769     int ret = 0;
0770 
0771     *param = *filter = NULL;
0772 
0773     if (!param_and_filter) {
0774         if (param_required)
0775             ret = -EINVAL;
0776         goto out;
0777     }
0778 
0779     /*
0780      * Here we check for an optional param. The only legal
0781      * optional param is :n, and if that's the case, continue
0782      * below. Otherwise we assume what's left is a filter and
0783      * return it as the filter string for the caller to deal with.
0784      */
0785     if (!param_required && param_and_filter && !isdigit(param_and_filter[0])) {
0786         *filter = param_and_filter;
0787         goto out;
0788     }
0789 
0790     /*
0791      * Separate the param from the filter (param [if filter]).
0792      * Here we have either an optional :n param or a required
0793      * param and an optional filter.
0794      */
0795     *param = strsep(&param_and_filter, " \t");
0796 
0797     /*
0798      * Here we have a filter, though it may be empty.
0799      */
0800     if (param_and_filter) {
0801         *filter = skip_spaces(param_and_filter);
0802         if (!**filter)
0803             *filter = NULL;
0804     }
0805 out:
0806     return ret;
0807 }
0808 
0809 /**
0810  * event_trigger_alloc - allocate and init event_trigger_data for a trigger
0811  * @cmd_ops: The event_command operations for the trigger
0812  * @cmd: The cmd string
0813  * @param: The param string
0814  * @private_data: User data to associate with the event trigger
0815  *
0816  * Allocate an event_trigger_data instance and initialize it.  The
0817  * @cmd_ops are used along with the @cmd and @param to get the
0818  * trigger_ops to assign to the event_trigger_data.  @private_data can
0819  * also be passed in and associated with the event_trigger_data.
0820  *
0821  * Use event_trigger_free() to free an event_trigger_data object.
0822  *
0823  * Return: The trigger_data object success, NULL otherwise
0824  */
0825 struct event_trigger_data *event_trigger_alloc(struct event_command *cmd_ops,
0826                            char *cmd,
0827                            char *param,
0828                            void *private_data)
0829 {
0830     struct event_trigger_data *trigger_data;
0831     struct event_trigger_ops *trigger_ops;
0832 
0833     trigger_ops = cmd_ops->get_trigger_ops(cmd, param);
0834 
0835     trigger_data = kzalloc(sizeof(*trigger_data), GFP_KERNEL);
0836     if (!trigger_data)
0837         return NULL;
0838 
0839     trigger_data->count = -1;
0840     trigger_data->ops = trigger_ops;
0841     trigger_data->cmd_ops = cmd_ops;
0842     trigger_data->private_data = private_data;
0843 
0844     INIT_LIST_HEAD(&trigger_data->list);
0845     INIT_LIST_HEAD(&trigger_data->named_list);
0846     RCU_INIT_POINTER(trigger_data->filter, NULL);
0847 
0848     return trigger_data;
0849 }
0850 
0851 /**
0852  * event_trigger_parse_num - parse and return the number param for a trigger
0853  * @param: The param string
0854  * @trigger_data: The trigger_data for the trigger
0855  *
0856  * Parse the :n (n = number of times the trigger should fire) param
0857  * and set the count variable in the trigger_data to the parsed count.
0858  *
0859  * Return: 0 on success, errno otherwise
0860  */
0861 int event_trigger_parse_num(char *param,
0862                 struct event_trigger_data *trigger_data)
0863 {
0864     char *number;
0865     int ret = 0;
0866 
0867     if (param) {
0868         number = strsep(&param, ":");
0869 
0870         if (!strlen(number))
0871             return -EINVAL;
0872 
0873         /*
0874          * We use the callback data field (which is a pointer)
0875          * as our counter.
0876          */
0877         ret = kstrtoul(number, 0, &trigger_data->count);
0878     }
0879 
0880     return ret;
0881 }
0882 
0883 /**
0884  * event_trigger_set_filter - set an event trigger's filter
0885  * @cmd_ops: The event_command operations for the trigger
0886  * @file: The event file for the trigger's event
0887  * @param: The string containing the filter
0888  * @trigger_data: The trigger_data for the trigger
0889  *
0890  * Set the filter for the trigger.  If the filter is NULL, just return
0891  * without error.
0892  *
0893  * Return: 0 on success, errno otherwise
0894  */
0895 int event_trigger_set_filter(struct event_command *cmd_ops,
0896                  struct trace_event_file *file,
0897                  char *param,
0898                  struct event_trigger_data *trigger_data)
0899 {
0900     if (param && cmd_ops->set_filter)
0901         return cmd_ops->set_filter(param, trigger_data, file);
0902 
0903     return 0;
0904 }
0905 
0906 /**
0907  * event_trigger_reset_filter - reset an event trigger's filter
0908  * @cmd_ops: The event_command operations for the trigger
0909  * @trigger_data: The trigger_data for the trigger
0910  *
0911  * Reset the filter for the trigger to no filter.
0912  */
0913 void event_trigger_reset_filter(struct event_command *cmd_ops,
0914                 struct event_trigger_data *trigger_data)
0915 {
0916     if (cmd_ops->set_filter)
0917         cmd_ops->set_filter(NULL, trigger_data, NULL);
0918 }
0919 
0920 /**
0921  * event_trigger_register - register an event trigger
0922  * @cmd_ops: The event_command operations for the trigger
0923  * @file: The event file for the trigger's event
0924  * @glob: The trigger command string, with optional remove(!) operator
0925  * @trigger_data: The trigger_data for the trigger
0926  *
0927  * Register an event trigger.  The @cmd_ops are used to call the
0928  * cmd_ops->reg() function which actually does the registration.
0929  *
0930  * Return: 0 on success, errno otherwise
0931  */
0932 int event_trigger_register(struct event_command *cmd_ops,
0933                struct trace_event_file *file,
0934                char *glob,
0935                struct event_trigger_data *trigger_data)
0936 {
0937     return cmd_ops->reg(glob, trigger_data, file);
0938 }
0939 
0940 /**
0941  * event_trigger_unregister - unregister an event trigger
0942  * @cmd_ops: The event_command operations for the trigger
0943  * @file: The event file for the trigger's event
0944  * @glob: The trigger command string, with optional remove(!) operator
0945  * @trigger_data: The trigger_data for the trigger
0946  *
0947  * Unregister an event trigger.  The @cmd_ops are used to call the
0948  * cmd_ops->unreg() function which actually does the unregistration.
0949  */
0950 void event_trigger_unregister(struct event_command *cmd_ops,
0951                   struct trace_event_file *file,
0952                   char *glob,
0953                   struct event_trigger_data *trigger_data)
0954 {
0955     cmd_ops->unreg(glob, trigger_data, file);
0956 }
0957 
0958 /*
0959  * End event trigger parsing helper functions.
0960  */
0961 
0962 /**
0963  * event_trigger_parse - Generic event_command @parse implementation
0964  * @cmd_ops: The command ops, used for trigger registration
0965  * @file: The trace_event_file associated with the event
0966  * @glob: The raw string used to register the trigger
0967  * @cmd: The cmd portion of the string used to register the trigger
0968  * @param_and_filter: The param and filter portion of the string used to register the trigger
0969  *
0970  * Common implementation for event command parsing and trigger
0971  * instantiation.
0972  *
0973  * Usually used directly as the @parse method in event command
0974  * implementations.
0975  *
0976  * Return: 0 on success, errno otherwise
0977  */
0978 static int
0979 event_trigger_parse(struct event_command *cmd_ops,
0980             struct trace_event_file *file,
0981             char *glob, char *cmd, char *param_and_filter)
0982 {
0983     struct event_trigger_data *trigger_data;
0984     char *param, *filter;
0985     bool remove;
0986     int ret;
0987 
0988     remove = event_trigger_check_remove(glob);
0989 
0990     ret = event_trigger_separate_filter(param_and_filter, &param, &filter, false);
0991     if (ret)
0992         return ret;
0993 
0994     ret = -ENOMEM;
0995     trigger_data = event_trigger_alloc(cmd_ops, cmd, param, file);
0996     if (!trigger_data)
0997         goto out;
0998 
0999     if (remove) {
1000         event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
1001         kfree(trigger_data);
1002         ret = 0;
1003         goto out;
1004     }
1005 
1006     ret = event_trigger_parse_num(param, trigger_data);
1007     if (ret)
1008         goto out_free;
1009 
1010     ret = event_trigger_set_filter(cmd_ops, file, filter, trigger_data);
1011     if (ret < 0)
1012         goto out_free;
1013 
1014     /* Up the trigger_data count to make sure reg doesn't free it on failure */
1015     event_trigger_init(trigger_data);
1016 
1017     ret = event_trigger_register(cmd_ops, file, glob, trigger_data);
1018     if (ret)
1019         goto out_free;
1020 
1021     /* Down the counter of trigger_data or free it if not used anymore */
1022     event_trigger_free(trigger_data);
1023  out:
1024     return ret;
1025 
1026  out_free:
1027     event_trigger_reset_filter(cmd_ops, trigger_data);
1028     kfree(trigger_data);
1029     goto out;
1030 }
1031 
1032 /**
1033  * set_trigger_filter - Generic event_command @set_filter implementation
1034  * @filter_str: The filter string for the trigger, NULL to remove filter
1035  * @trigger_data: Trigger-specific data
1036  * @file: The trace_event_file associated with the event
1037  *
1038  * Common implementation for event command filter parsing and filter
1039  * instantiation.
1040  *
1041  * Usually used directly as the @set_filter method in event command
1042  * implementations.
1043  *
1044  * Also used to remove a filter (if filter_str = NULL).
1045  *
1046  * Return: 0 on success, errno otherwise
1047  */
1048 int set_trigger_filter(char *filter_str,
1049                struct event_trigger_data *trigger_data,
1050                struct trace_event_file *file)
1051 {
1052     struct event_trigger_data *data = trigger_data;
1053     struct event_filter *filter = NULL, *tmp;
1054     int ret = -EINVAL;
1055     char *s;
1056 
1057     if (!filter_str) /* clear the current filter */
1058         goto assign;
1059 
1060     s = strsep(&filter_str, " \t");
1061 
1062     if (!strlen(s) || strcmp(s, "if") != 0)
1063         goto out;
1064 
1065     if (!filter_str)
1066         goto out;
1067 
1068     /* The filter is for the 'trigger' event, not the triggered event */
1069     ret = create_event_filter(file->tr, file->event_call,
1070                   filter_str, false, &filter);
1071     /*
1072      * If create_event_filter() fails, filter still needs to be freed.
1073      * Which the calling code will do with data->filter.
1074      */
1075  assign:
1076     tmp = rcu_access_pointer(data->filter);
1077 
1078     rcu_assign_pointer(data->filter, filter);
1079 
1080     if (tmp) {
1081         /* Make sure the call is done with the filter */
1082         tracepoint_synchronize_unregister();
1083         free_event_filter(tmp);
1084     }
1085 
1086     kfree(data->filter_str);
1087     data->filter_str = NULL;
1088 
1089     if (filter_str) {
1090         data->filter_str = kstrdup(filter_str, GFP_KERNEL);
1091         if (!data->filter_str) {
1092             free_event_filter(rcu_access_pointer(data->filter));
1093             data->filter = NULL;
1094             ret = -ENOMEM;
1095         }
1096     }
1097  out:
1098     return ret;
1099 }
1100 
1101 static LIST_HEAD(named_triggers);
1102 
1103 /**
1104  * find_named_trigger - Find the common named trigger associated with @name
1105  * @name: The name of the set of named triggers to find the common data for
1106  *
1107  * Named triggers are sets of triggers that share a common set of
1108  * trigger data.  The first named trigger registered with a given name
1109  * owns the common trigger data that the others subsequently
1110  * registered with the same name will reference.  This function
1111  * returns the common trigger data associated with that first
1112  * registered instance.
1113  *
1114  * Return: the common trigger data for the given named trigger on
1115  * success, NULL otherwise.
1116  */
1117 struct event_trigger_data *find_named_trigger(const char *name)
1118 {
1119     struct event_trigger_data *data;
1120 
1121     if (!name)
1122         return NULL;
1123 
1124     list_for_each_entry(data, &named_triggers, named_list) {
1125         if (data->named_data)
1126             continue;
1127         if (strcmp(data->name, name) == 0)
1128             return data;
1129     }
1130 
1131     return NULL;
1132 }
1133 
1134 /**
1135  * is_named_trigger - determine if a given trigger is a named trigger
1136  * @test: The trigger data to test
1137  *
1138  * Return: true if 'test' is a named trigger, false otherwise.
1139  */
1140 bool is_named_trigger(struct event_trigger_data *test)
1141 {
1142     struct event_trigger_data *data;
1143 
1144     list_for_each_entry(data, &named_triggers, named_list) {
1145         if (test == data)
1146             return true;
1147     }
1148 
1149     return false;
1150 }
1151 
1152 /**
1153  * save_named_trigger - save the trigger in the named trigger list
1154  * @name: The name of the named trigger set
1155  * @data: The trigger data to save
1156  *
1157  * Return: 0 if successful, negative error otherwise.
1158  */
1159 int save_named_trigger(const char *name, struct event_trigger_data *data)
1160 {
1161     data->name = kstrdup(name, GFP_KERNEL);
1162     if (!data->name)
1163         return -ENOMEM;
1164 
1165     list_add(&data->named_list, &named_triggers);
1166 
1167     return 0;
1168 }
1169 
1170 /**
1171  * del_named_trigger - delete a trigger from the named trigger list
1172  * @data: The trigger data to delete
1173  */
1174 void del_named_trigger(struct event_trigger_data *data)
1175 {
1176     kfree(data->name);
1177     data->name = NULL;
1178 
1179     list_del(&data->named_list);
1180 }
1181 
1182 static void __pause_named_trigger(struct event_trigger_data *data, bool pause)
1183 {
1184     struct event_trigger_data *test;
1185 
1186     list_for_each_entry(test, &named_triggers, named_list) {
1187         if (strcmp(test->name, data->name) == 0) {
1188             if (pause) {
1189                 test->paused_tmp = test->paused;
1190                 test->paused = true;
1191             } else {
1192                 test->paused = test->paused_tmp;
1193             }
1194         }
1195     }
1196 }
1197 
1198 /**
1199  * pause_named_trigger - Pause all named triggers with the same name
1200  * @data: The trigger data of a named trigger to pause
1201  *
1202  * Pauses a named trigger along with all other triggers having the
1203  * same name.  Because named triggers share a common set of data,
1204  * pausing only one is meaningless, so pausing one named trigger needs
1205  * to pause all triggers with the same name.
1206  */
1207 void pause_named_trigger(struct event_trigger_data *data)
1208 {
1209     __pause_named_trigger(data, true);
1210 }
1211 
1212 /**
1213  * unpause_named_trigger - Un-pause all named triggers with the same name
1214  * @data: The trigger data of a named trigger to unpause
1215  *
1216  * Un-pauses a named trigger along with all other triggers having the
1217  * same name.  Because named triggers share a common set of data,
1218  * unpausing only one is meaningless, so unpausing one named trigger
1219  * needs to unpause all triggers with the same name.
1220  */
1221 void unpause_named_trigger(struct event_trigger_data *data)
1222 {
1223     __pause_named_trigger(data, false);
1224 }
1225 
1226 /**
1227  * set_named_trigger_data - Associate common named trigger data
1228  * @data: The trigger data to associate
1229  * @named_data: The common named trigger to be associated
1230  *
1231  * Named triggers are sets of triggers that share a common set of
1232  * trigger data.  The first named trigger registered with a given name
1233  * owns the common trigger data that the others subsequently
1234  * registered with the same name will reference.  This function
1235  * associates the common trigger data from the first trigger with the
1236  * given trigger.
1237  */
1238 void set_named_trigger_data(struct event_trigger_data *data,
1239                 struct event_trigger_data *named_data)
1240 {
1241     data->named_data = named_data;
1242 }
1243 
1244 struct event_trigger_data *
1245 get_named_trigger_data(struct event_trigger_data *data)
1246 {
1247     return data->named_data;
1248 }
1249 
1250 static void
1251 traceon_trigger(struct event_trigger_data *data,
1252         struct trace_buffer *buffer, void *rec,
1253         struct ring_buffer_event *event)
1254 {
1255     struct trace_event_file *file = data->private_data;
1256 
1257     if (file) {
1258         if (tracer_tracing_is_on(file->tr))
1259             return;
1260 
1261         tracer_tracing_on(file->tr);
1262         return;
1263     }
1264 
1265     if (tracing_is_on())
1266         return;
1267 
1268     tracing_on();
1269 }
1270 
1271 static void
1272 traceon_count_trigger(struct event_trigger_data *data,
1273               struct trace_buffer *buffer, void *rec,
1274               struct ring_buffer_event *event)
1275 {
1276     struct trace_event_file *file = data->private_data;
1277 
1278     if (file) {
1279         if (tracer_tracing_is_on(file->tr))
1280             return;
1281     } else {
1282         if (tracing_is_on())
1283             return;
1284     }
1285 
1286     if (!data->count)
1287         return;
1288 
1289     if (data->count != -1)
1290         (data->count)--;
1291 
1292     if (file)
1293         tracer_tracing_on(file->tr);
1294     else
1295         tracing_on();
1296 }
1297 
1298 static void
1299 traceoff_trigger(struct event_trigger_data *data,
1300          struct trace_buffer *buffer, void *rec,
1301          struct ring_buffer_event *event)
1302 {
1303     struct trace_event_file *file = data->private_data;
1304 
1305     if (file) {
1306         if (!tracer_tracing_is_on(file->tr))
1307             return;
1308 
1309         tracer_tracing_off(file->tr);
1310         return;
1311     }
1312 
1313     if (!tracing_is_on())
1314         return;
1315 
1316     tracing_off();
1317 }
1318 
1319 static void
1320 traceoff_count_trigger(struct event_trigger_data *data,
1321                struct trace_buffer *buffer, void *rec,
1322                struct ring_buffer_event *event)
1323 {
1324     struct trace_event_file *file = data->private_data;
1325 
1326     if (file) {
1327         if (!tracer_tracing_is_on(file->tr))
1328             return;
1329     } else {
1330         if (!tracing_is_on())
1331             return;
1332     }
1333 
1334     if (!data->count)
1335         return;
1336 
1337     if (data->count != -1)
1338         (data->count)--;
1339 
1340     if (file)
1341         tracer_tracing_off(file->tr);
1342     else
1343         tracing_off();
1344 }
1345 
1346 static int
1347 traceon_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1348 {
1349     return event_trigger_print("traceon", m, (void *)data->count,
1350                    data->filter_str);
1351 }
1352 
1353 static int
1354 traceoff_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1355 {
1356     return event_trigger_print("traceoff", m, (void *)data->count,
1357                    data->filter_str);
1358 }
1359 
1360 static struct event_trigger_ops traceon_trigger_ops = {
1361     .trigger        = traceon_trigger,
1362     .print          = traceon_trigger_print,
1363     .init           = event_trigger_init,
1364     .free           = event_trigger_free,
1365 };
1366 
1367 static struct event_trigger_ops traceon_count_trigger_ops = {
1368     .trigger        = traceon_count_trigger,
1369     .print          = traceon_trigger_print,
1370     .init           = event_trigger_init,
1371     .free           = event_trigger_free,
1372 };
1373 
1374 static struct event_trigger_ops traceoff_trigger_ops = {
1375     .trigger        = traceoff_trigger,
1376     .print          = traceoff_trigger_print,
1377     .init           = event_trigger_init,
1378     .free           = event_trigger_free,
1379 };
1380 
1381 static struct event_trigger_ops traceoff_count_trigger_ops = {
1382     .trigger        = traceoff_count_trigger,
1383     .print          = traceoff_trigger_print,
1384     .init           = event_trigger_init,
1385     .free           = event_trigger_free,
1386 };
1387 
1388 static struct event_trigger_ops *
1389 onoff_get_trigger_ops(char *cmd, char *param)
1390 {
1391     struct event_trigger_ops *ops;
1392 
1393     /* we register both traceon and traceoff to this callback */
1394     if (strcmp(cmd, "traceon") == 0)
1395         ops = param ? &traceon_count_trigger_ops :
1396             &traceon_trigger_ops;
1397     else
1398         ops = param ? &traceoff_count_trigger_ops :
1399             &traceoff_trigger_ops;
1400 
1401     return ops;
1402 }
1403 
1404 static struct event_command trigger_traceon_cmd = {
1405     .name           = "traceon",
1406     .trigger_type       = ETT_TRACE_ONOFF,
1407     .parse          = event_trigger_parse,
1408     .reg            = register_trigger,
1409     .unreg          = unregister_trigger,
1410     .get_trigger_ops    = onoff_get_trigger_ops,
1411     .set_filter     = set_trigger_filter,
1412 };
1413 
1414 static struct event_command trigger_traceoff_cmd = {
1415     .name           = "traceoff",
1416     .trigger_type       = ETT_TRACE_ONOFF,
1417     .flags          = EVENT_CMD_FL_POST_TRIGGER,
1418     .parse          = event_trigger_parse,
1419     .reg            = register_trigger,
1420     .unreg          = unregister_trigger,
1421     .get_trigger_ops    = onoff_get_trigger_ops,
1422     .set_filter     = set_trigger_filter,
1423 };
1424 
1425 #ifdef CONFIG_TRACER_SNAPSHOT
1426 static void
1427 snapshot_trigger(struct event_trigger_data *data,
1428          struct trace_buffer *buffer, void *rec,
1429          struct ring_buffer_event *event)
1430 {
1431     struct trace_event_file *file = data->private_data;
1432 
1433     if (file)
1434         tracing_snapshot_instance(file->tr);
1435     else
1436         tracing_snapshot();
1437 }
1438 
1439 static void
1440 snapshot_count_trigger(struct event_trigger_data *data,
1441                struct trace_buffer *buffer, void *rec,
1442                struct ring_buffer_event *event)
1443 {
1444     if (!data->count)
1445         return;
1446 
1447     if (data->count != -1)
1448         (data->count)--;
1449 
1450     snapshot_trigger(data, buffer, rec, event);
1451 }
1452 
1453 static int
1454 register_snapshot_trigger(char *glob,
1455               struct event_trigger_data *data,
1456               struct trace_event_file *file)
1457 {
1458     if (tracing_alloc_snapshot_instance(file->tr) != 0)
1459         return 0;
1460 
1461     return register_trigger(glob, data, file);
1462 }
1463 
1464 static int
1465 snapshot_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1466 {
1467     return event_trigger_print("snapshot", m, (void *)data->count,
1468                    data->filter_str);
1469 }
1470 
1471 static struct event_trigger_ops snapshot_trigger_ops = {
1472     .trigger        = snapshot_trigger,
1473     .print          = snapshot_trigger_print,
1474     .init           = event_trigger_init,
1475     .free           = event_trigger_free,
1476 };
1477 
1478 static struct event_trigger_ops snapshot_count_trigger_ops = {
1479     .trigger        = snapshot_count_trigger,
1480     .print          = snapshot_trigger_print,
1481     .init           = event_trigger_init,
1482     .free           = event_trigger_free,
1483 };
1484 
1485 static struct event_trigger_ops *
1486 snapshot_get_trigger_ops(char *cmd, char *param)
1487 {
1488     return param ? &snapshot_count_trigger_ops : &snapshot_trigger_ops;
1489 }
1490 
1491 static struct event_command trigger_snapshot_cmd = {
1492     .name           = "snapshot",
1493     .trigger_type       = ETT_SNAPSHOT,
1494     .parse          = event_trigger_parse,
1495     .reg            = register_snapshot_trigger,
1496     .unreg          = unregister_trigger,
1497     .get_trigger_ops    = snapshot_get_trigger_ops,
1498     .set_filter     = set_trigger_filter,
1499 };
1500 
1501 static __init int register_trigger_snapshot_cmd(void)
1502 {
1503     int ret;
1504 
1505     ret = register_event_command(&trigger_snapshot_cmd);
1506     WARN_ON(ret < 0);
1507 
1508     return ret;
1509 }
1510 #else
1511 static __init int register_trigger_snapshot_cmd(void) { return 0; }
1512 #endif /* CONFIG_TRACER_SNAPSHOT */
1513 
1514 #ifdef CONFIG_STACKTRACE
1515 #ifdef CONFIG_UNWINDER_ORC
1516 /* Skip 2:
1517  *   event_triggers_post_call()
1518  *   trace_event_raw_event_xxx()
1519  */
1520 # define STACK_SKIP 2
1521 #else
1522 /*
1523  * Skip 4:
1524  *   stacktrace_trigger()
1525  *   event_triggers_post_call()
1526  *   trace_event_buffer_commit()
1527  *   trace_event_raw_event_xxx()
1528  */
1529 #define STACK_SKIP 4
1530 #endif
1531 
1532 static void
1533 stacktrace_trigger(struct event_trigger_data *data,
1534            struct trace_buffer *buffer,  void *rec,
1535            struct ring_buffer_event *event)
1536 {
1537     struct trace_event_file *file = data->private_data;
1538 
1539     if (file)
1540         __trace_stack(file->tr, tracing_gen_ctx(), STACK_SKIP);
1541     else
1542         trace_dump_stack(STACK_SKIP);
1543 }
1544 
1545 static void
1546 stacktrace_count_trigger(struct event_trigger_data *data,
1547              struct trace_buffer *buffer, void *rec,
1548              struct ring_buffer_event *event)
1549 {
1550     if (!data->count)
1551         return;
1552 
1553     if (data->count != -1)
1554         (data->count)--;
1555 
1556     stacktrace_trigger(data, buffer, rec, event);
1557 }
1558 
1559 static int
1560 stacktrace_trigger_print(struct seq_file *m, struct event_trigger_data *data)
1561 {
1562     return event_trigger_print("stacktrace", m, (void *)data->count,
1563                    data->filter_str);
1564 }
1565 
1566 static struct event_trigger_ops stacktrace_trigger_ops = {
1567     .trigger        = stacktrace_trigger,
1568     .print          = stacktrace_trigger_print,
1569     .init           = event_trigger_init,
1570     .free           = event_trigger_free,
1571 };
1572 
1573 static struct event_trigger_ops stacktrace_count_trigger_ops = {
1574     .trigger        = stacktrace_count_trigger,
1575     .print          = stacktrace_trigger_print,
1576     .init           = event_trigger_init,
1577     .free           = event_trigger_free,
1578 };
1579 
1580 static struct event_trigger_ops *
1581 stacktrace_get_trigger_ops(char *cmd, char *param)
1582 {
1583     return param ? &stacktrace_count_trigger_ops : &stacktrace_trigger_ops;
1584 }
1585 
1586 static struct event_command trigger_stacktrace_cmd = {
1587     .name           = "stacktrace",
1588     .trigger_type       = ETT_STACKTRACE,
1589     .flags          = EVENT_CMD_FL_POST_TRIGGER,
1590     .parse          = event_trigger_parse,
1591     .reg            = register_trigger,
1592     .unreg          = unregister_trigger,
1593     .get_trigger_ops    = stacktrace_get_trigger_ops,
1594     .set_filter     = set_trigger_filter,
1595 };
1596 
1597 static __init int register_trigger_stacktrace_cmd(void)
1598 {
1599     int ret;
1600 
1601     ret = register_event_command(&trigger_stacktrace_cmd);
1602     WARN_ON(ret < 0);
1603 
1604     return ret;
1605 }
1606 #else
1607 static __init int register_trigger_stacktrace_cmd(void) { return 0; }
1608 #endif /* CONFIG_STACKTRACE */
1609 
1610 static __init void unregister_trigger_traceon_traceoff_cmds(void)
1611 {
1612     unregister_event_command(&trigger_traceon_cmd);
1613     unregister_event_command(&trigger_traceoff_cmd);
1614 }
1615 
1616 static void
1617 event_enable_trigger(struct event_trigger_data *data,
1618              struct trace_buffer *buffer,  void *rec,
1619              struct ring_buffer_event *event)
1620 {
1621     struct enable_trigger_data *enable_data = data->private_data;
1622 
1623     if (enable_data->enable)
1624         clear_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &enable_data->file->flags);
1625     else
1626         set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &enable_data->file->flags);
1627 }
1628 
1629 static void
1630 event_enable_count_trigger(struct event_trigger_data *data,
1631                struct trace_buffer *buffer,  void *rec,
1632                struct ring_buffer_event *event)
1633 {
1634     struct enable_trigger_data *enable_data = data->private_data;
1635 
1636     if (!data->count)
1637         return;
1638 
1639     /* Skip if the event is in a state we want to switch to */
1640     if (enable_data->enable == !(enable_data->file->flags & EVENT_FILE_FL_SOFT_DISABLED))
1641         return;
1642 
1643     if (data->count != -1)
1644         (data->count)--;
1645 
1646     event_enable_trigger(data, buffer, rec, event);
1647 }
1648 
1649 int event_enable_trigger_print(struct seq_file *m,
1650                    struct event_trigger_data *data)
1651 {
1652     struct enable_trigger_data *enable_data = data->private_data;
1653 
1654     seq_printf(m, "%s:%s:%s",
1655            enable_data->hist ?
1656            (enable_data->enable ? ENABLE_HIST_STR : DISABLE_HIST_STR) :
1657            (enable_data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR),
1658            enable_data->file->event_call->class->system,
1659            trace_event_name(enable_data->file->event_call));
1660 
1661     if (data->count == -1)
1662         seq_puts(m, ":unlimited");
1663     else
1664         seq_printf(m, ":count=%ld", data->count);
1665 
1666     if (data->filter_str)
1667         seq_printf(m, " if %s\n", data->filter_str);
1668     else
1669         seq_putc(m, '\n');
1670 
1671     return 0;
1672 }
1673 
1674 void event_enable_trigger_free(struct event_trigger_data *data)
1675 {
1676     struct enable_trigger_data *enable_data = data->private_data;
1677 
1678     if (WARN_ON_ONCE(data->ref <= 0))
1679         return;
1680 
1681     data->ref--;
1682     if (!data->ref) {
1683         /* Remove the SOFT_MODE flag */
1684         trace_event_enable_disable(enable_data->file, 0, 1);
1685         trace_event_put_ref(enable_data->file->event_call);
1686         trigger_data_free(data);
1687         kfree(enable_data);
1688     }
1689 }
1690 
1691 static struct event_trigger_ops event_enable_trigger_ops = {
1692     .trigger        = event_enable_trigger,
1693     .print          = event_enable_trigger_print,
1694     .init           = event_trigger_init,
1695     .free           = event_enable_trigger_free,
1696 };
1697 
1698 static struct event_trigger_ops event_enable_count_trigger_ops = {
1699     .trigger        = event_enable_count_trigger,
1700     .print          = event_enable_trigger_print,
1701     .init           = event_trigger_init,
1702     .free           = event_enable_trigger_free,
1703 };
1704 
1705 static struct event_trigger_ops event_disable_trigger_ops = {
1706     .trigger        = event_enable_trigger,
1707     .print          = event_enable_trigger_print,
1708     .init           = event_trigger_init,
1709     .free           = event_enable_trigger_free,
1710 };
1711 
1712 static struct event_trigger_ops event_disable_count_trigger_ops = {
1713     .trigger        = event_enable_count_trigger,
1714     .print          = event_enable_trigger_print,
1715     .init           = event_trigger_init,
1716     .free           = event_enable_trigger_free,
1717 };
1718 
1719 int event_enable_trigger_parse(struct event_command *cmd_ops,
1720                    struct trace_event_file *file,
1721                    char *glob, char *cmd, char *param_and_filter)
1722 {
1723     struct trace_event_file *event_enable_file;
1724     struct enable_trigger_data *enable_data;
1725     struct event_trigger_data *trigger_data;
1726     struct trace_array *tr = file->tr;
1727     char *param, *filter;
1728     bool enable, remove;
1729     const char *system;
1730     const char *event;
1731     bool hist = false;
1732     int ret;
1733 
1734     remove = event_trigger_check_remove(glob);
1735 
1736     if (event_trigger_empty_param(param_and_filter))
1737         return -EINVAL;
1738 
1739     ret = event_trigger_separate_filter(param_and_filter, &param, &filter, true);
1740     if (ret)
1741         return ret;
1742 
1743     system = strsep(&param, ":");
1744     if (!param)
1745         return -EINVAL;
1746 
1747     event = strsep(&param, ":");
1748 
1749     ret = -EINVAL;
1750     event_enable_file = find_event_file(tr, system, event);
1751     if (!event_enable_file)
1752         goto out;
1753 
1754 #ifdef CONFIG_HIST_TRIGGERS
1755     hist = ((strcmp(cmd, ENABLE_HIST_STR) == 0) ||
1756         (strcmp(cmd, DISABLE_HIST_STR) == 0));
1757 
1758     enable = ((strcmp(cmd, ENABLE_EVENT_STR) == 0) ||
1759           (strcmp(cmd, ENABLE_HIST_STR) == 0));
1760 #else
1761     enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
1762 #endif
1763     ret = -ENOMEM;
1764 
1765     enable_data = kzalloc(sizeof(*enable_data), GFP_KERNEL);
1766     if (!enable_data)
1767         goto out;
1768 
1769     enable_data->hist = hist;
1770     enable_data->enable = enable;
1771     enable_data->file = event_enable_file;
1772 
1773     trigger_data = event_trigger_alloc(cmd_ops, cmd, param, enable_data);
1774     if (!trigger_data) {
1775         kfree(enable_data);
1776         goto out;
1777     }
1778 
1779     if (remove) {
1780         event_trigger_unregister(cmd_ops, file, glob+1, trigger_data);
1781         kfree(trigger_data);
1782         kfree(enable_data);
1783         ret = 0;
1784         goto out;
1785     }
1786 
1787     /* Up the trigger_data count to make sure nothing frees it on failure */
1788     event_trigger_init(trigger_data);
1789 
1790     ret = event_trigger_parse_num(param, trigger_data);
1791     if (ret)
1792         goto out_free;
1793 
1794     ret = event_trigger_set_filter(cmd_ops, file, filter, trigger_data);
1795     if (ret < 0)
1796         goto out_free;
1797 
1798     /* Don't let event modules unload while probe registered */
1799     ret = trace_event_try_get_ref(event_enable_file->event_call);
1800     if (!ret) {
1801         ret = -EBUSY;
1802         goto out_free;
1803     }
1804 
1805     ret = trace_event_enable_disable(event_enable_file, 1, 1);
1806     if (ret < 0)
1807         goto out_put;
1808 
1809     ret = event_trigger_register(cmd_ops, file, glob, trigger_data);
1810     if (ret)
1811         goto out_disable;
1812 
1813     event_trigger_free(trigger_data);
1814  out:
1815     return ret;
1816  out_disable:
1817     trace_event_enable_disable(event_enable_file, 0, 1);
1818  out_put:
1819     trace_event_put_ref(event_enable_file->event_call);
1820  out_free:
1821     event_trigger_reset_filter(cmd_ops, trigger_data);
1822     event_trigger_free(trigger_data);
1823     kfree(enable_data);
1824 
1825     goto out;
1826 }
1827 
1828 int event_enable_register_trigger(char *glob,
1829                   struct event_trigger_data *data,
1830                   struct trace_event_file *file)
1831 {
1832     struct enable_trigger_data *enable_data = data->private_data;
1833     struct enable_trigger_data *test_enable_data;
1834     struct event_trigger_data *test;
1835     int ret = 0;
1836 
1837     lockdep_assert_held(&event_mutex);
1838 
1839     list_for_each_entry(test, &file->triggers, list) {
1840         test_enable_data = test->private_data;
1841         if (test_enable_data &&
1842             (test->cmd_ops->trigger_type ==
1843              data->cmd_ops->trigger_type) &&
1844             (test_enable_data->file == enable_data->file)) {
1845             ret = -EEXIST;
1846             goto out;
1847         }
1848     }
1849 
1850     if (data->ops->init) {
1851         ret = data->ops->init(data);
1852         if (ret < 0)
1853             goto out;
1854     }
1855 
1856     list_add_rcu(&data->list, &file->triggers);
1857 
1858     update_cond_flag(file);
1859     ret = trace_event_trigger_enable_disable(file, 1);
1860     if (ret < 0) {
1861         list_del_rcu(&data->list);
1862         update_cond_flag(file);
1863     }
1864 out:
1865     return ret;
1866 }
1867 
1868 void event_enable_unregister_trigger(char *glob,
1869                      struct event_trigger_data *test,
1870                      struct trace_event_file *file)
1871 {
1872     struct enable_trigger_data *test_enable_data = test->private_data;
1873     struct event_trigger_data *data = NULL, *iter;
1874     struct enable_trigger_data *enable_data;
1875 
1876     lockdep_assert_held(&event_mutex);
1877 
1878     list_for_each_entry(iter, &file->triggers, list) {
1879         enable_data = iter->private_data;
1880         if (enable_data &&
1881             (iter->cmd_ops->trigger_type ==
1882              test->cmd_ops->trigger_type) &&
1883             (enable_data->file == test_enable_data->file)) {
1884             data = iter;
1885             list_del_rcu(&data->list);
1886             trace_event_trigger_enable_disable(file, 0);
1887             update_cond_flag(file);
1888             break;
1889         }
1890     }
1891 
1892     if (data && data->ops->free)
1893         data->ops->free(data);
1894 }
1895 
1896 static struct event_trigger_ops *
1897 event_enable_get_trigger_ops(char *cmd, char *param)
1898 {
1899     struct event_trigger_ops *ops;
1900     bool enable;
1901 
1902 #ifdef CONFIG_HIST_TRIGGERS
1903     enable = ((strcmp(cmd, ENABLE_EVENT_STR) == 0) ||
1904           (strcmp(cmd, ENABLE_HIST_STR) == 0));
1905 #else
1906     enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
1907 #endif
1908     if (enable)
1909         ops = param ? &event_enable_count_trigger_ops :
1910             &event_enable_trigger_ops;
1911     else
1912         ops = param ? &event_disable_count_trigger_ops :
1913             &event_disable_trigger_ops;
1914 
1915     return ops;
1916 }
1917 
1918 static struct event_command trigger_enable_cmd = {
1919     .name           = ENABLE_EVENT_STR,
1920     .trigger_type       = ETT_EVENT_ENABLE,
1921     .parse          = event_enable_trigger_parse,
1922     .reg            = event_enable_register_trigger,
1923     .unreg          = event_enable_unregister_trigger,
1924     .get_trigger_ops    = event_enable_get_trigger_ops,
1925     .set_filter     = set_trigger_filter,
1926 };
1927 
1928 static struct event_command trigger_disable_cmd = {
1929     .name           = DISABLE_EVENT_STR,
1930     .trigger_type       = ETT_EVENT_ENABLE,
1931     .parse          = event_enable_trigger_parse,
1932     .reg            = event_enable_register_trigger,
1933     .unreg          = event_enable_unregister_trigger,
1934     .get_trigger_ops    = event_enable_get_trigger_ops,
1935     .set_filter     = set_trigger_filter,
1936 };
1937 
1938 static __init void unregister_trigger_enable_disable_cmds(void)
1939 {
1940     unregister_event_command(&trigger_enable_cmd);
1941     unregister_event_command(&trigger_disable_cmd);
1942 }
1943 
1944 static __init int register_trigger_enable_disable_cmds(void)
1945 {
1946     int ret;
1947 
1948     ret = register_event_command(&trigger_enable_cmd);
1949     if (WARN_ON(ret < 0))
1950         return ret;
1951     ret = register_event_command(&trigger_disable_cmd);
1952     if (WARN_ON(ret < 0))
1953         unregister_trigger_enable_disable_cmds();
1954 
1955     return ret;
1956 }
1957 
1958 static __init int register_trigger_traceon_traceoff_cmds(void)
1959 {
1960     int ret;
1961 
1962     ret = register_event_command(&trigger_traceon_cmd);
1963     if (WARN_ON(ret < 0))
1964         return ret;
1965     ret = register_event_command(&trigger_traceoff_cmd);
1966     if (WARN_ON(ret < 0))
1967         unregister_trigger_traceon_traceoff_cmds();
1968 
1969     return ret;
1970 }
1971 
1972 __init int register_trigger_cmds(void)
1973 {
1974     register_trigger_traceon_traceoff_cmds();
1975     register_trigger_snapshot_cmd();
1976     register_trigger_stacktrace_cmd();
1977     register_trigger_enable_disable_cmds();
1978     register_trigger_hist_enable_disable_cmds();
1979     register_trigger_hist_cmd();
1980 
1981     return 0;
1982 }