From owner-freebsd-current@FreeBSD.ORG Thu Dec 1 16:57:37 2011 Return-Path: Delivered-To: current@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 05BE41065689; Thu, 1 Dec 2011 16:57:37 +0000 (UTC) (envelope-from luigi@onelab2.iet.unipi.it) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.59.238]) by mx1.freebsd.org (Postfix) with ESMTP id 754A28FC15; Thu, 1 Dec 2011 16:57:36 +0000 (UTC) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id D35697300A; Thu, 1 Dec 2011 17:54:44 +0100 (CET) Date: Thu, 1 Dec 2011 17:54:44 +0100 From: Luigi Rizzo To: Rene Ladan Message-ID: <20111201165444.GA97698@onelab2.iet.unipi.it> References: <4ED7A0D8.90801@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4ED7A0D8.90801@freebsd.org> User-Agent: Mutt/1.4.2.3i Cc: current@FreeBSD.ORG Subject: Re: lock order reversals with netmap X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Dec 2011 16:57:37 -0000 On Thu, Dec 01, 2011 at 04:44:24PM +0100, Rene Ladan wrote: > Hi, > > on FreeBSD 10.0-CURRENT #7 r228176M: Thu Dec 1 13:56:02 CET 2011 > (GENERIC + CAPABILITIES + netmap with head.diff and bge patches applied) > I get these lock order reversals when running a netmap-enabled program > (details in the attachment) with syscall (54, FreeBSD ELF64, sys_ioctl): Rene, thanks for the report. As i mentioned earlier to Rene, the 'bge' driver is neither complete nor tested so i am even surprised that it does not crash right away. I'll keep his report in mind when we will complete the support for bge. BTW is someone is familiar with the architecture of the 'bge' NICs please can she/he contact me. I am unclear on why there are two lists of rx buffers (std and jumbo) and one ring -- perhaps the NIC first receives the frame in its fifo and then decides which type of buffer to use to store it ? cheers luigi > Dec 1 16:23:09 acer kernel: exclusive sleep mutex netmap memory > allocator lock (netmap memory allocator lock) r = 0 (0xfffffe00027d1880) > locked @ /usr/src/sys/dev/netmap/netmap.c:1484 > > Dec 1 16:23:09 acer kernel: exclusive sleep mutex bge0 (network driver) > r = 0 (0xffffff8000768010) locked @ > /usr/src/sys/dev/netmap/if_bge_netmap.h:60 > > The application does not invoke the offending function (netmap_malloc()) > itself. > > Regards, > Ren? > -- > http://www.rene-ladan.nl:8080/ > > GPG fingerprint = ADBC ECCD EB5F A6B4 549F 600D 8C9E 647A E564 2BFC > (subkeys.pgp.net) > Dec 1 15:41:20 acer kernel: FreeBSD 10.0-CURRENT #7 r228176M: Thu Dec 1 13:56:02 CET 2011 > Dec 1 15:41:20 acer kernel: real memory = 4294967296 (4096 MB) > Dec 1 15:41:20 acer kernel: avail memory = 4080091136 (3891 MB) > Dec 1 15:41:20 acer kernel: 001.000005 netmap_memory_init [1627] netmap_buffer_base 0xffffff8117eaa000 (offset 679936) > Dec 1 15:41:20 acer kernel: 001.000006 netmap_memory_init [1636] Have 129 MB, use 661KB for rings, 65862 buffers at 0xffffff8117eaa000 > Dec 1 15:41:20 acer kernel: netmap: loaded module with 129 Mbytes > Dec 1 15:41:20 acer kernel: bge0: mem 0xf5100000-0xf510ffff irq 16 at device 0.0 on pci2 > Dec 1 15:41:20 acer kernel: bge0: CHIP ID 0x05784100; ASIC REV 0x5784; CHIP REV 0x57841; PCI-E > Dec 1 15:41:20 acer kernel: miibus0: on bge0 > Dec 1 15:41:20 acer kernel: brgphy0: PHY 1 on miibus0 > Dec 1 15:41:20 acer kernel: brgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto, auto-flow > Dec 1 15:41:20 acer kernel: bge0: Ethernet address: 00:26:2d:5e:d8:ee > Dec 1 15:41:20 acer kernel: 001.000009 netmap_attach [1243] ok for bge0 > Dec 1 16:23:09 acer kernel: 989.882634 netmap_set_ringid [779] ringid bge0 set to SW RING > Dec 1 16:23:09 acer kernel: uma_zalloc_arg: zone "64" with the following non-sleepable locks held: > Dec 1 16:23:09 acer kernel: exclusive sleep mutex netmap memory allocator lock (netmap memory allocator lock) r = 0 (0xfffffe00027d1880) locked @ /usr/src/sys/dev/netmap/netmap.c:1484 > Dec 1 16:23:09 acer kernel: exclusive sleep mutex bge0 (network driver) r = 0 (0xffffff8000768010) locked @ /usr/src/sys/dev/netmap/if_bge_netmap.h:60 > Dec 1 16:23:09 acer kernel: KDB: stack backtrace: > Dec 1 16:23:09 acer kernel: db_trace_self_wrapper() at db_trace_self_wrapper+0x2a > Dec 1 16:23:10 acer kernel: kdb_backtrace() at kdb_backtrace+0x37 > Dec 1 16:23:10 acer kernel: _witness_debugger() at _witness_debugger+0x2c > Dec 1 16:23:10 acer kernel: witness_warn() at witness_warn+0x2c2 > Dec 1 16:23:10 acer kernel: uma_zalloc_arg() at uma_zalloc_arg+0x335 > Dec 1 16:23:10 acer kernel: malloc() at malloc+0xbe > Dec 1 16:23:10 acer kernel: netmap_malloc() at netmap_malloc+0x86 > Dec 1 16:23:10 acer kernel: netmap_ioctl() at netmap_ioctl+0x5bd > Dec 1 16:23:10 acer kernel: devfs_ioctl_f() at devfs_ioctl_f+0x7a > Dec 1 16:23:10 acer kernel: kern_ioctl() at kern_ioctl+0xcd > Dec 1 16:23:10 acer kernel: sys_ioctl() at sys_ioctl+0xfd > Dec 1 16:23:10 acer kernel: amd64_syscall() at amd64_syscall+0x3ac > Dec 1 16:23:10 acer kernel: Xfast_syscall() at Xfast_syscall+0xf7 > Dec 1 16:23:10 acer kernel: --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x8022aef0c, rsp = 0x7fffffffd4b8, rbp = 0x802bfb100 --- > Dec 1 16:23:10 acer kernel: uma_zalloc_arg: zone "64" with the following non-sleepable locks held: > Dec 1 16:23:10 acer kernel: exclusive sleep mutex netmap memory allocator lock (netmap memory allocator lock) r = 0 (0xfffffe00027d1880) locked @ /usr/src/sys/dev/netmap/netmap.c:1484 > Dec 1 16:23:10 acer kernel: exclusive sleep mutex bge0 (network driver) r = 0 (0xffffff8000768010) locked @ /usr/src/sys/dev/netmap/if_bge_netmap.h:60 > Dec 1 16:23:10 acer kernel: KDB: stack backtrace: > Dec 1 16:23:10 acer kernel: db_trace_self_wrapper() at db_trace_self_wrapper+0x2a > Dec 1 16:23:10 acer kernel: kdb_backtrace() at kdb_backtrace+0x37 > Dec 1 16:23:10 acer kernel: _witness_debugger() at _witness_debugger+0x2c > Dec 1 16:23:10 acer kernel: witness_warn() at witness_warn+0x2c2 > Dec 1 16:23:10 acer kernel: uma_zalloc_arg() at uma_zalloc_arg+0x335 > Dec 1 16:23:10 acer kernel: malloc() at malloc+0xbe > Dec 1 16:23:10 acer kernel: netmap_malloc() at netmap_malloc+0x86 > Dec 1 16:23:10 acer kernel: netmap_ioctl() at netmap_ioctl+0x817 > Dec 1 16:23:10 acer kernel: devfs_ioctl_f() at devfs_ioctl_f+0x7a > Dec 1 16:23:10 acer kernel: kern_ioctl() at kern_ioctl+0xcd > Dec 1 16:23:10 acer kernel: sys_ioctl() at sys_ioctl+0xfd > Dec 1 16:23:10 acer kernel: amd64_syscall() at amd64_syscall+0x3ac > Dec 1 16:23:10 acer kernel: Xfast_syscall() at Xfast_syscall+0xf7 > Dec 1 16:23:10 acer kernel: --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x8022aef0c, rsp = 0x7fffffffd4b8, rbp = 0x802bfb100 --- > Dec 1 16:23:10 acer kernel: 990.041760 netmap_reset [1403] +++ NR_REINIT ok on bge0 RX[0] > Dec 1 16:23:10 acer kernel: 990.041948 netmap_reset [1384] +++ NR_REINIT ok on bge0 TX[0] > Dec 1 16:23:10 acer kernel: bge0: link state changed to DOWN > Dec 1 16:23:10 acer kernel: 990.051589 netmap_dtor [352] deleting last netmap instance for bge0 > Dec 1 16:23:12 acer kernel: bge0: link state changed to UP