if_iwm - Stop iwm_watchdog callout when idle.
authorImre Vadász <imre@vdsz.com>
Thu, 24 May 2018 21:05:10 +0000 (23:05 +0200)
committerImre Vadász <imre@vdsz.com>
Thu, 20 Sep 2018 14:08:35 +0000 (16:08 +0200)
sys/dev/netif/iwm/if_iwm.c

index c0cdfe1..f3e78bf 100644 (file)
@@ -3849,6 +3849,8 @@ iwm_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
        } else {
                error = iwm_tx(sc, m, ni, 0);
        }
+       if (sc->sc_tx_timer == 0)
+               callout_reset(&sc->sc_watchdog_to, hz, iwm_watchdog, sc);
        sc->sc_tx_timer = 5;
        IWM_UNLOCK(sc);
 
@@ -4777,7 +4779,6 @@ iwm_init(struct iwm_softc *sc)
         * Ok, firmware loaded and we are jogging
         */
        sc->sc_flags |= IWM_FLAG_HW_INITED;
-       callout_reset(&sc->sc_watchdog_to, hz, iwm_watchdog, sc);
 }
 
 static int
@@ -4823,6 +4824,10 @@ iwm_start(struct iwm_softc *sc)
                        ieee80211_free_node(ni);
                        continue;
                }
+               if (sc->sc_tx_timer == 0) {
+                       callout_reset(&sc->sc_watchdog_to, hz, iwm_watchdog,
+                           sc);
+               }
                sc->sc_tx_timer = 15;
        }
        IWM_DPRINTF(sc, IWM_DEBUG_XMIT | IWM_DEBUG_TRACE, "<-%s\n", __func__);
@@ -4860,8 +4865,8 @@ iwm_watchdog(void *arg)
 #endif
                        return;
                }
+               callout_reset(&sc->sc_watchdog_to, hz, iwm_watchdog, sc);
        }
-       callout_reset(&sc->sc_watchdog_to, hz, iwm_watchdog, sc);
 }
 
 static void