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@redhat.com
>> https://www.redhat.com/mailman/listinfo/crash-utility
>>
>
>
>
>
> ------------------------------------------------------------------------
>
> --
> Crash-utility mailing list
> Crash-utility@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@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility