diff mbox

[3/3] ath9k: move workqueue cancels to stop callback

Message ID 1248720784-15671-4-git-send-email-lrodriguez@atheros.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Luis Rodriguez July 27, 2009, 6:53 p.m. UTC
We should be cancelling our work at the stop callback since
we are borrowing the mac80211 workqueue for our work. As it
stands mac80211 expects this for suspend purposes.

The ath9k specific virtual wiphy stuff need only be
cancelled only when the we have no secondary virtual wiphys.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 drivers/net/wireless/ath/ath9k/main.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

Comments

Johannes Berg July 27, 2009, 7:10 p.m. UTC | #1
On Mon, 2009-07-27 at 11:53 -0700, Luis R. Rodriguez wrote:
> We should be cancelling our work at the stop callback since
> we are borrowing the mac80211 workqueue for our work. As it
> stands mac80211 expects this for suspend purposes.
> 
> The ath9k specific virtual wiphy stuff need only be
> cancelled only when the we have no secondary virtual wiphys.

inverted logic here?

johannes
Luis Rodriguez July 27, 2009, 7:18 p.m. UTC | #2
On Mon, Jul 27, 2009 at 12:10 PM, Johannes
Berg<johannes@sipsolutions.net> wrote:
> On Mon, 2009-07-27 at 11:53 -0700, Luis R. Rodriguez wrote:
>> We should be cancelling our work at the stop callback since
>> we are borrowing the mac80211 workqueue for our work. As it
>> stands mac80211 expects this for suspend purposes.
>>
>> The ath9k specific virtual wiphy stuff need only be
>> cancelled only when the we have no secondary virtual wiphys.
>
> inverted logic here?

Nope, ie the sc->num_sec_wiphy wil be decremented on device removal.
As long as there is some secondary wiphy it means we need our internal
scheduler working and work is being queued. So upon suspend we'll
iterate over all interfaces and remove them unless you have WoW
enabled (eventually), the last interface drv_stop() then would ensure
to clear the virtual scheduler work.

  Luis
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index dbd5cfd..50d99d7 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1252,11 +1252,6 @@  void ath_detach(struct ath_softc *sc)
 
 	DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
 
-	cancel_delayed_work_sync(&sc->ath_led_blink_work);
-	cancel_delayed_work_sync(&sc->tx_complete_work);
-	cancel_delayed_work_sync(&sc->wiphy_work);
-	cancel_work_sync(&sc->chan_work);
-
 	ath_deinit_leds(sc);
 
 	for (i = 0; i < sc->num_sec_wiphy; i++) {
@@ -2092,6 +2087,14 @@  static void ath9k_stop(struct ieee80211_hw *hw)
 
 	aphy->state = ATH_WIPHY_INACTIVE;
 
+	cancel_delayed_work_sync(&sc->ath_led_blink_work);
+	cancel_delayed_work_sync(&sc->tx_complete_work);
+
+	if (!sc->num_sec_wiphy) {
+		cancel_delayed_work_sync(&sc->wiphy_work);
+		cancel_work_sync(&sc->chan_work);
+	}
+
 	if (sc->sc_flags & SC_OP_INVALID) {
 		DPRINTF(sc, ATH_DBG_ANY, "Device not present\n");
 		return;