aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 48d5eb22ff33..d382fd1aa4a6 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -6948,7 +6948,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
6948 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) 6948 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
6949 goto out; 6949 goto out;
6950 6950
6951 ret = wait_on_pipe(iter, 1); 6951 ret = wait_on_pipe(iter, iter->tr->buffer_percent);
6952 if (ret) 6952 if (ret)
6953 goto out; 6953 goto out;
6954 6954
@@ -7662,6 +7662,53 @@ static const struct file_operations rb_simple_fops = {
7662 .llseek = default_llseek, 7662 .llseek = default_llseek,
7663}; 7663};
7664 7664
7665static ssize_t
7666buffer_percent_read(struct file *filp, char __user *ubuf,
7667 size_t cnt, loff_t *ppos)
7668{
7669 struct trace_array *tr = filp->private_data;
7670 char buf[64];
7671 int r;
7672
7673 r = tr->buffer_percent;
7674 r = sprintf(buf, "%d\n", r);
7675
7676 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
7677}
7678
7679static ssize_t
7680buffer_percent_write(struct file *filp, const char __user *ubuf,
7681 size_t cnt, loff_t *ppos)
7682{
7683 struct trace_array *tr = filp->private_data;
7684 unsigned long val;
7685 int ret;
7686
7687 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7688 if (ret)
7689 return ret;
7690
7691 if (val > 100)
7692 return -EINVAL;
7693
7694 if (!val)
7695 val = 1;
7696
7697 tr->buffer_percent = val;
7698
7699 (*ppos)++;
7700
7701 return cnt;
7702}
7703
7704static const struct file_operations buffer_percent_fops = {
7705 .open = tracing_open_generic_tr,
7706 .read = buffer_percent_read,
7707 .write = buffer_percent_write,
7708 .release = tracing_release_generic_tr,
7709 .llseek = default_llseek,
7710};
7711
7665struct dentry *trace_instance_dir; 7712struct dentry *trace_instance_dir;
7666 7713
7667static void 7714static void
@@ -7970,6 +8017,11 @@ init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
7970 trace_create_file("timestamp_mode", 0444, d_tracer, tr, 8017 trace_create_file("timestamp_mode", 0444, d_tracer, tr,
7971 &trace_time_stamp_mode_fops); 8018 &trace_time_stamp_mode_fops);
7972 8019
8020 tr->buffer_percent = 1;
8021
8022 trace_create_file("buffer_percent", 0444, d_tracer,
8023 tr, &buffer_percent_fops);
8024
7973 create_trace_options_dir(tr); 8025 create_trace_options_dir(tr);
7974 8026
7975#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER) 8027#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)