David Anderson wrote:
Dmitry Antipov wrote:
> Hello,
>
> this patch introduces a kind of detection of PPC32 CPU type in attempt to
> determine the valid kvtop()/uvtop() addresses translation method. It also
> assumes that you have a quite recent 2.6 kernel, btw.
>
> Dmitry
>
Just to clarify -- does that imply that this somehow breaks backwards
compatibility, or that the CPU_BOOKE detection only works with later
2.6 kernels? (I'm presuming the latter...)
Dave
Looks like it does break existing compatibility. The current code assumes that
all PPC are BOOKE. So the patch would make it default to non-BOOKE processors.
Perhaps another flag can be set if symbol cur_cpu_spec does not exist and then
default it to the original implementation to ensure backward compatibility.
But yes, the symbol is added by Dmitry to the kernel just recently or in the
process of....
>
> ------------------------------------------------------------------------
>
> diff -ur .orig-crash-4.0-3.20/defs.h crash-4.0-3.20/defs.h
> --- .orig-crash-4.0-3.20/defs.h 2007-02-21 23:52:01.000000000 +0300
> +++ crash-4.0-3.20/defs.h 2007-02-22 16:16:41.000000000 +0300
> @@ -3747,6 +3747,8 @@
> #define display_idt_table() \
> error(FATAL, "-d option is not applicable to PowerPC
> architecture\n")
> #define KSYMS_START (0x1)
> +/* This should match PPC_FEATURE_BOOKE from
> include/asm-powerpc/cputable.h */
> +#define CPU_BOOKE (0x00008000)
> #endif
>
> /*
> diff -ur .orig-crash-4.0-3.20/ppc.c crash-4.0-3.20/ppc.c
> --- .orig-crash-4.0-3.20/ppc.c 2007-02-21 23:52:01.000000000 +0300
> +++ crash-4.0-3.20/ppc.c 2007-02-22 16:21:32.000000000 +0300
> @@ -51,6 +51,9 @@
> void
> ppc_init(int when)
> {
> + target_uint cpu_features;
> + target_ptr cur_cpu_spec;
> +
> switch (when)
> {
> case PRE_SYMTAB:
> @@ -140,6 +143,13 @@
> if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
> machdep->hz = 1000;
> }
> + if (symbol_exists("cur_cpu_spec")) {
> + get_symbol_ptr("cur_cpu_spec", &cur_cpu_spec);
> + readmem_uint(cur_cpu_spec + MEMBER_OFFSET("cpu_spec",
> "cpu_user_features"), + KVADDR, &cpu_features,
> "cpu user features", FAULT_ON_ERROR);
> + if (cpu_features & CPU_BOOKE)
> + machdep->flags |= CPU_BOOKE;
> + }
> machdep->section_size_bits = _SECTION_SIZE_BITS;
> machdep->max_physmem_bits = _MAX_PHYSMEM_BITS;
> break;
> @@ -285,7 +295,11 @@
>
> page_middle = (ulong *)pgd_pte;
>
> - page_table = page_middle + (BTOP(vaddr) & (PTRS_PER_PTE - 1));
> + if (machdep->flags & CPU_BOOKE)
> + page_table = page_middle + (BTOP(vaddr) & (PTRS_PER_PTE - 1));
> + else
> + page_table = ((page_middle & machdep->pagemask) +
> machdep->kvbase) +
> + (BTOP(vaddr) & (PTRS_PER_PTE-1));
>
> if (verbose)
> fprintf(fp, " PMD: %lx => %lx\n",(ulong)page_middle, @@
> -369,7 +383,11 @@
>
> page_middle = (ulong *)pgd_pte;
>
> - page_table = page_middle + (BTOP(kvaddr) & (PTRS_PER_PTE-1));
> + if (machdep->flags & CPU_BOOKE)
> + page_table = page_middle + (BTOP(kvaddr) & (PTRS_PER_PTE - 1));
> + else
> + page_table = ((page_middle & machdep->pagemask) +
> machdep->kvbase) +
> + (BTOP(kvaddr) & (PTRS_PER_PTE-1));
>
> if (verbose)
> fprintf(fp, " PMD: %lx => %lx\n", (ulong)page_middle,
>
> ------------------------------------------------------------------------
>
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/crash-utility
>
------------------------------------------------------------------------
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
--
------------------------------------------------------
Dave Jiang
Software Engineer
MontaVista Software, Inc.
http://www.mvista.com
------------------------------------------------------