aboutsummaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-11-26 14:58:38 +1100
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-11-26 14:58:38 +1100
commit89192badc730eea4eede2dbe662a3755443e9141 (patch)
treee8dfb8649d8932506117d6948e8d858cd232f2a9 /external
parentcaf25fa378de07eb271be3ef6a63719b5c116875 (diff)
downloadskiboot-89192badc730eea4eede2dbe662a3755443e9141.zip
skiboot-89192badc730eea4eede2dbe662a3755443e9141.tar.gz
skiboot-89192badc730eea4eede2dbe662a3755443e9141.tar.bz2
Various fixes to dump_traces
Endian breakage, build breakage, ... Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'external')
-rw-r--r--external/trace/Makefile2
-rw-r--r--external/trace/dump_trace.c33
-rw-r--r--external/trace/trace.c39
3 files changed, 41 insertions, 33 deletions
diff --git a/external/trace/Makefile b/external/trace/Makefile
index b4b0091..b397380 100644
--- a/external/trace/Makefile
+++ b/external/trace/Makefile
@@ -1,5 +1,5 @@
HOSTEND=$(shell uname -m | sed -e 's/^i.*86$$/LITTLE/' -e 's/^x86.*/LITTLE/' -e 's/^ppc.*/BIG/')
-CFLAGS=-g -Wall -DHAVE_$(HOSTEND)_ENDIAN -I../include
+CFLAGS=-g -Wall -DHAVE_$(HOSTEND)_ENDIAN -I../../include
dump_trace: dump_trace.c
diff --git a/external/trace/dump_trace.c b/external/trace/dump_trace.c
index 9364601..db53d78 100644
--- a/external/trace/dump_trace.c
+++ b/external/trace/dump_trace.c
@@ -25,8 +25,8 @@
#include <stddef.h>
#include <unistd.h>
-#include "../ccan/endian/endian.h"
-#include "../ccan/short_types/short_types.h"
+#include "../../ccan/endian/endian.h"
+#include "../../ccan/short_types/short_types.h"
#include <trace_types.h>
/* Handles trace from debugfs (one record at a time) or file */
@@ -57,39 +57,40 @@ static void display_header(const struct trace_hdr *h)
u64 ts = be64_to_cpu(h->timestamp);
printf("%16lx (+%8lx) [%03x] : ",
- ts, prev_ts ? (ts - prev_ts) : 0, h->cpu);
+ ts, prev_ts ? (ts - prev_ts) : 0, be16_to_cpu(h->cpu));
prev_ts = ts;
}
static void dump_fsp_event(struct trace_fsp_event *t)
{
- printf("FSP_EVT [st=%d] ", t->fsp_state);
+ printf("FSP_EVT [st=%d] ", be16_to_cpu(t->fsp_state));
- switch(t->event) {
+ switch(be16_to_cpu(t->event)) {
case TRACE_FSP_EVT_LINK_DOWN:
printf("LINK DOWN");
break;
case TRACE_FSP_EVT_DISR_CHG:
- printf("DISR CHANGE (0x%08x)", t->data[0]);
+ printf("DISR CHANGE (0x%08x)", be32_to_cpu(t->data[0]));
break;
case TRACE_FSP_EVT_SOFT_RR:
- printf("SOFT R&R (DISR=0x%08x)", t->data[0]);
+ printf("SOFT R&R (DISR=0x%08x)", be32_to_cpu(t->data[0]));
break;
case TRACE_FSP_EVT_RR_COMPL:
printf("R&R COMPLETE");
break;
case TRACE_FSP_EVT_HDES_CHG:
- printf("HDES CHANGE (0x%08x)", t->data[0]);
+ printf("HDES CHANGE (0x%08x)", be32_to_cpu(t->data[0]));
break;
case TRACE_FSP_EVT_POLL_IRQ:
printf("%s HDIR=%08x CTL=%08x PSI_IRQ=%d",
- t->data[0] ? "IRQ " : "POLL", t->data[1],
- t->data[2], t->data[3]);
+ t->data[0] ? "IRQ " : "POLL", be32_to_cpu(t->data[1]),
+ be32_to_cpu(t->data[2]), be32_to_cpu(t->data[3]));
break;
default:
printf("Unknown %d (d: %08x %08x %08x %08x)",
- t->event, t->data[0], t->data[1],
- t->data[2], t->data[3]);
+ be16_to_cpu(t->event), be32_to_cpu(t->data[0]),
+ be32_to_cpu(t->data[1]), be32_to_cpu(t->data[2]),
+ be32_to_cpu(t->data[3]));
}
printf("\n");
}
@@ -132,19 +133,19 @@ static void dump_uart(struct trace_uart *t)
switch(t->ctx) {
case TRACE_UART_CTX_IRQ:
printf(": IRQ IRQEN=%d IN_CNT=%d\n",
- !t->irq_state, t->in_count);
+ !t->irq_state, be16_to_cpu(t->in_count));
break;
case TRACE_UART_CTX_POLL:
printf(": POLL IRQEN=%d IN_CNT=%d\n",
- !t->irq_state, t->in_count);
+ !t->irq_state, be16_to_cpu(t->in_count));
break;
case TRACE_UART_CTX_READ:
printf(": READ IRQEN=%d IN_CNT=%d READ=%d\n",
- !t->irq_state, t->in_count, t->cnt);
+ !t->irq_state, be16_to_cpu(t->in_count), t->cnt);
break;
default:
printf(": ???? IRQEN=%d IN_CNT=%d\n",
- !t->irq_state, t->in_count);
+ !t->irq_state, be16_to_cpu(t->in_count));
break;
}
}
diff --git a/external/trace/trace.c b/external/trace/trace.c
index 6bf0a5a..7818ada 100644
--- a/external/trace/trace.c
+++ b/external/trace/trace.c
@@ -15,6 +15,8 @@
*/
/* This example code shows how to read from the trace buffer. */
#include <external/trace/trace.h>
+#include "../ccan/endian/endian.h"
+#include "../ccan/short_types/short_types.h"
#include <trace_types.h>
#include <errno.h>
@@ -30,14 +32,14 @@ bool trace_empty(const struct tracebuf *tb)
* we've already seen every repeat for (yet which may be
* incremented in future), we're also empty.
*/
- rep = (void *)tb->buf + (tb->rpos & tb->mask);
- if (tb->end != tb->rpos + sizeof(*rep))
+ rep = (void *)tb->buf + be64_to_cpu(tb->rpos & tb->mask);
+ if (be64_to_cpu(tb->end) != be64_to_cpu(tb->rpos) + sizeof(*rep))
return false;
if (rep->type != TRACE_REPEAT)
return false;
- if (rep->num != tb->last_repeat)
+ if (be16_to_cpu(rep->num) != be32_to_cpu(tb->last_repeat))
return false;
return true;
@@ -46,8 +48,11 @@ bool trace_empty(const struct tracebuf *tb)
/* You can't read in parallel, so some locking required in caller. */
bool trace_get(union trace *t, struct tracebuf *tb)
{
- u64 start;
- size_t len = sizeof(*t) < tb->max_size ? sizeof(*t) : tb->max_size;
+ u64 start, rpos;
+ size_t len;
+
+ len = sizeof(*t) < be32_to_cpu(tb->max_size) ? sizeof(*t) :
+ be32_to_cpu(tb->max_size);
if (trace_empty(tb))
return false;
@@ -57,32 +62,33 @@ again:
* The actual buffer is slightly larger than tbsize, so this
* memcpy is always valid.
*/
- memcpy(t, tb->buf + (tb->rpos & tb->mask), len);
+ memcpy(t, tb->buf + be64_to_cpu(tb->rpos & tb->mask), len);
rmb(); /* read barrier, so we read tb->start after copying record. */
- start = tb->start;
+ start = be64_to_cpu(tb->start);
+ rpos = be64_to_cpu(tb->rpos);
/* Now, was that overwritten? */
- if (tb->rpos < start) {
+ if (rpos < start) {
/* Create overflow record. */
t->overflow.unused64 = 0;
t->overflow.type = TRACE_OVERFLOW;
t->overflow.len_div_8 = sizeof(t->overflow) / 8;
- t->overflow.bytes_missed = start - tb->rpos;
- tb->rpos += t->overflow.bytes_missed;
+ t->overflow.bytes_missed = cpu_to_be64(start - rpos);
+ tb->rpos = cpu_to_be64(start);
return true;
}
/* Repeat entries need special handling */
if (t->hdr.type == TRACE_REPEAT) {
- u32 num = t->repeat.num;
+ u32 num = be16_to_cpu(t->repeat.num);
/* In case we've read some already... */
- t->repeat.num -= tb->last_repeat;
+ t->repeat.num = cpu_to_be16(num - tb->last_repeat);
/* Record how many repeats we saw this time. */
- tb->last_repeat = num;
+ tb->last_repeat = cpu_to_be32(num);
/* Don't report an empty repeat buffer. */
if (t->repeat.num == 0) {
@@ -90,15 +96,16 @@ again:
* This can't be the last buffer, otherwise
* trace_empty would have returned true.
*/
- assert(tb->end > tb->rpos + t->hdr.len_div_8 * 8);
+ assert(be64_to_cpu(tb->end) >
+ rpos + t->hdr.len_div_8 * 8);
/* Skip to next entry. */
- tb->rpos += t->hdr.len_div_8 * 8;
+ tb->rpos = cpu_to_be64(rpos + t->hdr.len_div_8 * 8);
tb->last_repeat = 0;
goto again;
}
} else {
tb->last_repeat = 0;
- tb->rpos += t->hdr.len_div_8 * 8;
+ tb->rpos = cpu_to_be64(rpos + t->hdr.len_div_8 * 8);
}
return true;