[Crash-utility] [PATCH] PPC BookE/non-BookE support

Dave Anderson anderson at redhat.com
Tue Mar 13 13:17:13 UTC 2007


Dave Jiang wrote:

> 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....
>

To maintain backwards-compatibility, how about re-posting
with the upper part of the ppc.c patch doing something like:

        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;
        } else
                machdep->flags |= CPU_BOOKE;

And it will need to be compilable without applying the
MontaVista changes, i.e., change the cur_cpu_spec and cpu_features
declarations, readmem_uint() to readmem(), get_symbol_ptr() to
get_symbol_data(), etc...

Thanks,
   Dave


>
> >>
> >> ------------------------------------------------------------------------
> >>
> >> 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 at redhat.com
> >> https://www.redhat.com/mailman/listinfo/crash-utility
> >>
> >
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > --
> > Crash-utility mailing list
> > Crash-utility at redhat.com
> > https://www.redhat.com/mailman/listinfo/crash-utility
>
> --
>
> ------------------------------------------------------
> Dave Jiang
> Software Engineer
> MontaVista Software, Inc.
> http://www.mvista.com
> ------------------------------------------------------
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20070313/3ccff4dc/attachment.htm>


More information about the Crash-utility mailing list