Port-i386 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

ddb 'step' recovers from a page fault



I am seeing "recoverable" page fault traps in ether_output().  What I
mean by "recoverable" is that if I type 'continue' at the ddb prompt,
the fault does not re-occur!  In the console log, below, I have typed
'step' instead of 'continue' at the debugger prompt.  Note that after
the 'step', esp and ss registers have changed from outlandish numbers
(esp 0xc0743240, ss 0x2) to normal numbers (0xc6d427a4, 0x10).

I have a few questions for the collective wisdom:

1 Did the fault really occur at the instruction that ddb indicates,
  movl %ebx,%eax ?  Or is it the instruction before or after?

2 Could the fault indicate that the TLB was momentarily out-of-sync with
  the page table?  How could that occur?

3 What will momentarily corrupt ss and esp?  Is this merely a ddb bug?

4 What information should I collect the next time that this fault occurs?

5 I have a hunch that one or more hardware and/or software interrupts
  occurring while the kernel is in ether_output, is there some simple
  instrumentation that I can add to find out?

6 Why should this fault occur so frequently at this *particular*
  instruction?

FYI, disassembly of ether_output is here,
<ftp://elmendorf.ojctech.com/users/netbsd-8d530943/ether_output.asm>.

Here is the fault:

uvm_fault(0xc58546e4, 0, 2) -> 0xe
kernel: supervisor trap page fault, code=0
Stopped in pid 396.1 (hslsd) at netbsd:ether_output+0x3f:       movl    %ebx,%ea
x
ether_output(c077a004,c0880600,c0836fe0,0,0,c08806d8,c077a004,2,c6d42900,c0843e0
0) at netbsd:ether_output+0x3f
ip6_output(c0880600,0,c0840c90,0,c06f9580,c071b250,0,c0891f38,c077a004,c0843e00)
 at netbsd:ip6_output+0xf76
udp6_output(c0840c60,c0880600,c0855300,0,c6d237a0,c6d237a0,6,c071b250,1,0) at ne
tbsd:udp6_output+0x4e5
udp6_usrreq(c071b250,9,c0891f00,c0855300,0,c6d237a0,c6d237a0,bc,c58546e4,c071b25
0) at netbsd:udp6_usrreq+0x1cc
udp6_usrreq_wrapper(c071b250,9,c0891f00,c0855300,0,c6d237a0,c6d42c48,c,3,c071b2a
4) at netbsd:udp6_usrreq_wrapper+0x2d
sosend(c071b250,c0855300,c6d42c48,c0891f00,0,4,c6d237a0,0,c6d42c08,0) at netbsd:
sosend+0x42c
do_sys_sendmsg(c6d237a0,9,c6d42cb8,4,c6d42d28,0,4792639b,96e1c8c6,8391fcee,c03b3
fb0) at netbsd:do_sys_sendmsg+0x324
sys_sendto(c6d237a0,c6d42d00,c6d42d28,c6d24b80,c02ed526,c5855910,1,9,bb928814,bc
) at netbsd:sys_sendto+0x54
syscall(c6d42d48,b3,bb9000ab,1f,bfbf001f,0,bb91f00c,bfbfda98,bbbe2994,bb91f00c) 
a
t netbsd:syscall+0xa0
ds          0x10
es          0x10
fs          0x30
gs          0x10
edi         0xc0880600
esi         0
ebp         0xc6d427dc
ebx         0
edx         0xe0004c39
ecx         0x4
eax         0
eip         0xc02d1d0f  ether_output+0x3f
cs          0x8
eflags      0x10282
esp         0xc0743240
ss          0x2
netbsd:ether_output+0x3f:       movl    %ebx,%eax
db{0}> con   step
sip0: receive FIFO overrun
sip0: receive ring overrun
Stopped in pid 396.1 (hslsd) at netbsd:ether_output+0x41:       leal    0xffffff
f4(%ebp),%esp
ether_output(c077a004,c0880600,c0836fe0,0,0,c08806d8,c077a004,2,c6d42900,c0843e0
0) at netbsd:ether_output+0x41
ip6_output(c0880600,0,c0840c90,0,c06f9580,c071b250,0,c0891f38,c077a004,c0843e00)
 at netbsd:ip6_output+0xf76
udp6_output(c0840c60,c0880600,c0855300,0,c6d237a0,c6d237a0,6,c071b250,1,0) at ne
tbsd:udp6_output+0x4e5
udp6_usrreq(c071b250,9,c0891f00,c0855300,0,c6d237a0,c6d237a0,bc,c58546e4,c071b25
0) at netbsd:udp6_usrreq+0x1cc
udp6_usrreq_wrapper(c071b250,9,c0891f00,c0855300,0,c6d237a0,c6d42c48,c,3,c071b2a
4) at netbsd:udp6_usrreq_wrapper+0x2d
sosend(c071b250,c0855300,c6d42c48,c0891f00,0,4,c6d237a0,0,c6d42c08,0) at netbsd:
sosend+0x42c
do_sys_sendmsg(c6d237a0,9,c6d42cb8,4,c6d42d28,0,4792639b,96e1c8c6,8391fcee,c03b3
fb0) at netbsd:do_sys_sendmsg+0x324
sys_send

-- 
David Young             OJC Technologies
dyoung%ojctech.com@localhost      Urbana, IL * (217) 278-3933 ext 24


Home | Main Index | Thread Index | Old Index