[panic] Race in IEEE802.11 layer towards device drivers

PseudoCylon moonlightakkiy at yahoo.ca
Wed Jul 21 09:27:41 UTC 2010


----- Original Message ----
> From: Hans Petter Selasky <hselasky at c2i.net>
> To: PseudoCylon <moonlightakkiy at yahoo.ca>
> Cc: freebsd-current at freebsd.org; Sam Leffler <sam at freebsd.org>; 
>freebsd-usb at freebsd.org
> Sent: Tue, July 20, 2010 4:46:34 AM
> Subject: Re: [panic] Race in IEEE802.11 layer towards device drivers
> 
> On Tuesday 20 July 2010 12:03:22 PseudoCylon wrote:
> > ----- Original  Message ----
> > 
> > > From: Hans Petter Selasky <hselasky at c2i.net>
> > > To: freebsd-current at freebsd.org
> >  > Cc: PseudoCylon <moonlightakkiy at yahoo.ca>; Sam  Leffler 
<sam at freebsd.org>;
> > >
> >  >freebsd-usb at freebsd.org
> >  >
> > > Sent: Mon, July 19, 2010 1:17:04 PM
> > > Subject: Re:  [panic] Race in IEEE802.11 layer towards device drivers
> > > 
> >  > Hi AK,
> > > 
> > > I've committed your patches to USB P4.  I've made some additional 
> > > patches.
> > > 
> > > Can  you check and verify everything?
> > > 
> > > http://p4web.freebsd.org/@@181189?ac=10
> > 
> > Hi
> > 
> > If we change sc->cmdq_run = RUN_CMDQ_ABORT,
> > 
> > --  begin excerpt --
> > 
> > 
> > @@ -4890,7 +4877,10 @@ run_stop(void  *arg)
> >  ifp->if_drv_flags &= ~(IFF_DRV_RUNNING |  IFF_DRV_OACTIVE);
> > 
> >  sc->ratectl_run =  RUN_RATECTL_OFF;
> > -sc->cmdq_run = RUN_CMDQ_ABORT;
> > +
> >  +RUN_CMDQ_LOCK(sc);
> > +sc->cmdq_run = sc->cmdq_key_set =  RUN_CMDQ_ABORT;
> > +RUN_CMDQ_UNLOCK(sc);
> > 
> > -- end excerpt  --
> > 
> > 
> > we also need to change this, otherwise key will be  cleared.
> 
> Ok.
> 
> Try to give the second mutex a different name, and  see how many warnings go 
> away.
> 
> --HPS
> 

Giving different name makes all of "duplicate lock" warnings away.

Here is the patch includes all changes

-- begin patch --

diff --git a/dev/usb/wlan/if_run.c b/dev/usb/wlan/if_run.c
index 017e4b0..da22077 100644
--- a/dev/usb/wlan/if_run.c
+++ b/dev/usb/wlan/if_run.c
@@ -549,7 +549,7 @@ run_attach(device_t self)
 mtx_init(&sc->sc_mtx, device_get_nameunit(sc->sc_dev),
     MTX_NETWORK_LOCK, MTX_DEF);
 mtx_init(&sc->sc_cmdq_mtx, device_get_nameunit(sc->sc_dev),
-    MTX_NETWORK_LOCK, MTX_DEF);
+    "command queue", MTX_DEF);
 
 iface_index = RT2860_IFACE_INDEX;
 
@@ -4670,8 +4670,6 @@ run_init_locked(struct run_softc *sc)
 if(ic->ic_nrunning > 1)
 return;
 
-run_stop(sc);
-
 for (ntries = 0; ntries < 100; ntries++) {
 if (run_read(sc, RT2860_ASIC_VER_ID, &tmp) != 0)
 goto fail;

-- end patch --




More information about the freebsd-current mailing list