From owner-freebsd-current@FreeBSD.ORG Tue May 15 02:27:40 2007 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 65C9116A406 for ; Tue, 15 May 2007 02:27:40 +0000 (UTC) (envelope-from davidch@broadcom.com) Received: from mms1.broadcom.com (mms1.broadcom.com [216.31.210.17]) by mx1.freebsd.org (Postfix) with ESMTP id 42FD113C44B for ; Tue, 15 May 2007 02:27:40 +0000 (UTC) (envelope-from davidch@broadcom.com) Received: from [10.10.64.154] by mms1.broadcom.com with ESMTP (Broadcom SMTP Relay (Email Firewall v6.3.1)); Mon, 14 May 2007 19:27:29 -0700 X-Server-Uuid: 6B5CFB92-F616-4477-B110-55F967A57302 Received: by mail-irva-10.broadcom.com (Postfix, from userid 47) id 3AE122AF; Mon, 14 May 2007 19:27:29 -0700 (PDT) Received: from mail-irva-8.broadcom.com (mail-irva-8 [10.10.64.221]) by mail-irva-10.broadcom.com (Postfix) with ESMTP id 27EE82AE for ; Mon, 14 May 2007 19:27:29 -0700 (PDT) Received: from mail-irva-12.broadcom.com (mail-irva-12.broadcom.com [10.10.64.146]) by mail-irva-8.broadcom.com (MOS 3.7.5a-GA) with ESMTP id FHH89142; Mon, 14 May 2007 19:27:28 -0700 (PDT) Received: from NT-IRVA-0750.brcm.ad.broadcom.com (nt-irva-0750 [10.8.194.64]) by mail-irva-12.broadcom.com (Postfix) with ESMTP id C21C969CA3 for ; Mon, 14 May 2007 19:27:28 -0700 (PDT) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Date: Mon, 14 May 2007 19:27:02 -0700 Message-ID: <09BFF2FA5EAB4A45B6655E151BBDD90303DE3A51@NT-IRVA-0750.brcm.ad.broadcom.com> Thread-Topic: Releasing MSI Resources in a Module Causes Kernel Panic on -CURRENT Thread-Index: AceWmIVJVLU/oWumSymKLdvkk0z9Mw== From: "David Christensen" To: freebsd-current@freebsd.org X-WSS-ID: 6A57C51B37029167643-01-01 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Subject: Releasing MSI Resources in a Module Causes Kernel Panic on -CURRENT 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: Tue, 15 May 2007 02:27:40 -0000 I'm working on the bce driver and loading/unloading it as a kernel module. =20 On an MSI capable 5708 controller I can load the module and pass traffic without a problem, but when I unload the driver I get the following panic: ------------------------------------------------------------------------ --- bce0: mem 0xfc000000-0xfdffffff irq 57 at device 0.0 on pci74 bce0: ASIC ID 0x57081020; Revision (B2); PCI-X 64-bit 133MHz bce0: Ethernet address: 00:10:18:15:f6:c2 bce0: [ITHREAD] miibus0: on bce0 brgphy0: PHY 1 on miibus0 brgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto brgphy0: detached miibus0: detached bce0: Removing interrupt handler. bce0: Releasing IRQ. panic: resource_list_release: resource entry is not busy cpuid =3D 7 KDB: enter: panic [thread pid 806 tid 100182 ] Stopped at kdb_enter+0x31: leave db> bt Tracing pid 806 tid 100182 td 0xffffff0208a1bd20 kdb_enter() at kdb_enter+0x31 panic() at panic+0x1e3 resource_list_release() at resource_list_release+0xd8 bus_generic_rl_release_resource() at bus_generic_rl_release_resource+0x86 bus_release_resource() at bus_release_resource+0x75 bce_release_resources() at bce_release_resources+0xe3 bce_detach() at bce_detach+0xce device_detach() at device_detach+0x68 devclass_delete_driver() at devclass_delete_driver+0xb7 driver_module_handler() at driver_module_handler+0xec module_unload() at module_unload+0xa0 linker_file_unload() at linker_file_unload+0xdb kern_kldunload() at kern_kldunload+0xce kldunloadf() at kldunloadf+0x19 syscall() at syscall+0x38c Xfast_syscall() at Xfast_syscall+0xab --- syscall (444, FreeBSD ELF64, kldunloadf), rip =3D 0x80068d4cc, rsp = =3D 0x7fffffffe738, rbp =3D 0x2 --- db>=20 ------------------------------------------------------------------------ --- Looking at other MSI capable drivers I see they are releasing the interrupt in the same way that I am so why am I getting the panic? I see where the panic comes from (http://fxr.watson.org/fxr/source/kern/subr_bus.c#L2751) but I don't quite understand what didn't get set. Here's the allocation: /* Allocate PCI IRQ resources. */ count =3D pci_msi_count(dev); if (count =3D=3D 1 && pci_alloc_msi(dev, &count) =3D=3D 0) { rid =3D 1; sc->bce_flags |=3D BCE_USING_MSI_FLAG; DBPRINT(sc, BCE_INFO_RESET, "Allocating MSI interrupt.\n"); } else rid =3D 0; sc->bce_res_irq =3D bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE); And here the de-allocation: if (sc->bce_res_irq !=3D NULL) { DBPRINT(sc, BCE_WARN_RESET, "Releasing IRQ.\n"); bus_release_resource(dev, SYS_RES_IRQ, sc->bce_flags & BCE_USING_MSI_FLAG ? 1 : 0,=20 sc->bce_res_irq); } if (sc->bce_flags & BCE_USING_MSI_FLAG) { DBPRINT(sc, BCE_WARN_RESET, "Releasing MSI vector.\n"); pci_release_msi(dev); } What is going wrong?=20 David Christensen