[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1339552887-17204-8-git-send-email-john.stultz@linaro.org>
Date: Tue, 12 Jun 2012 19:01:25 -0700
From: John Stultz <john.stultz@...aro.org>
To: LKML <linux-kernel@...r.kernel.org>
Cc: Arve Hjønnevåg <arve@...roid.com>,
Russell King <linux@....linux.org.uk>,
Paul Gortmaker <paul.gortmaker@...driver.com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Mathieu Poirier <mathieu.poirier@...aro.org>,
John Stultz <john.stultz@...aro.org>
Subject: [PATCH 07/15] ARM: etm: Return the entire trace buffer if it is empty after reset
From: Arve Hjønnevåg <arve@...roid.com>
On some SOCs the read and write pointer are reset when the chip
resets, but the trace buffer content is preserved. If the status
bits indicates that the buffer is empty and we have never started
tracing, assume the buffer is full instead. This can be useful
if the system rebooted from a watchdog reset.
CC: Russell King <linux@....linux.org.uk>
CC: Paul Gortmaker <paul.gortmaker@...driver.com>
CC: Alexander Shishkin <alexander.shishkin@...ux.intel.com>
CC: Mathieu Poirier <mathieu.poirier@...aro.org>
Acked-by: Alexander Shishkin <alexander.shishkin@...ux.intel.com>
Signed-off-by: Arve Hjønnevåg <arve@...roid.com>
Signed-off-by: John Stultz <john.stultz@...aro.org>
---
arch/arm/kernel/etm.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c
index 3d21cf6..74444e5 100644
--- a/arch/arm/kernel/etm.c
+++ b/arch/arm/kernel/etm.c
@@ -45,6 +45,7 @@ struct tracectx {
unsigned long range_end;
unsigned long data_range_start;
unsigned long data_range_end;
+ bool dump_initial_etb;
struct device *dev;
struct clk *emu_clk;
struct mutex mutex;
@@ -106,6 +107,7 @@ static int trace_start(struct tracectx *t)
etb_unlock(t);
+ t->dump_initial_etb = false;
etb_writel(t, 0, ETBR_WRITEADDR);
etb_writel(t, 0, ETBR_FORMATTERCTRL);
etb_writel(t, 1, ETBR_CTRL);
@@ -312,6 +314,8 @@ static ssize_t etb_read(struct file *file, char __user *data,
etb_unlock(t);
total = etb_getdatalen(t);
+ if (total == 0 && t->dump_initial_etb)
+ total = t->etb_bufsz;
if (total == t->etb_bufsz)
first = etb_readl(t, ETBR_WRITEADDR);
@@ -386,6 +390,7 @@ static int __devinit etb_probe(struct amba_device *dev, const struct amba_id *id
goto out_release;
}
+ t->dump_initial_etb = true;
amba_set_drvdata(dev, t);
etb_unlock(t);
--
1.7.3.2.146.gca209
--
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