Re: LOR route vr0

From: Robert Watson <rwatson_at_FreeBSD.org>
Date: Sat, 27 Aug 2005 18:20:24 +0100 (BST)
On Sat, 27 Aug 2005, M. Warner Losh wrote:

> In message: <Pine.BSF.4.53.0508270912550.969_at_e0-0.zab2.int.zabbadoz.net>
>            "Bjoern A. Zeeb" <bzeeb-lists_at_lists.zabbadoz.net> writes:
> : > lock order reversal
> : >  1st 0xc17621ec rtentry (rtentry) _at_ /usr/src/sys/net/route.c:1269
> : >  2nd 0xc15ec938 vr0 (network driver) _at_ /usr/src/sys/pci/if_vr.c:1391
> :
> : added with ID 140: http://sources.zabbadoz.net/freebsd/lor.html#140
>
> I've noticed a *HUGE* number of LORs that look like this:
>
> ock order reversal
> 1st 0xc17490e4 rtentry (rtentry) _at_ sys/netinet/if_ether.c:445
> 2nd 0xc15c94b0 rl1 (network driver) _at_ sys/pci/if_rl.c:1451

Generally speaking, network interface device driver locks follow network 
stack locks in the lock order.  However, I've not really looked much at 
the route table locking so can't speak to whether that is the case 
specifically for routing locks.  If it is, the below traces reflect the 
correct order, and you might want to add a hard-coded entry to witness in 
order to catch the reverse order.  Lock order reversals between the 
network stack and device drivers tend to occur as a result of the device 
driver calling into the network stack while holding the device driver 
mutex.  Someone (tm) should work out if the right order is route locks -> 
device driver locks, as it's likely a common calss of bugs across many 
drivers.

Robert N M Watson

> KDB: stack backtrace:
> kdb_backtrace(c07dcab1,c15c94b0,c160a1b0,c07c54d7,c07f401e) at kdb_backtrace+0x2e
> witness_checkorder(c15c94b0,9,c07f401e,5ab,c07e32bd) at witness_checkorder+0x6c3
> _mtx_lock_flags(c15c94b0,0,c07f401e,5ab,c152cc00) at _mtx_lock_flags+0x8a
> rl_start(c152cc00,1,c07e2eae,836) at rl_start+0x37
> if_start(c152cc00,0,c07e32bd,195,202) at if_start+0x99
> ether_output_frame(c152cc00,c169c100,6,c0562c28,c169c100)
> 	 at ether_output_frame+0x218
> ether_output(c152cc00,c169c100,cbfe79f0,0,2,c1740001,2302,c07e66e8,1bd,519)
> 	at ether_output+0x47e
> arprequest(c152cc00,c16cfcc8,cbfe7ae4,c15fa6ab,c05998a6) at arprequest+0x109
> arpresolve(c152cc00,c1749084,c169a400,cbfe7ae0,cbfe7a64) at arpresolve+0x32d
> ether_output(c152cc00,c169a400,cbfe7ae0,c1749084,0) at ether_output+0x7b
> ip_output(c169a400,0,cbfe7adc,0,0) at ip_output+0xb7a
>
> and am seeing the following in my newly locked ed driver:
>
> lock order reversal
> 1st 0xc1cb3588 rtentry (rtentry) _at_ net/route.c:1269
> 2nd 0xc1fd3420 ed1 (network driver) _at_ /dell/imp/p4/newcard/src/sys/modules/ed/../../dev/ed/if_ed.c:697
> KDB: stack backtrace:
> kdb_backtrace(0,ffffffff,c0680950,c067f5a0,c064bd44) at kdb_backtrace+0x29
> witness_checkorder(c1fd3420,9,c201ff8b,2b9) at witness_checkorder+0x52c
> _mtx_lock_flags(c1fd3420,0,c201ff8b,2b9,c1a86c00) at _mtx_lock_flags+0x5b
> ed_start(c1a86c00) at ed_start+0x1f
> if_start(c1a86c00) at if_start+0x7b
> ether_output_frame(c1a86c00,c1bbeb00,c04c0920,ffffffff,0) at ether_output_frame+0x1dc
> ether_output(c1a86c00,c1bbeb00,e5832a38,0,2) at ether_output+0x3e4
> arprequest(c1a86c00,c1d77ac8,e5832b08,c20236ab) at arprequest+0xd8
> arpresolve(c1a86c00,c1cb3528,c1bbed00,e5832b04,e5832aa8) at arpresolve+0x30b
> ether_output(c1a86c00,c1bbed00,e5832b04,c1cb3528,c1d77a00) at ether_output+0x6b
> ip_output(c1bbed00,0,e5832b00,0,0) at ip_output+0x78c
> udp_output(c1cb1168,c1bbed00,0,0,c1a8d600) at udp_output+0x4a7
> udp_send(c1d59c84,0,c1bbed00,0,0) at udp_send+0x1a
> sosend(c1d59c84,0,e5832c3c,c1bbed00,0) at sosend+0x5e3
> kern_sendit(c1a8d600,4,e5832cbc,0,0) at kern_sendit+0x104
> sendit(c1a8d600,4,e5832cbc,0,807a023) at sendit+0x163
> sendto(c1a8d600,e5832d04,6,0,206) at sendto+0x4d
> syscall(3b,3b,3b,805a000,28219fa4) at syscall+0x22f
>
> and was wondering if there's a common cause.
>
> Warner
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>
Received on Sat Aug 27 2005 - 15:20:26 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:42 UTC