Witness panic (fxp/polling related)
Robin P. Blanchard
Robin.Blanchard at gactr.uga.edu
Fri Jul 11 06:50:59 PDT 2003
Success !
# diff -u if_fxp.c.orig if_fxp.c
--- if_fxp.c.orig Sat Jul 5 11:23:44 2003
+++ if_fxp.c Fri Jul 11 09:35:54 2003
@@ -1550,8 +1550,8 @@
if (ether_poll_register(fxp_poll, ifp)) {
/* disable interrupts */
CSR_WRITE_1(sc, FXP_CSR_SCB_INTRCNTL, FXP_SCB_INTR_DISABLE);
- fxp_poll(ifp, 0, 1);
FXP_UNLOCK(sc);
+ fxp_poll(ifp, 0, 1);
return;
}
#endif
> -----Original Message-----
> From: John Baldwin [mailto:jhb at FreeBSD.org]
> Sent: Friday, July 11, 2003 9:13 AM
> To: Robin P. Blanchard
> Cc: njl at FreeBSD.org
> Subject: Re: Witness panic (fxp/polling related)
>
>
> On Friday 11 July 2003 08:50 am, you wrote:
> > Alright...Added WITNESS_DDB to the kernel. Here's (hopefully) more
> > useful info. Again, this is using sources dated yesterday morning.
> >
> > recursed on non-recursive lock (sleep mutex) fxp0 @
> > /usr/src/sys/dev/fxp/if_fxp. c:1502
> > first acquired @ /usr/src/sys/dev/fxp/if_fxp.c:1539
>
> This is perfect.
>
> if (ether_poll_register(fxp_poll, ifp)) {
> /* disable interrupts */
> CSR_WRITE_1(sc, FXP_CSR_SCB_INTRCNTL,
> FXP_SCB_INTR_DISABLE);
> fxp_poll(ifp, 0, 1);
> FXP_UNLOCK(sc);
> return;
>
> Try moving the FXP_UNLOCK() up before the call to fxp_poll()
> (it should be safe to do so).
>
> --
>
> John Baldwin <jhb at FreeBSD.org> <><
> http://www.FreeBSD.org/~jhb/ "Power Users Use > the Power to
> Serve!" - http://www.FreeBSD.org/
>
More information about the freebsd-current
mailing list