All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Christoph Hellwig <hch@infradead.org>,
	Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
	Gregory Haskins <ghaskins@novell.com>,
	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	"William L. Irwin" <sparclinux@vger.kernel.org>,
	Steven Rostedt <srostedt@redhat.com>
Subject: [RFC PATCH 08/11] tracer add debugfs interface
Date: Thu, 03 Jan 2008 07:16:17 +0000	[thread overview]
Message-ID: <20080103072227.894547203@goodmis.org> (raw)
In-Reply-To: 20080103071609.478486470@goodmis.org

This patch adds an interface into debugfs.

  /debugfs/mctracer/ctrl

echoing 1 into the ctrl file turns on the tracer,
and echoing 0 turns it off.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
 lib/mcount/tracer.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 lib/mcount/tracer.h |    1 
 2 files changed, 87 insertions(+), 1 deletion(-)

Index: linux-compile.git/lib/mcount/tracer.c
=================================--- linux-compile.git.orig/lib/mcount/tracer.c	2008-01-02 23:07:23.000000000 -0500
+++ linux-compile.git/lib/mcount/tracer.c	2008-01-02 23:12:50.000000000 -0500
@@ -15,6 +15,8 @@
 #include <linux/init.h>
 #include <linux/linkage.h>
 #include <linux/seq_file.h>
+#include <linux/debugfs.h>
+#include <linux/uaccess.h>
 #include <linux/mcount.h>
 
 #include "tracer.h"
@@ -71,6 +73,89 @@ static inline notrace void trace_functio
 	raw_local_irq_restore(flags);
 }
 
+#ifdef CONFIG_DEBUG_FS
+static int mctracer_open_generic(struct inode *inode, struct file *filp)
+{
+	filp->private_data = inode->i_private;
+	return 0;
+}
+
+
+static ssize_t mctracer_ctrl_read(struct file *filp, char __user *ubuf,
+				  size_t cnt, loff_t *ppos)
+{
+	struct mctracer_trace *tr = filp->private_data;
+	char buf[16];
+	int r;
+
+	r = sprintf(buf, "%ld\n", tr->ctrl);
+	return simple_read_from_buffer(ubuf, cnt, ppos,
+				       buf, r);
+}
+
+static ssize_t mctracer_ctrl_write(struct file *filp,
+				   const char __user *ubuf,
+				   size_t cnt, loff_t *ppos)
+{
+	struct mctracer_trace *tr = filp->private_data;
+	int val;
+	char buf[16];
+
+	if (cnt > 15)
+		cnt = 15;
+
+	if (copy_from_user(&buf, ubuf, cnt))
+		return -EFAULT;
+
+	buf[cnt] = 0;
+
+	val = !!simple_strtoul(buf, NULL, 10);
+
+	if (tr->ctrl ^ val) {
+		if (val)
+			register_mcount_function(trace_function);
+		else
+			clear_mcount_function();
+		tr->ctrl = val;
+	}
+
+	filp->f_pos += cnt;
+
+	return cnt;
+}
+
+static struct file_operations mctracer_ctrl_fops = {
+	.open = mctracer_open_generic,
+	.read = mctracer_ctrl_read,
+	.write = mctracer_ctrl_write,
+};
+
+static void mctrace_init_debugfs(void)
+{
+	struct dentry *d_mctracer;
+	struct dentry *entry;
+
+	d_mctracer = debugfs_create_dir("mctracer", NULL);
+	if (!d_mctracer) {
+		pr_warning("Could not create debugfs directory mctracer\n");
+		return;
+	}
+
+	entry = debugfs_create_file("ctrl", 0644, d_mctracer,
+				    &mctracer_trace, &mctracer_ctrl_fops);
+	if (!entry)
+		pr_warning("Could not create debugfs 'ctrl' entry\n");
+}
+#else /* CONFIG_DEBUG_FS */
+static void mctrace_init_debugfs(void)
+{
+	/*
+	 * No way to turn on or off the trace function
+	 * without debugfs, so we just turn it on.
+	 */
+	register_mcount_function(trace_function);
+}
+#endif /* CONFIG_DEBUG_FS */
 
 static inline notrace int page_order(const unsigned long size)
 {
@@ -107,7 +192,7 @@ static inline notrace int mctracer_alloc
 		size, MCTRACER_NR_ENTRIES, MCTRACER_ENTRY_SIZE);
 	pr_info("   actual entries %ld\n", mctracer_trace.entries);
 
-	register_mcount_function(trace_function);
+	mctrace_init_debugfs();
 
 	return 0;
 
Index: linux-compile.git/lib/mcount/tracer.h
=================================--- linux-compile.git.orig/lib/mcount/tracer.h	2008-01-02 23:04:34.000000000 -0500
+++ linux-compile.git/lib/mcount/tracer.h	2008-01-02 23:11:39.000000000 -0500
@@ -13,6 +13,7 @@ struct mctracer_trace {
 	void	      *trace[NR_CPUS];
 	unsigned long trace_idx[NR_CPUS];
 	unsigned long entries;
+	long	      ctrl;
 	atomic_t      cnt;
 	atomic_t      disabled[NR_CPUS];
 	atomic_t      underrun[NR_CPUS];

-- 

WARNING: multiple messages have this Message-ID (diff)
From: Steven Rostedt <rostedt@goodmis.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Christoph Hellwig <hch@infradead.org>,
	Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
	Gregory Haskins <ghaskins@novell.com>,
	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	"William L. Irwin" <sparclinux@vger.kernel.org>,
	Steven Rostedt <srostedt@redhat.com>
Subject: [RFC PATCH 08/11] tracer add debugfs interface
Date: Thu, 03 Jan 2008 02:16:17 -0500	[thread overview]
Message-ID: <20080103072227.894547203@goodmis.org> (raw)
In-Reply-To: 20080103071609.478486470@goodmis.org

[-- Attachment #1: mcount-tracer-debugfs.patch --]
[-- Type: text/plain, Size: 3643 bytes --]

This patch adds an interface into debugfs.

  /debugfs/mctracer/ctrl

echoing 1 into the ctrl file turns on the tracer,
and echoing 0 turns it off.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
 lib/mcount/tracer.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 lib/mcount/tracer.h |    1 
 2 files changed, 87 insertions(+), 1 deletion(-)

Index: linux-compile.git/lib/mcount/tracer.c
===================================================================
--- linux-compile.git.orig/lib/mcount/tracer.c	2008-01-02 23:07:23.000000000 -0500
+++ linux-compile.git/lib/mcount/tracer.c	2008-01-02 23:12:50.000000000 -0500
@@ -15,6 +15,8 @@
 #include <linux/init.h>
 #include <linux/linkage.h>
 #include <linux/seq_file.h>
+#include <linux/debugfs.h>
+#include <linux/uaccess.h>
 #include <linux/mcount.h>
 
 #include "tracer.h"
@@ -71,6 +73,89 @@ static inline notrace void trace_functio
 	raw_local_irq_restore(flags);
 }
 
+#ifdef CONFIG_DEBUG_FS
+static int mctracer_open_generic(struct inode *inode, struct file *filp)
+{
+	filp->private_data = inode->i_private;
+	return 0;
+}
+
+
+static ssize_t mctracer_ctrl_read(struct file *filp, char __user *ubuf,
+				  size_t cnt, loff_t *ppos)
+{
+	struct mctracer_trace *tr = filp->private_data;
+	char buf[16];
+	int r;
+
+	r = sprintf(buf, "%ld\n", tr->ctrl);
+	return simple_read_from_buffer(ubuf, cnt, ppos,
+				       buf, r);
+}
+
+static ssize_t mctracer_ctrl_write(struct file *filp,
+				   const char __user *ubuf,
+				   size_t cnt, loff_t *ppos)
+{
+	struct mctracer_trace *tr = filp->private_data;
+	int val;
+	char buf[16];
+
+	if (cnt > 15)
+		cnt = 15;
+
+	if (copy_from_user(&buf, ubuf, cnt))
+		return -EFAULT;
+
+	buf[cnt] = 0;
+
+	val = !!simple_strtoul(buf, NULL, 10);
+
+	if (tr->ctrl ^ val) {
+		if (val)
+			register_mcount_function(trace_function);
+		else
+			clear_mcount_function();
+		tr->ctrl = val;
+	}
+
+	filp->f_pos += cnt;
+
+	return cnt;
+}
+
+static struct file_operations mctracer_ctrl_fops = {
+	.open = mctracer_open_generic,
+	.read = mctracer_ctrl_read,
+	.write = mctracer_ctrl_write,
+};
+
+static void mctrace_init_debugfs(void)
+{
+	struct dentry *d_mctracer;
+	struct dentry *entry;
+
+	d_mctracer = debugfs_create_dir("mctracer", NULL);
+	if (!d_mctracer) {
+		pr_warning("Could not create debugfs directory mctracer\n");
+		return;
+	}
+
+	entry = debugfs_create_file("ctrl", 0644, d_mctracer,
+				    &mctracer_trace, &mctracer_ctrl_fops);
+	if (!entry)
+		pr_warning("Could not create debugfs 'ctrl' entry\n");
+}
+#else /* CONFIG_DEBUG_FS */
+static void mctrace_init_debugfs(void)
+{
+	/*
+	 * No way to turn on or off the trace function
+	 * without debugfs, so we just turn it on.
+	 */
+	register_mcount_function(trace_function);
+}
+#endif /* CONFIG_DEBUG_FS */
 
 static inline notrace int page_order(const unsigned long size)
 {
@@ -107,7 +192,7 @@ static inline notrace int mctracer_alloc
 		size, MCTRACER_NR_ENTRIES, MCTRACER_ENTRY_SIZE);
 	pr_info("   actual entries %ld\n", mctracer_trace.entries);
 
-	register_mcount_function(trace_function);
+	mctrace_init_debugfs();
 
 	return 0;
 
Index: linux-compile.git/lib/mcount/tracer.h
===================================================================
--- linux-compile.git.orig/lib/mcount/tracer.h	2008-01-02 23:04:34.000000000 -0500
+++ linux-compile.git/lib/mcount/tracer.h	2008-01-02 23:11:39.000000000 -0500
@@ -13,6 +13,7 @@ struct mctracer_trace {
 	void	      *trace[NR_CPUS];
 	unsigned long trace_idx[NR_CPUS];
 	unsigned long entries;
+	long	      ctrl;
 	atomic_t      cnt;
 	atomic_t      disabled[NR_CPUS];
 	atomic_t      underrun[NR_CPUS];

-- 

  parent reply	other threads:[~2008-01-03  7:16 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-03  7:16 [RFC PATCH 00/11] mcount tracing utility Steven Rostedt
2008-01-03  7:16 ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03  8:31   ` Sam Ravnborg
2008-01-03  8:31     ` Sam Ravnborg
2008-01-03 14:03     ` Steven Rostedt
2008-01-03 14:03       ` Steven Rostedt
2008-01-03  9:21   ` [RFC PATCH 01/11] Add basic support for gcc profiler Ingo Molnar
2008-01-03  9:21     ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Ingo Molnar
2008-01-03 13:58     ` Steven Rostedt
2008-01-03 13:58       ` Steven Rostedt
2008-01-03 18:16       ` [RFC PATCH 01/11] Add basic support for gcc profiler Chris Wright
2008-01-03 18:16         ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Chris Wright
2008-01-03 18:16         ` Chris Wright
2008-01-03 19:15         ` Steven Rostedt
2008-01-03 19:15           ` Steven Rostedt
2008-01-03 19:17           ` [RFC PATCH 01/11] Add basic support for gcc profiler Chris Wright
2008-01-03 19:17             ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Chris Wright
2008-01-03 19:17           ` Chris Wright
2008-01-03 19:15         ` Steven Rostedt
2008-01-03 19:18         ` Jeremy Fitzhardinge
2008-01-03 19:18         ` Jeremy Fitzhardinge
2008-01-03 19:18           ` Jeremy Fitzhardinge
2008-01-03 13:58     ` Steven Rostedt
2008-01-03 16:01   ` [RFC PATCH 01/11] Add basic support for gcc profiler Daniel Walker
2008-01-03 16:01     ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Daniel Walker
2008-01-03 17:35   ` [RFC PATCH 01/11] Add basic support for gcc profiler Mathieu Desnoyers
2008-01-03 17:35     ` [RFC PATCH 01/11] Add basic support for gcc profiler instrumentation Mathieu Desnoyers
2008-01-03 17:55     ` Steven Rostedt
2008-01-03 17:55       ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 02/11] Add fastcall to do_IRQ for i386 Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03 17:36   ` Mathieu Desnoyers
2008-01-03 17:36     ` Mathieu Desnoyers
2008-01-03 17:47     ` Steven Rostedt
2008-01-03 17:47       ` Steven Rostedt
2008-01-07  4:50       ` H. Peter Anvin
2008-01-07  4:50         ` H. Peter Anvin
2008-01-07 12:42         ` Steven Rostedt
2008-01-07 12:42           ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 03/11] Annotate core code that should not be traced Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03 17:42   ` Mathieu Desnoyers
2008-01-03 17:42     ` Mathieu Desnoyers
2008-01-03 18:07     ` Steven Rostedt
2008-01-03 18:07       ` Steven Rostedt
2008-01-03 18:34       ` Mathieu Desnoyers
2008-01-03 18:34         ` Mathieu Desnoyers
2008-01-03  7:16 ` [RFC PATCH 04/11] i386: notrace annotations Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03 17:52   ` Mathieu Desnoyers
2008-01-03 17:52     ` Mathieu Desnoyers
2008-01-03  7:16 ` [RFC PATCH 05/11] x86_64: " Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 06/11] add notrace annotations to vsyscall Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 07/11] mcount based trace in the form of a header file library Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03  7:16 ` Steven Rostedt [this message]
2008-01-03  7:16   ` [RFC PATCH 08/11] tracer add debugfs interface Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 09/11] mcount tracer output file Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03  7:16 ` [RFC PATCH 10/11] mcount tracer show task comm and pid Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03 17:56   ` Mathieu Desnoyers
2008-01-03 17:56     ` Mathieu Desnoyers
2008-01-06 15:37     ` Ingo Molnar
2008-01-06 15:37       ` Ingo Molnar
2008-01-07  4:45       ` Mathieu Desnoyers
2008-01-07  4:45         ` Mathieu Desnoyers
2008-01-09 16:45         ` Ingo Molnar
2008-01-09 16:45           ` Ingo Molnar
2008-01-03  7:16 ` [RFC PATCH 11/11] Add a symbol only trace output Steven Rostedt
2008-01-03  7:16   ` Steven Rostedt
2008-01-03 17:22 ` [RFC PATCH 00/11] mcount tracing utility Mathieu Desnoyers
2008-01-03 17:22   ` Mathieu Desnoyers
2008-01-03 17:42   ` Steven Rostedt
2008-01-03 17:42     ` Steven Rostedt
2008-01-03 18:05 ` Andi Kleen
2008-01-03 18:05   ` Andi Kleen
2008-01-04  6:42 ` Frank Ch. Eigler
2008-01-04  6:42   ` Frank Ch. Eigler
2008-01-08 20:35 ` Tim Bird
2008-01-08 20:35   ` Tim Bird

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080103072227.894547203@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@ghostprotocols.net \
    --cc=akpm@linux-foundation.org \
    --cc=ghaskins@novell.com \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=sparclinux@vger.kernel.org \
    --cc=srostedt@redhat.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.