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