[Crash-utility] [PATCH v2 1/2] arm64: read pagesize
Andrew Jones
drjones at redhat.com
Fri Nov 20 14:16:28 UTC 2015
On Thu, Nov 19, 2015 at 08:16:37PM -0500, Andrew Jones wrote:
> Thanks to kernel commit 9d372c9fab34 "arm64: Add page size to the
> kernel image header", we don't need a heuristic to determine the
> pagesize on arm64. Keep the heuristic for older kernels, but try
> reading the header first.
> ---
> arm64.c | 30 ++++++++++++++++++++++++++++++
> defs.h | 1 +
> 2 files changed, 31 insertions(+)
>
> diff --git a/arm64.c b/arm64.c
> index 5f8e2f6852434..d85ad7214dd39 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -19,6 +19,7 @@
>
> #include "defs.h"
> #include <elf.h>
> +#include <endian.h>
>
> #define NOT_IMPLEMENTED(X) error((X), "%s: function not implemented\n", __func__)
>
> @@ -97,6 +98,32 @@ arm64_init(int when)
> break;
>
> case PRE_GDB:
> + if (!machdep->pagesize) {
> + /*
> + * Kerneldoc Documentation/arm64/booting.txt describes
> + * the kernel image header flags field.
> + */
> + value = machdep->machspec->kernel_flags;
> + value = (value >> 1) & 3;
> +
> + switch(value)
> + {
> + case 0:
> + break;
> + case 1:
> + machdep->pagesize = 4096;
> + break;
> + case 2:
> + /* TODO: machdep->pagesize = 16384; */
> + error(FATAL, "16K pages not supported.");
> + break;
> + case 3:
> + machdep->pagesize = 65536;
> + break;
> + }
> +
> + }
> +
> if (!machdep->pagesize &&
> kernel_symbol_exists("swapper_pg_dir") &&
> kernel_symbol_exists("idmap_pg_dir")) {
> @@ -305,6 +332,9 @@ arm64_verify_symbol(const char *name, ulong value, char type)
> if (!name || !strlen(name))
> return FALSE;
>
> + if (STREQ(name, "_kernel_flags_le"))
> + machdep->machspec->kernel_flags = le64toh(value);
I forgot the 'type == A' here to avoid a bunch of unnecessary strcmps. v3
coming in 2 seconds.
> +
> if (((type == 'A') || (type == 'a')) && (highest_bit_long(value) != 63))
> return FALSE;
>
> diff --git a/defs.h b/defs.h
> index 7004619017e41..3e5dbd99942b2 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -2944,6 +2944,7 @@ struct machine_specific {
> ulong crash_kexec_end;
> ulong crash_save_cpu_start;
> ulong crash_save_cpu_end;
> + ulong kernel_flags;
> };
>
> struct arm64_stackframe {
> --
> 2.4.3
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
More information about the Crash-utility
mailing list