Add a tracefs file to configure the trace remote polling period. Keep the default value to 100ms.
Signed-off-by: Vincent Donnefort <[email protected]> diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index cf99752e1cd5..f72fc862ae7f 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -1133,6 +1133,40 @@ static int dump_on_panic_show(struct seq_file *s, void *unused) } DEFINE_TRACE_REMOTE_ATTRIBUTE(dump_on_panic); +static ssize_t poll_ms_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) +{ + struct seq_file *seq = filp->private_data; + struct trace_remote *remote = seq->private; + unsigned int val; + int ret; + + ret = kstrtouint_from_user(ubuf, cnt, 10, &val); + if (ret) + return ret; + + if (!val) + return -EINVAL; + + guard(mutex)(&remote->lock); + + if (val < remote->poll_ms && remote->poll_cnt) + mod_delayed_work(system_percpu_wq, &remote->poll_work, msecs_to_jiffies(val)); + + remote->poll_ms = val; + + return cnt; +} + +static int poll_ms_show(struct seq_file *s, void *unused) +{ + struct trace_remote *remote = s->private; + + seq_printf(s, "%u\n", remote->poll_ms); + + return 0; +} +DEFINE_TRACE_REMOTE_ATTRIBUTE(poll_ms); + static int trace_remote_init_tracefs(const char *name, struct trace_remote *remote) { struct dentry *remote_d, *percpu_d, *d; @@ -1165,6 +1199,10 @@ static int trace_remote_init_tracefs(const char *name, struct trace_remote *remo if (!d) goto err; + d = trace_create_file("poll_ms", TRACEFS_MODE_WRITE, remote_d, remote, &poll_ms_fops); + if (!d) + goto err; + d = trace_create_file("buffer_size_kb", TRACEFS_MODE_WRITE, remote_d, remote, &buffer_size_kb_fops); if (!d) -- 2.54.0.1032.g2f8565e1d1-goog
