[Crash-utility] kernel module parsing failure - mips
Dave Anderson
anderson at redhat.com
Sun Dec 4 13:17:19 UTC 2016
----- Original Message -----
> On Sat, Dec 3, 2016 at 1:59 AM, Rabin Vincent <rabin at rab.in> wrote:
> > On Fri, Dec 02, 2016 at 04:06:20PM -0800, Sagar Borikar wrote:
> >> With 7.1.7, crash is working for MIPS when all drivers are embedded
> >> inside kernel.
> >> When I make the driver loadable and panic the kernel, crash doesn't
> >> locate some symbols correctly.
> >>
> >> please wait... (gathering module symbol data)
> >> crash: invalid size request: 0 type: "pgd page"
> >>
> >> debugged further and find that PGD_ORDER provides incorrect number
> >> due to which the PGD_SIZE macro results in 0.
> >>
> >> Just for fun, I replaced PGD_ORDER with 0(I know its incorrect) and it
> >> went ahead but couldn't run "mod" command successfully as it threw
> >> following error
> >>
> >> crash> mod
> >> mod: cannot access vmalloc'd module memory
> >
> > In order to access vmalloc'd memory we need interpret the page tables
> > correctly. This isn't needed when the modules are built in since then
> > the memory will be in the direct-mapped kseg0 segment. So the "mod"
> > failure is just a consequence of replacing PGD_ORDER with 0.
>
> Yes, mod will not work as I said earlier. Crash was exiting hence I
> wanted to have quick workaround.
>
> > So the first error should be fixed properly before attempting "mod". What
> > kernel version is this and what page size do to use?
>
> 4.4.20 kernel and page size is 16K
>
> >
> > Try running the "help -m" and "mach" commands (you can skip module loading
> > with
> > --no_modules to get to the crash> prompt) and check if the values for the
> > various page table sizes and bits match what your kernel is using.
> >
> > crash> help -m
> > ...
> > pagesize: 4096
> > pageshift: 12
> > pagemask: fffffffffffff000
> > pageoffset: fff
> > pgdir_shift: 22
> > ptrs_per_pgd: 1024
> > ptrs_per_pte: 1024
> > ...
> >
> >
> > crash-mips> mach
> > PAGE SIZE: 4096
> >
> > _PAGE_PRESENT: 00000001
> > _PAGE_READ: 00000002
> > _PAGE_WRITE: 00000004
> > _PAGE_ACCESSED: 00000008
> > _PAGE_MODIFIED: 00000010
> > _PAGE_GLOBAL: 00000020
> > _PAGE_VALID: 00000040
> > _PAGE_DIRTY: 00000080
> This appears to be correct info for my platform.
> Thanks
If your kernel has a 16k page size and "help -m" shows 4096 as above,
then there's one major problem. The calculation of page size in mips.c
is based upon the difference between the the "swapper_pg_dir" symbol
and the next symbol above it:
crash> sym -n swapper_pg_dir
806d0000 (B) swapper_pg_dir
806d1000 (B) invalid_pte_table
crash>
What does the command above on your kernel show?
Dave
> Sagar
>
> >
> > --
> > 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
>
More information about the Crash-utility
mailing list