On 10/09/15(Thu) 08:46, Mike Larkin wrote:
> On Thu, Sep 10, 2015 at 08:17:39AM -0500, Aaron Poffenberger wrote:
> > On 09/10/15 03:59, Stefan Sperling wrote:
> > >On Wed, Sep 09, 2015 at 09:43:44PM -0500, Aaron Poffenberger wrote:
> > >>Occasional problems with loading firmware for urtwn as seen near the end 
> > >>of
> > >>this dmesg:
> > >>  urtwn0: could not load firmware page 1
> > >>
> > >>I've also seen the same message for page 0.
> > >
> > >Interesting. I don't think I've seen this before. How often does it occur?
> > >Can you please apply the following patch and show us what it prints now?
> > >
> > >Index: if_urtwn.c
> > >===================================================================
> > >RCS file: /cvs/src/sys/dev/usb/if_urtwn.c,v
> > >retrieving revision 1.50
> > >diff -u -p -r1.50 if_urtwn.c
> > >--- if_urtwn.c     24 Aug 2015 04:07:38 -0000      1.50
> > >+++ if_urtwn.c     10 Sep 2015 08:49:45 -0000
> > >@@ -2575,8 +2575,8 @@ urtwn_load_firmware(struct urtwn_softc *
> > >           mlen = MIN(len, R92C_FW_PAGE_SIZE);
> > >           error = urtwn_fw_loadpage(sc, page, ptr, mlen);
> > >           if (error != 0) {
> > >-                  printf("%s: could not load firmware page %d\n",
> > >-                      sc->sc_dev.dv_xname, page);
> > >+                  printf("%s: could not load firmware page %d "
> > >+                      "(error %d)\n", sc->sc_dev.dv_xname, page, error);
> > >                   goto fail;
> > >           }
> > >           ptr += mlen;
> > >
> > 
> > It usually happens after suspend/resume. Not after every resume but usually
> > after the second or third.
> > 
> > The dmesg I sent was the first time I saw it at boot.
> > 
> > I'm setting up source on this system. I'll try the patch as soon as all the
> > bits are in place.
> > 
> 
> Is firmware trying to be loaded during DVACT_RESUME by mistake?
> 
> I looked (quickly) but couldn't tell since we usually don't have _activate(..)
> functions for USB (since we detach and reattach on suspend/resume).
> 
> Firmware should be loaded during DVACT_WAKEUP, not DVACT_RESUME. When do we
> do the USB bus explore? during _WAKEUP or _RESUME?

USB bus explore is done by a specific thread, the usb task thread
(usbtask).  During DVACT_RESUME an explore task is schedule, which
means the usb task thread is ``wakeup(9)''.

Since preemption is re-enabled before DVACT_WAKEUP runs, this
thread might end up running before DVACT_WAKEUP, but I can't say
if it matters or not.  Does the diff below help?

I'd be interested to see *which* error the function is returning in
this case, especially if it's timeout related...

Index: usb.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb.c,v
retrieving revision 1.108
diff -u -p -r1.108 usb.c
--- usb.c       1 Sep 2015 10:00:26 -0000       1.108
+++ usb.c       10 Sep 2015 16:09:22 -0000
@@ -927,7 +927,7 @@ usb_activate(struct device *self, int ac
                if (sc->sc_bus->root_hub != NULL)
                        usb_detach_roothub(sc);
                break;
-       case DVACT_RESUME:
+       case DVACT_WAKEUP:
                sc->sc_bus->dying = 0;
 
                /*

Reply via email to