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

Dave Anderson anderson at redhat.com
Thu Mar 15 13:24:42 UTC 2007


Dmitry Antipov wrote:

> Dave Anderson wrote:
>
> > 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...
>
> OK
>
> Dmitry
>

Queued for the next release...

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-03-15 14:30:14.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-03-15 14:37:59.000000000 +0300
> @@ -51,6 +51,9 @@
>  void
>  ppc_init(int when)
>  {
> +       uint cpu_features;
> +       ulong cur_cpu_spec;
> +
>         switch (when)
>         {
>         case PRE_SYMTAB:
> @@ -140,6 +143,16 @@
>                         if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
>                                 machdep->hz = 1000;
>                 }
> +               if (symbol_exists("cur_cpu_spec")) {
> +                       get_symbol_data("cur_cpu_spec", sizeof(void *), &cur_cpu_spec);
> +                       readmem(cur_cpu_spec + MEMBER_OFFSET("cpu_spec", "cpu_user_features"),
> +                               KVADDR, &cpu_features, sizeof(uint), "cpu user features",
> +                               FAULT_ON_ERROR);
> +                       if (cpu_features & CPU_BOOKE)
> +                               machdep->flags |= CPU_BOOKE;
> +               }
> +               else
> +                       machdep->flags |= CPU_BOOKE;
>                 machdep->section_size_bits = _SECTION_SIZE_BITS;
>                 machdep->max_physmem_bits = _MAX_PHYSMEM_BITS;
>                 break;
> @@ -285,7 +298,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 +386,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




More information about the Crash-utility mailing list