Date: Sun, 15 Mar 2015 14:35:23 -0700 From: Adrian Chadd <adrian@freebsd.org> To: "src-committers@freebsd.org" <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org> Subject: Re: svn commit: r280120 - head/sys/dev/wpi Message-ID: <CAJ-Vmomu68aT0fveRvkUKW-DeMdsBpLCP0tH%2B3NPySCuyK3oTQ@mail.gmail.com> In-Reply-To: <201503152132.t2FLWBaw095774@svn.freebsd.org> References: <201503152132.t2FLWBaw095774@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
.. promise I'm done for now. (God, it'd be nice to use git, or some web ui that lets me batch review and commit things like this.) -a On 15 March 2015 at 14:32, Adrian Chadd <adrian@freebsd.org> wrote: > Author: adrian > Date: Sun Mar 15 21:32:11 2015 > New Revision: 280120 > URL: https://svnweb.freebsd.org/changeset/base/280120 > > Log: > Add a new taskqueue (device specific, not net80211 ic->tq); use it for > device restart. > > (Committers note - once scan overhaul and a few other things have been > fixed in net80211 to not block things in the taskqueue, this can disappear > and the device specific taskqueues in other drivers can also go away.) > > PR: kern/197143 > Submitted by: Andriy Voskoboinyk <s3erios@gmail.com> > > Modified: > head/sys/dev/wpi/if_wpi.c > head/sys/dev/wpi/if_wpivar.h > > Modified: head/sys/dev/wpi/if_wpi.c > ============================================================================== > --- head/sys/dev/wpi/if_wpi.c Sun Mar 15 21:30:20 2015 (r280119) > +++ head/sys/dev/wpi/if_wpi.c Sun Mar 15 21:32:11 2015 (r280120) > @@ -532,6 +532,14 @@ wpi_attach(device_t dev) > TASK_INIT(&sc->sc_radioon_task, 0, wpi_radio_on, sc); > TASK_INIT(&sc->sc_start_task, 0, wpi_start_task, sc); > > + sc->sc_tq = taskqueue_create("wpi_taskq", M_WAITOK, > + taskqueue_thread_enqueue, &sc->sc_tq); > + error = taskqueue_start_threads(&sc->sc_tq, 1, 0, "wpi_taskq"); > + if (error != 0) { > + device_printf(dev, "can't start threads, error %d\n", error); > + goto fail; > + } > + > wpi_sysctlattach(sc); > > /* > @@ -688,6 +696,9 @@ wpi_detach(device_t dev) > > wpi_stop(sc); > > + taskqueue_drain_all(sc->sc_tq); > + taskqueue_free(sc->sc_tq); > + > callout_drain(&sc->watchdog_rfkill); > callout_drain(&sc->tx_timeout); > callout_drain(&sc->scan_timeout); > @@ -2387,8 +2398,6 @@ wpi_intr(void *arg) > WPI_WRITE(sc, WPI_FH_INT, r2); > > if (r1 & (WPI_INT_SW_ERR | WPI_INT_HW_ERR)) { > - struct ieee80211com *ic = ifp->if_l2com; > - > device_printf(sc->sc_dev, "fatal firmware error\n"); > #ifdef WPI_DEBUG > wpi_debug_registers(sc); > @@ -2397,7 +2406,7 @@ wpi_intr(void *arg) > DPRINTF(sc, WPI_DEBUG_HW, > "(%s)\n", (r1 & WPI_INT_SW_ERR) ? "(Software Error)" : > "(Hardware Error)"); > - ieee80211_runtask(ic, &sc->sc_reinittask); > + taskqueue_enqueue(sc->sc_tq, &sc->sc_reinittask); > goto end; > } > > @@ -2950,10 +2959,9 @@ wpi_scan_timeout(void *arg) > { > struct wpi_softc *sc = arg; > struct ifnet *ifp = sc->sc_ifp; > - struct ieee80211com *ic = ifp->if_l2com; > > if_printf(ifp, "scan timeout\n"); > - ieee80211_runtask(ic, &sc->sc_reinittask); > + taskqueue_enqueue(sc->sc_tq, &sc->sc_reinittask); > } > > static void > @@ -2961,11 +2969,10 @@ wpi_tx_timeout(void *arg) > { > struct wpi_softc *sc = arg; > struct ifnet *ifp = sc->sc_ifp; > - struct ieee80211com *ic = ifp->if_l2com; > > if_printf(ifp, "device timeout\n"); > if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); > - ieee80211_runtask(ic, &sc->sc_reinittask); > + taskqueue_enqueue(sc->sc_tq, &sc->sc_reinittask); > } > > static int > > Modified: head/sys/dev/wpi/if_wpivar.h > ============================================================================== > --- head/sys/dev/wpi/if_wpivar.h Sun Mar 15 21:30:20 2015 (r280119) > +++ head/sys/dev/wpi/if_wpivar.h Sun Mar 15 21:32:11 2015 (r280120) > @@ -228,6 +228,9 @@ struct wpi_softc { > struct task sc_radioon_task; > struct task sc_start_task; > > + /* Taskqueue */ > + struct taskqueue *sc_tq; > + > /* Eeprom info. */ > uint8_t cap; > uint16_t rev; >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmomu68aT0fveRvkUKW-DeMdsBpLCP0tH%2B3NPySCuyK3oTQ>