aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Niethe <jniethe5@gmail.com>2019-04-02 10:43:18 +1100
committerStewart Smith <stewart@linux.ibm.com>2019-05-20 14:20:29 +1000
commit2717c6b8ddcd631dcf27eaed0f76b662be36a569 (patch)
treee6c5cbf315ae757b958f83ee0ad8bbead7a2c4c9
parentbc04bf1eef38a11b9d90f379d7be180f98e2b58d (diff)
downloadskiboot-2717c6b8ddcd631dcf27eaed0f76b662be36a569.zip
skiboot-2717c6b8ddcd631dcf27eaed0f76b662be36a569.tar.gz
skiboot-2717c6b8ddcd631dcf27eaed0f76b662be36a569.tar.bz2
core/trace: Change buffer alignment from 4K to 64K
We want to be able to mmap the trace buffers to be used by the dump_trace tool. This means that the trace bufferes must be page aligned. Currently they are aligned to 4K. Most power systems have a 64K page size. On systems with a 4K page size, 64K aligned will still be page aligned. Change the allocation of the trace buffers to be 64K aligned. The trace_info struct that contains the trace buffer is actually what is allocated aligned memory. This means the trace buffer itself is not actually aligned and this is the address that is currently exposed through sysfs. To get around this change the address that is exposed to sysfs to be the trace_info struct. This means the lock in trace_info is now visible too. Signed-off-by: Jordan Niethe <jniethe5@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--core/trace.c10
-rw-r--r--include/trace.h2
-rw-r--r--skiboot.lds.S4
3 files changed, 8 insertions, 8 deletions
diff --git a/core/trace.c b/core/trace.c
index a7b3cd1..4b7d570 100644
--- a/core/trace.c
+++ b/core/trace.c
@@ -193,7 +193,7 @@ static void trace_add_desc(struct trace_info *t, uint64_t size)
}
debug_descriptor.num_traces++;
- debug_descriptor.trace_phys[i] = (uint64_t)&t->tb;
+ debug_descriptor.trace_phys[i] = (uint64_t)t;
debug_descriptor.trace_tce[i] = 0; /* populated later */
debug_descriptor.trace_size[i] = size;
}
@@ -206,16 +206,16 @@ void init_trace_buffers(void)
uint64_t size;
/* Boot the boot trace in the debug descriptor */
- trace_add_desc(any, sizeof(boot_tracebuf.buf));
+ trace_add_desc(any, sizeof(boot_tracebuf));
/* Allocate a trace buffer for each primary cpu. */
for_each_cpu(t) {
if (t->is_secondary)
continue;
- /* Use a 4K alignment for TCE mapping */
- size = ALIGN_UP(sizeof(*t->trace) + tracebuf_extra(), 0x1000);
- t->trace = local_alloc(t->chip_id, size, 0x1000);
+ /* Use a 64K alignment for TCE mapping */
+ size = ALIGN_UP(sizeof(*t->trace) + tracebuf_extra(), 0x10000);
+ t->trace = local_alloc(t->chip_id, size, 0x10000);
if (t->trace) {
any = t->trace;
memset(t->trace, 0, size);
diff --git a/include/trace.h b/include/trace.h
index da43572..2b65e90 100644
--- a/include/trace.h
+++ b/include/trace.h
@@ -29,7 +29,7 @@ struct cpu_thread;
void init_boot_tracebuf(struct cpu_thread *boot_cpu);
struct trace_info {
- /* Lock for writers. */
+ /* Lock for writers. Exposed to kernel. */
struct lock lock;
/* Exposed to kernel. */
struct tracebuf tb;
diff --git a/skiboot.lds.S b/skiboot.lds.S
index ef7db23..54b1fef 100644
--- a/skiboot.lds.S
+++ b/skiboot.lds.S
@@ -192,9 +192,9 @@ SECTIONS
*/
. = ALIGN(0x1000);
*(.data.memcons);
- . = ALIGN(0x1000);
+ . = ALIGN(0x10000);
*(.data.boot_trace);
- . = ALIGN(0x1000);
+ . = ALIGN(0x10000);
*(.data*)
*(.force.data)
*(.toc1)