Hi List,
While working on a kernel module, I am getting OOPs and was trying to
debug it using the crash tool.
Can you please help me understanding an disassembled code snippet.
A brief about the situation:
(This is a x86_64 machine I am working on, running SLES10 SP1)
Following is the code where OOPs is occuring:
----8<-----
Unable to handle kernel NULL pointer dereference at 0000000000000620 RIP
[...]
Pid: 12208, comm: testpil Tainted: G U 2.6.16.46-0.12-smp #1
RIP: 0010:[<ffffffff801212a7>] <ffffffff801212a7>{page_to_pfn+25}
RSP: 0018:ffff8101eedf9200 EFLAGS: 00010217
RAX: 6db6db6db6db6db7 RBX: 00000000000000d0 RCX: ffff8100d2b8a880
RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff8100b9bc3ec0
RBP: ffff81011a4ea1c0 R08: 000000000000c040 R09: 0000000000000000
R10: 00000000e1e1e1e1 R11: 0000000000000007 R12: 000000000000c040
R13: 0000000000001000 R14: ffff8101fa1a50c0 R15: 0000000000001000
FS: 00002ab6d4bd76d0(0000) GS:ffffffff803be000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 0000000000000620 CR3: 00000001ec424000 CR4: 00000000000006e0
[...]
Stack: ffffffff802a1901 0000000000004040 0000000000000009 ffff8100b9bc3ec0
000005dc00000010 00000014000005dc ffff8101fa1a50c0 ffff8101fa1a50c0
000000000000c040 0000000000001000
----8<-----
Through crash tool, found that following is the asm code where the fault occurs.
------8<-----
0xffffffff8012128e <page_to_pfn>: mov (%rdi),%rax
0xffffffff80121291 <page_to_pfn+3>: shr $0x38,%rax
0xffffffff80121295 <page_to_pfn+7>: mov 0xffffffff803d54e0(,%rax,8),%rdx
0xffffffff8012129d <page_to_pfn+15>: mov $0x6db6db6db6db6db7,%rax
0xffffffff801212a7 <page_to_pfn+25>: sub 0x620(%rdx),%rdi
------8<-----
which is equivalent to (on NUMA machine):
-----8<------
unsigned long page_to_pfn(struct page *page)
{
return (long)(((page) - page_zone(page)->zone_mem_map) +
page_zone(page)->zone_start_pfn);
}
where page_zone is:
static inline struct zone *page_zone(struct page *page)
{
return zone_table[(page->flags >> ZONETABLE_PGSHIFT) &
ZONETABLE_MASK];
}
-----8<------
Also, the address of the zone_table is:
----8<-----
crash> sym zone_table
ffffffff803d54e0 (D) zone_table
----8<----
All I can infer is that in the line "sub 0x620(%rdx),%rdi", %rdx is
pointing to NULL
(As visible from the register state)
My doubts are:
1) What does the instruction "mov 0xffffffff803d54e0(,%rax,8), %rdx" imply?
2) for "RIP: 0010:[<ffffffff801212a7>] " what does "0010" mean?
3) Does "EFLAGS: 00010217" signify any error value, and if it does,
how to interpret it?
Thanks for any help,
Shreyansh
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ