aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2009-12-07 22:15:59 -0500
committerFrederic Weisbecker <fweisbec@gmail.com>2009-12-13 12:37:27 -0500
commitfdb372ed4cadbfe9dbba0e932a77d0523682e690 (patch)
treefe58239da27070baac9c0dc3c692f7535cfcfa15 /kernel/trace/trace.c
parent91baf6285be7282cfa487de92f836c50749dffb9 (diff)
tracing: Use seq file for trace_options
Code simplification for reading trace_options. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Steven Rostedt <rostedt@goodmis.org> LKML-reference: <4B1DC4EF.3090106@cn.fujitsu.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c60
1 files changed, 17 insertions, 43 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 88bd9ae2a9ed..a6c41cc63285 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -2316,67 +2316,32 @@ static const struct file_operations tracing_cpumask_fops = {
2316 .write = tracing_cpumask_write, 2316 .write = tracing_cpumask_write,
2317}; 2317};
2318 2318
2319static ssize_t 2319static int tracing_trace_options_show(struct seq_file *m, void *v)
2320tracing_trace_options_read(struct file *filp, char __user *ubuf,
2321 size_t cnt, loff_t *ppos)
2322{ 2320{
2323 struct tracer_opt *trace_opts; 2321 struct tracer_opt *trace_opts;
2324 u32 tracer_flags; 2322 u32 tracer_flags;
2325 int len = 0;
2326 char *buf;
2327 int r = 0;
2328 int i; 2323 int i;
2329 2324
2330
2331 /* calculate max size */
2332 for (i = 0; trace_options[i]; i++) {
2333 len += strlen(trace_options[i]);
2334 len += 3; /* "no" and newline */
2335 }
2336
2337 mutex_lock(&trace_types_lock); 2325 mutex_lock(&trace_types_lock);
2338 tracer_flags = current_trace->flags->val; 2326 tracer_flags = current_trace->flags->val;
2339 trace_opts = current_trace->flags->opts; 2327 trace_opts = current_trace->flags->opts;
2340 2328
2341 /*
2342 * Increase the size with names of options specific
2343 * of the current tracer.
2344 */
2345 for (i = 0; trace_opts[i].name; i++) {
2346 len += strlen(trace_opts[i].name);
2347 len += 3; /* "no" and newline */
2348 }
2349
2350 /* +1 for \0 */
2351 buf = kmalloc(len + 1, GFP_KERNEL);
2352 if (!buf) {
2353 mutex_unlock(&trace_types_lock);
2354 return -ENOMEM;
2355 }
2356
2357 for (i = 0; trace_options[i]; i++) { 2329 for (i = 0; trace_options[i]; i++) {
2358 if (trace_flags & (1 << i)) 2330 if (trace_flags & (1 << i))
2359 r += sprintf(buf + r, "%s\n", trace_options[i]); 2331 seq_printf(m, "%s\n", trace_options[i]);
2360 else 2332 else
2361 r += sprintf(buf + r, "no%s\n", trace_options[i]); 2333 seq_printf(m, "no%s\n", trace_options[i]);
2362 } 2334 }
2363 2335
2364 for (i = 0; trace_opts[i].name; i++) { 2336 for (i = 0; trace_opts[i].name; i++) {
2365 if (tracer_flags & trace_opts[i].bit) 2337 if (tracer_flags & trace_opts[i].bit)
2366 r += sprintf(buf + r, "%s\n", 2338 seq_printf(m, "%s\n", trace_opts[i].name);
2367 trace_opts[i].name);
2368 else 2339 else
2369 r += sprintf(buf + r, "no%s\n", 2340 seq_printf(m, "no%s\n", trace_opts[i].name);
2370 trace_opts[i].name);
2371 } 2341 }
2372 mutex_unlock(&trace_types_lock); 2342 mutex_unlock(&trace_types_lock);
2373 2343
2374 WARN_ON(r >= len + 1); 2344 return 0;
2375
2376 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
2377
2378 kfree(buf);
2379 return r;
2380} 2345}
2381 2346
2382/* Try to assign a tracer specific option */ 2347/* Try to assign a tracer specific option */
@@ -2471,9 +2436,18 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf,
2471 return cnt; 2436 return cnt;
2472} 2437}
2473 2438
2439static int tracing_trace_options_open(struct inode *inode, struct file *file)
2440{
2441 if (tracing_disabled)
2442 return -ENODEV;
2443 return single_open(file, tracing_trace_options_show, NULL);
2444}
2445
2474static const struct file_operations tracing_iter_fops = { 2446static const struct file_operations tracing_iter_fops = {
2475 .open = tracing_open_generic, 2447 .open = tracing_trace_options_open,
2476 .read = tracing_trace_options_read, 2448 .read = seq_read,
2449 .llseek = seq_lseek,
2450 .release = single_release,
2477 .write = tracing_trace_options_write, 2451 .write = tracing_trace_options_write,
2478}; 2452};
2479 2453