All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Stultz <john.stultz@linaro.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: "Arve Hjønnevåg" <arve@android.com>,
	"Russell King" <linux@arm.linux.org.uk>,
	"Paul Gortmaker" <paul.gortmaker@windriver.com>,
	"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
	"John Stultz" <john.stultz@linaro.org>
Subject: [PATCH 04/15] ARM: etm: Allow range selection
Date: Wed, 20 Jun 2012 18:47:36 -0400	[thread overview]
Message-ID: <1340232467-6023-5-git-send-email-john.stultz@linaro.org> (raw)
In-Reply-To: <1340232467-6023-1-git-send-email-john.stultz@linaro.org>

From: Arve Hjønnevåg <arve@android.com>

Trace kernel text segment by default as before, allow tracing of other
ranges by writing a range to /sys/devices/etm/trace_range, or to trace
everything by writing 0 0.

CC: Russell King <linux@arm.linux.org.uk>
CC: Paul Gortmaker <paul.gortmaker@windriver.com>
CC: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Arve Hjønnevåg <arve@android.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 arch/arm/kernel/etm.c |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 46 insertions(+), 3 deletions(-)

diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c
index a51bccc..bf34d34 100644
--- a/arch/arm/kernel/etm.c
+++ b/arch/arm/kernel/etm.c
@@ -41,12 +41,17 @@ struct tracectx {
 	unsigned long	flags;
 	int		ncmppairs;
 	int		etm_portsz;
+	unsigned long	range_start;
+	unsigned long	range_end;
 	struct device	*dev;
 	struct clk	*emu_clk;
 	struct mutex	mutex;
 };
 
-static struct tracectx tracer;
+static struct tracectx tracer = {
+	.range_start = (unsigned long)_stext,
+	.range_end = (unsigned long)_etext,
+};
 
 static inline bool trace_isrunning(struct tracectx *t)
 {
@@ -116,8 +121,12 @@ static int trace_start(struct tracectx *t)
 		return -EFAULT;
 	}
 
-	etm_setup_address_range(t, 1, (unsigned long)_stext,
-			(unsigned long)_etext, 0, 0);
+	if (t->range_start || t->range_end)
+		etm_setup_address_range(t, 1,
+					t->range_start, t->range_end, 0, 0);
+	else
+		etm_writel(t, ETMTE_INCLEXCL, ETMR_TRACEENCTRL);
+
 	etm_writel(t, 0, ETMR_TRACEENCTRL2);
 	etm_writel(t, 0, ETMR_TRACESSCTRL);
 	etm_writel(t, 0x6f, ETMR_TRACEENEVT);
@@ -526,6 +535,35 @@ static ssize_t trace_mode_store(struct kobject *kobj,
 static struct kobj_attribute trace_mode_attr =
 	__ATTR(trace_mode, 0644, trace_mode_show, trace_mode_store);
 
+static ssize_t trace_range_show(struct kobject *kobj,
+				  struct kobj_attribute *attr,
+				  char *buf)
+{
+	return sprintf(buf, "%08lx %08lx\n",
+			tracer.range_start, tracer.range_end);
+}
+
+static ssize_t trace_range_store(struct kobject *kobj,
+				   struct kobj_attribute *attr,
+				   const char *buf, size_t n)
+{
+	unsigned long range_start, range_end;
+
+	if (sscanf(buf, "%lx %lx", &range_start, &range_end) != 2)
+		return -EINVAL;
+
+	mutex_lock(&tracer.mutex);
+	tracer.range_start = range_start;
+	tracer.range_end = range_end;
+	mutex_unlock(&tracer.mutex);
+
+	return n;
+}
+
+
+static struct kobj_attribute trace_range_attr =
+	__ATTR(trace_range, 0644, trace_range_show, trace_range_store);
+
 static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id)
 {
 	struct tracectx *t = &tracer;
@@ -577,6 +615,10 @@ static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id
 	if (ret)
 		dev_dbg(&dev->dev, "Failed to create trace_mode in sysfs\n");
 
+	ret = sysfs_create_file(&dev->dev.kobj, &trace_range_attr.attr);
+	if (ret)
+		dev_dbg(&dev->dev, "Failed to create trace_range in sysfs\n");
+
 	dev_dbg(t->dev, "ETM AMBA driver initialized.\n");
 
 out:
@@ -606,6 +648,7 @@ static int etm_remove(struct amba_device *dev)
 	sysfs_remove_file(&dev->dev.kobj, &trace_running_attr.attr);
 	sysfs_remove_file(&dev->dev.kobj, &trace_info_attr.attr);
 	sysfs_remove_file(&dev->dev.kobj, &trace_mode_attr.attr);
+	sysfs_remove_file(&dev->dev.kobj, &trace_range_attr.attr);
 
 	return 0;
 }
-- 
1.7.9.5


  parent reply	other threads:[~2012-06-20 22:51 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-20 22:47 [PATCH 00/15] Android ETM driver changes John Stultz
2012-06-20 22:47 ` [PATCH 01/15] ARM: etm: Don't require clock control John Stultz
2012-06-28 15:47   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 02/15] ARM: etm: Don't limit tracing to only non-secure code John Stultz
2012-06-28 15:49   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 03/15] ARM: etm: Don't try to clear the buffer full status after reading the buffer John Stultz
2012-06-20 22:47 ` John Stultz [this message]
2012-06-28 15:54   ` [PATCH 04/15] ARM: etm: Allow range selection Linus Walleij
2012-06-20 22:47 ` [PATCH 05/15] ARM: etm: Configure data tracing John Stultz
2012-06-28 15:55   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 06/15] ARM: etm: Add some missing locks and error checks John Stultz
2012-06-28 15:56   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 07/15] ARM: etm: Return the entire trace buffer if it is empty after reset John Stultz
2012-06-28 15:57   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 08/15] ARM: etm: Support multiple ETMs/PTMs John Stultz
2012-06-28 16:00   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 09/15] ARM: etm: Power down etm(s) when tracing is not enabled John Stultz
2012-06-28 16:01   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 10/15] ARM: etm: Wait for etm/ptm(s) to stop before requesting PowerDown John Stultz
2012-06-28 16:02   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 11/15] ARM: etm: Check arch version and disable data tracing for ptm John Stultz
2012-06-28 16:07   ` Linus Walleij
2012-06-28 21:31     ` Arve Hjønnevåg
2012-06-30 19:34       ` Linus Walleij
2012-06-20 22:47 ` [PATCH 12/15] ARM: etm: Add sysfs entry to enable timestamps if supported John Stultz
2012-06-28 16:08   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 13/15] ARM: etm: Add sysfs entry to set context-id-size John Stultz
2012-06-28 16:10   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 14/15] ARM: etm: Add sysfs entry to disable branch_output flag John Stultz
2012-06-28 16:10   ` Linus Walleij
2012-06-20 22:47 ` [PATCH 15/15] ARM: etm: Add sysfs entry to enable return stack if supported John Stultz
2012-06-28 16:11   ` Linus Walleij
  -- strict thread matches above, loose matches on Subject: below --
2012-06-13  2:01 [PATCH 00/15][RFC] Android ETM driver changes John Stultz
2012-06-13  2:01 ` [PATCH 04/15] ARM: etm: Allow range selection John Stultz

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=1340232467-6023-5-git-send-email-john.stultz@linaro.org \
    --to=john.stultz@linaro.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=arve@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=paul.gortmaker@windriver.com \
    /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.