lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 21 Sep 2008 20:16:30 +0200
From:	Frédéric Weisbecker <fweisbec@...il.com>
To:	Ingo Molnar <mingo@...e.hu>
CC:	Linux Kernel <linux-kernel@...r.kernel.org>,
	Steven Rostedt <rostedt@...dmis.org>,
	Steven Noonan <steven@...inklabs.net>
Subject: [Patch 3/3] Tracing/ftrace: Replace none tracer by nop tracer

Replace "none" tracer by the recently created "nop" tracer. Both are pretty similar except that nop accepts TRACE_PRINT or TRACE_SPECIAL entries.
And as a consequence, changing the size of the ring buffer now requires that tracing has already been disabled.

Signed-off-by: Frederic Weisbecker <fweisbec@...il.com>
---
diff -rup linux-2.6-tip (2)/kernel/trace/trace.c linux-2.6-tip/kernel/trace/trace.c
--- linux-2.6-tip (2)/kernel/trace/trace.c	2008-09-18 18:40:00.000000000 +0200
+++ linux-2.6-tip/kernel/trace/trace.c	2008-09-20 17:13:08.000000000 +0200
@@ -142,24 +142,6 @@ static DECLARE_WAIT_QUEUE_HEAD(trace_wai
 /* trace_flags holds iter_ctrl options */

 unsigned long trace_flags = TRACE_ITER_PRINT_PARENT;

 

-static notrace void no_trace_init(struct trace_array *tr)

-{

-	int cpu;

-

-	ftrace_function_enabled = 0;

-	if(tr->ctrl)

-		for_each_online_cpu(cpu)

-			tracing_reset(tr->data[cpu]);

-	tracer_enabled = 0;

-}

-

-/* dummy trace to disable tracing */

-static struct tracer no_tracer __read_mostly = {

-	.name		= "none",

-	.init		= no_trace_init

-};

-

-

 /**

  * trace_wake_up - wake up tasks waiting for trace input

  *

@@ -962,7 +944,7 @@ ftrace_special(unsigned long arg1, unsig
 	long disabled;

 	int cpu;

 

-	if (tracing_disabled || current_trace == &no_tracer || !tr->ctrl)

+	if (tracing_disabled || !tr->ctrl)

 		return;

 

 	local_irq_save(flags);

@@ -2794,7 +2776,8 @@ tracing_entries_write(struct file *filp,
 {

 	unsigned long val;

 	char buf[64];

-	int i, ret;

+	int i, ret;
+	struct trace_array *tr = filp->private_data;

 

 	if (cnt >= sizeof(buf))

 		return -EINVAL;

@@ -2814,9 +2797,9 @@ tracing_entries_write(struct file *filp,
 

 	mutex_lock(&trace_types_lock);

 

-	if (current_trace != &no_tracer) {

+	if (tr->ctrl) {

 		cnt = -EBUSY;

-		pr_info("ftrace: set current_tracer to none"

+		pr_info("ftrace: please disable tracing"

 			" before modifying buffer size\n");

 		goto out;

 	}

@@ -2879,20 +2862,6 @@ tracing_entries_write(struct file *filp,
 	return cnt;

 }

 

-static int tracing_open_mark(struct inode *inode, struct file *filp)

-{

-	int ret;

-

-	ret = tracing_open_generic(inode, filp);

-	if (ret)

-		return ret;

-

-	if (current_trace == &no_tracer)

-		return -ENODEV;

-

-	return 0;

-}

-

 static int mark_printk(const char *fmt, ...)

 {

 	int ret;

@@ -2911,7 +2880,7 @@ tracing_mark_write(struct file *filp, co
 	char *end;

 	struct trace_array *tr = &global_trace;

 

-	if (current_trace == &no_tracer || !tr->ctrl || tracing_disabled)

+	if (!tr->ctrl || tracing_disabled)

 		return -EINVAL;

 

 	if (cnt > TRACE_BUF_SIZE)

@@ -2971,7 +2940,7 @@ static struct file_operations tracing_en
 };

 

 static struct file_operations tracing_mark_fops = {

-	.open		= tracing_open_mark,

+	.open		= tracing_open_generic,

 	.write		= tracing_mark_write,

 };

 

@@ -3123,7 +3092,7 @@ int trace_vprintk(unsigned long ip, cons
 	long disabled;

 	int cpu, len = 0, write, written = 0;

 

-	if (current_trace == &no_tracer || !tr->ctrl || tracing_disabled)

+	if (!tr->ctrl || tracing_disabled)

 		return 0;

 

 	local_irq_save(flags);

@@ -3539,8 +3508,8 @@ __init static int tracer_alloc_buffers(v
 

 	trace_init_cmdlines();

 

-	register_tracer(&no_tracer);

-	current_trace = &no_tracer;

+	register_tracer(&nop_trace);

+	current_trace = &nop_trace;

 

 	/* All seems OK, enable tracing */

 	global_trace.ctrl = tracer_enabled;

diff -rup linux-2.6-tip (2)/kernel/trace/trace.h linux-2.6-tip/kernel/trace/trace.h
--- linux-2.6-tip (2)/kernel/trace/trace.h	2008-09-19 18:01:26.000000000 +0200
+++ linux-2.6-tip/kernel/trace/trace.h	2008-09-20 17:23:36.000000000 +0200
@@ -384,5 +384,7 @@ enum trace_iterator_flags {

 	TRACE_ITER_SCHED_TREE		= 0x200,

 	TRACE_ITER_PRINTK		= 0x400,

 };

+
+extern struct tracer nop_trace;
 

 #endif /* _LINUX_KERNEL_TRACE_H */

diff -rup linux-2.6-tip (2)/kernel/trace/trace_nop.c linux-2.6-tip/kernel/trace/trace_nop.c
--- linux-2.6-tip (2)/kernel/trace/trace_nop.c	2008-09-19 18:01:26.000000000 +0200
+++ linux-2.6-tip/kernel/trace/trace_nop.c	2008-09-21 00:44:47.000000000 +0200

@@ -47,7 +51,7 @@ static void nop_trace_ctrl_update(struct
 		stop_nop_trace(tr);

 }

 

-static struct tracer nop_trace __read_mostly =

+struct tracer nop_trace __read_mostly =

 {

 	.name		= "nop",

 	.init		= nop_trace_init,

@@ -57,9 +61,4 @@ static struct tracer nop_trace __read_mo
 	.selftest	= trace_selftest_startup_nop,

 #endif

 };

-

-__init static int init_nop_trace(void)

-{

-	return register_tracer(&nop_trace);

-}

-device_initcall(init_nop_trace);

+
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ