diff options
author | Jordan Niethe <jniethe5@gmail.com> | 2019-04-02 10:43:18 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2019-05-20 14:20:29 +1000 |
commit | 2717c6b8ddcd631dcf27eaed0f76b662be36a569 (patch) | |
tree | e6c5cbf315ae757b958f83ee0ad8bbead7a2c4c9 | |
parent | bc04bf1eef38a11b9d90f379d7be180f98e2b58d (diff) | |
download | skiboot-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.c | 10 | ||||
-rw-r--r-- | include/trace.h | 2 | ||||
-rw-r--r-- | skiboot.lds.S | 4 |
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) |