[Crash-utility] crash-4.0-2.10 ppc64 4-level pagetable fixes
Badari Pulavarty
pbadari at us.ibm.com
Tue Nov 8 19:27:30 UTC 2005
On Tue, 2005-11-08 at 14:17 -0500, Dave Anderson wrote:
> Badari Pulavarty wrote:
> > Hi Dave,
> >
> > Here are the fixes to make crash understand PPC64 4-level pagetable
> > layout.
> >
> > I am not a PPC64 expert, I coded up looking at the ppc64 kernel
> > pagetable handling code. It seems to work fine for most part.
> >
> > But I do get occasional, "user virtual" translation failures.
> > I think I screwed up PMD calculations. I am not able to spot
> > the problem. Can some one help ?
> >
> > Thanks,
> > Badari
> >
> It's possible that the virtual address that you're examining
> is not backed by physical memory (yet). If you do a "vtop"
> on the address that gives you the error, you may see it's
> simply not mapped.
>
> For example, I created a little program call "bogus" that
> does a malloc of 1000000, prints the beginning address
> of the region, and then pauses:
>
> main()
> {
> char *buf;
>
> buf = malloc(1000000);
> printf("buf: %lx\n", buf);
> pause();
> }
>
> When I run it, it prints "buf: 2a95586010". If I look at
> it with crash, the first page of data is instantiated, i.e.
> it was already in place before the malloc() call, but if
> I go to any page beyond that, it does this:
>
> crash> set 13474
> PID: 13474
> COMMAND: "bogus"
> TASK: 100310f57f0 [THREAD_INFO: 10005394000]
> CPU: 1
> STATE: TASK_INTERRUPTIBLE
> crash> rd 2a95586010
> 2a95586010: 0000000000000000 ........
> crash> rd 2a95587010
> rd: invalid user virtual address: 2a95587010 type: "64-bit UVADDR"
> crash> vtop 2a95587010
> VIRTUAL PHYSICAL
> 2a95587010 (not mapped)
>
> PGD: 279cb550 => 365fa067
> PMD: 365fa550 => 27ce6067
> PTE: 27ce6c38 => 0
>
> VMA START END FLAGS FILE
> 1003c5898d8 2a95584000 2a9567c000 100073
>
> crash>
Yep. You are right, those pages are not mapped. Initially
I thought that was the case, but I wasn't really sure if it
can happen with segments from shared libraries. (since
the routine which is telling its not mapped involves
going through my code).
Anyway, I verified this on x86-64 machine also - I do
get "read" error and those pages are not mapped.
I guess, my changes are good :)
Haren, can you review them ?
Thanks,
Badari
crash> rd -u 400002d6000
rd: invalid user virtual address: 400002d6000 type: "64-bit UVADDR"
crash> vtop 400002d6000
VIRTUAL PHYSICAL
400002d6000 (not mapped)
PAGE DIRECTORY: c000000088ed5000
L4: c000000088ed5400 => c0000000e8efa800
PGD: c0000000e8efa800 => c0000000e8efac00
PMD: c0000000e8efac08 => c00000008cfff000
PMD: c0000000e8efac08 => c00000008cfff6b0
PTE: c00000008cfff6b0 => 0
VMA START END FLAGS FILE
c0000000eb66a140 400002d6000 400002e5000
70 /lib64/tls/libc.so.6
FILE: /lib64/tls/libc.so.6 OFFSET: 141000
More information about the Crash-utility
mailing list