kern/94196: [dc] if_dc panics on bad hardware
John Hood
cgull at glup.org
Tue Mar 7 14:50:05 PST 2006
>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 at 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:
More information about the freebsd-bugs
mailing list