Date: Tue, 7 Mar 2006 17:39:21 -0500 (EST) From: John Hood <cgull@glup.org> To: FreeBSD-gnats-submit@FreeBSD.org Cc: John Hood <cgull@glup.org>, ni-bugs@sandstorm.net Subject: kern/94196: [dc] if_dc panics on bad hardware Message-ID: <200603072239.k27MdLeM065630@sirocco.sandstorm.net> Resent-Message-ID: <200603072250.k27Mo379068323@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 94196 >Category: kern >Synopsis: [dc] if_dc panics on bad hardware >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 07 22:50:02 GMT 2006 >Closed-Date: >Last-Modified: >Originator: john hood >Release: FreeBSD 6.0-RELEASE i386 >Organization: Sandstorm Enterprises >Environment: Software: FreeBSD (Sandstorm internal machine) 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Thu Nov 3 09:36:13 UTC 2005 root@x64.samsco.home:/usr/obj/usr/src/sys/GENERIC i386 Hardware: Intel D845EPT2 motherboard in a 2U box with a 3-slot riser card; the riser card has little paddleboards to pick off slot-geographic signals on 2 other motherboard slots (the motherboard is not designed for a riser card). A Netgear FA310TX ethercard and an Intel 82559-family card are installed on the riser. One of the little paddle boards is not fully seated... Software: 6.0-RELEASE install CD >Description: Kernel panics during boot when probing a misfunctioning Netgear FA310TX card. >How-To-Repeat: By examination, mostly. Unfortunately, the the problem went away when the paddleboard was reseated. Reproduce above hardware configuration, such that a card probed by the dc driver responds to PCI config-space reads/writes, but fails to operate normally when the driver tries to reset it. Boot 6.0 install CD, observe panic. Boot 5.3 install CD, observe dc printing a message, failing to attach, and the system otherwise continuing normally. Examine stack trace of debug kernel, note that the kernel has paniced with a null-pointer dereference under if_printf(sc->dc_ifp, "reset never completed!\n"); in dc_reset(), from dc_attach(). Alternately, one could alter dc_reset() so that it always calls if_printf() and boot the resulting kernel on any system with a dc-driven card. Sorry about the lack of a concrete report. If you have trouble understanding/reproducing the problem, I can generate a proper report with stack trace, but it should be fairly obvious on examination. >Fix: Make sure your hardware works... Looks like the bug was introduced with 1.163, where if_printf() was substituted for printf(). dc_attach() does not set sc->dc_ifp until after dc_reset() is called. Things need to be rearranged so dc_reset doesn't have this dependency or sc->dc_ifp is set before it's called. I haven't looked. but it's been suggested that this may be a problem in other drivers, if similar changes have been made. The original author (jhb) should review this problem. >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603072239.k27MdLeM065630>