Creation of carp interface on amd64 spins
Christopher Chen
muffaleta at gmail.com
Fri Sep 21 16:38:33 PDT 2007
On 9/20/07, Christopher Chen <muffaleta at gmail.com> wrote:
> On 9/20/07, Max Laier <max at love2party.net> wrote:
> > On Thursday 20 September 2007, Christopher Chen wrote:
> > > Hi:
> > >
> > > I'm running 6.2-RELEASE on some Pentium D's running and amd64 port.
> > >
> > > I'm doing some mildly interesting things with vlan tagging, etc, and I
> > > want to also set up carp. On identical machines running the i386 port,
> > > this works correctly, but when running
> > >
> > > ifconfig carp0
> > >
> > > For instance, the process just spins and can't be killed. The rest of
> > > the machine is fine, though!
> > >
> > > This is 6.2-RELEASE/amd64 running in SMP mode.
> > >
> > > Any ideas?
> >
> > Can you tell me what "^T" or ps gives for the spinning process? Does it
> > hang in userland or kernel? Can you try to trace the ifconfig, or - if
> > the hang is in the kernel - break into the kernel debugger and get a back
> > trace for the process?
>
> Max:
>
> load: 1.62 cmd: ifconfig 920 [runnable] 0.00u 96.02s 98% 920k
>
> That's what ^T says. I'm going to reboot and ktrace it now. So here's
> the last few lines of the ktrace:
>
> 944 ifconfig CALL modstat(0x10a,0x7fffffffe280)
> 944 ifconfig RET modstat 0
> 944 ifconfig CALL modfnext(0x10a)
> 944 ifconfig RET modfnext 267/0x10b
> 944 ifconfig CALL modstat(0x10b,0x7fffffffe280)
> 944 ifconfig RET modstat 0
> 944 ifconfig CALL socket(0x2,0x2,0)
> 944 ifconfig RET socket 3
> 944 ifconfig CALL ioctl(0x3,SIOCIFCREATE,0x514ce0)
>
> l# lsof -p 944
> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
> ifconfig 944 root cwd VDIR 0,77 512 16525 /root
> ifconfig 944 root rtd VDIR 0,77 512 2 /
> ifconfig 944 root txt VREG 0,77 80296 48 /sbin/ifconfig
> ifconfig 944 root txt VREG 0,77 192688 116
> /libexec/ld-elf.so.1
> ifconfig 944 root txt VREG 0,77 7424 24794 /lib/libipx.so.3
> ifconfig 944 root txt VREG 0,77 1083208 24786 /lib/libc.so.6
> ifconfig 944 root 0u VCHR 0,93 0t2101 93 /dev/ttyp0
> ifconfig 944 root 1u VCHR 0,93 0t2101 93 /dev/ttyp0
> ifconfig 944 root 2u VCHR 0,93 0t2101 93 /dev/ttyp0
> ifconfig 944 root 3u IPv4 0xffffff002d459130 0t0 UDP *:*
>
> Sorry I don't have physical access so I can't break into the kernel
> debugger right now.
Aha! Some data!
Okay so I got the console cable attached with DDB. So far so good. But
here's something else.
With DDB/KDB enabled in the kernel, suddenly ifconfig carp0 create
works! Sounds like some sort of race condition, maybe?
But when destroying the interfaces, I get this:
<<
kernel trap 12 with interrupts disabled
Fatal trap 12: page fault while in kernel mode
fault virtual address = 0x48
fault code = supervisor read, page not present
instruction pointer = 0x8:0xffffffff80430035
stack pointer = 0x10:0xffffffffa54b2ab0
frame pointer = 0x10:0xffffffffa54b2af0
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = resume, IOPL = 0
current process = 11 (swi4: clock sio)
[thread pid 11 tid 100002 ]
Stopped at propagate_priority+0x75: movq 0x48(%r15),%rdi
db> trace
Tracing pid 11 tid 100002 td 0xffffff003dba2980
propagate_priority() at propagate_priority+0x75
turnstile_wait() at turnstile_wait+0x20f
_mtx_lock_sleep() at _mtx_lock_sleep+0x89
carp_send_ad() at carp_send_ad+0xa9
softclock() at softclock+0x21a
ithread_loop() at ithread_loop+0x162
fork_exit() at fork_exit+0x86
fork_trampoline() at fork_trampoline+0xe
--- trap 0, rip = 0, rsp = 0xffffffffa54b2d00, rbp = 0 ---
>>
Wow!
--
Chris Chen <muffaleta at gmail.com>
"I want the kind of six pack you can't drink."
-- Micah
More information about the freebsd-net
mailing list