RE: Witness panic (fxp/polling related)

From: Robin P. Blanchard <Robin.Blanchard_at_gactr.uga.edu>
Date: Fri, 11 Jul 2003 09:50:55 -0400
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
_at__at_ -1550,8 +1550,8 _at__at_
        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 _at_ 
> > /usr/src/sys/dev/fxp/if_fxp. c:1502
> > first acquired _at_ /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/
> 
Received on Fri Jul 11 2003 - 04:50:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:14 UTC