]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/mac80211/mlme.c
mac80211: redefine usage of the mac80211 workqueue
[karo-tx-linux.git] / net / mac80211 / mlme.c
index ee83125ed179200c3eb45c60488612056679710f..0779ba150b267c8788540bb00be47eaee39fee04 100644 (file)
@@ -565,7 +565,7 @@ static void ieee80211_chswitch_timer(unsigned long data)
                return;
        }
 
-       queue_work(sdata->local->hw.workqueue, &ifmgd->chswitch_work);
+       ieee80211_queue_work(&sdata->local->hw, &ifmgd->chswitch_work);
 }
 
 void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
@@ -597,7 +597,7 @@ void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
        sdata->local->csa_channel = new_ch;
 
        if (sw_elem->count <= 1) {
-               queue_work(sdata->local->hw.workqueue, &ifmgd->chswitch_work);
+               ieee80211_queue_work(&sdata->local->hw, &ifmgd->chswitch_work);
        } else {
                ieee80211_stop_queues_by_reason(&sdata->local->hw,
                                        IEEE80211_QUEUE_STOP_REASON_CSA);
@@ -763,7 +763,7 @@ void ieee80211_dynamic_ps_timer(unsigned long data)
        if (local->quiescing || local->suspended)
                return;
 
-       queue_work(local->hw.workqueue, &local->dynamic_ps_enable_work);
+       ieee80211_queue_work(&local->hw, &local->dynamic_ps_enable_work);
 }
 
 /* MLME */
@@ -950,7 +950,7 @@ ieee80211_direct_probe(struct ieee80211_sub_if_data *sdata,
                 * due to work needing to be done. Hence, queue the STAs work
                 * again for that.
                 */
-               queue_work(local->hw.workqueue, &ifmgd->work);
+               ieee80211_queue_work(&local->hw, &ifmgd->work);
                return RX_MGMT_CFG80211_AUTH_TO;
        }
 
@@ -995,7 +995,7 @@ ieee80211_authenticate(struct ieee80211_sub_if_data *sdata,
                 * due to work needing to be done. Hence, queue the STAs work
                 * again for that.
                 */
-               queue_work(local->hw.workqueue, &ifmgd->work);
+               ieee80211_queue_work(&local->hw, &ifmgd->work);
                return RX_MGMT_CFG80211_AUTH_TO;
        }
 
@@ -1124,7 +1124,7 @@ ieee80211_associate(struct ieee80211_sub_if_data *sdata,
                 * due to work needing to be done. Hence, queue the STAs work
                 * again for that.
                 */
-               queue_work(local->hw.workqueue, &ifmgd->work);
+               ieee80211_queue_work(&local->hw, &ifmgd->work);
                return RX_MGMT_CFG80211_ASSOC_TO;
        }
 
@@ -1232,8 +1232,7 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif)
 {
        struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
 
-       queue_work(sdata->local->hw.workqueue,
-                  &sdata->u.mgd.beacon_loss_work);
+       ieee80211_queue_work(&sdata->local->hw, &sdata->u.mgd.beacon_loss_work);
 }
 EXPORT_SYMBOL(ieee80211_beacon_loss);
 
@@ -1888,7 +1887,7 @@ ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata,
        case IEEE80211_STYPE_DISASSOC:
        case IEEE80211_STYPE_ACTION:
                skb_queue_tail(&sdata->u.mgd.skb_queue, skb);
-               queue_work(local->hw.workqueue, &sdata->u.mgd.work);
+               ieee80211_queue_work(&local->hw, &sdata->u.mgd.work);
                return RX_QUEUED;
        }
 
@@ -2026,7 +2025,7 @@ static void ieee80211_sta_timer(unsigned long data)
                return;
        }
 
-       queue_work(local->hw.workqueue, &ifmgd->work);
+       ieee80211_queue_work(&local->hw, &ifmgd->work);
 }
 
 static void ieee80211_sta_work(struct work_struct *work)
@@ -2051,13 +2050,11 @@ static void ieee80211_sta_work(struct work_struct *work)
                return;
 
        /*
-        * Nothing should have been stuffed into the workqueue during
-        * the suspend->resume cycle. If this WARN is seen then there
-        * is a bug with either the driver suspend or something in
-        * mac80211 stuffing into the workqueue which we haven't yet
-        * cleared during mac80211's suspend cycle.
+        * ieee80211_queue_work() should have picked up most cases,
+        * here we'll pick the the rest.
         */
-       if (WARN_ON(local->suspended))
+       if (WARN(local->suspended, "STA MLME work scheduled while "
+                "going to suspend\n"))
                return;
 
        ifmgd = &sdata->u.mgd;
@@ -2113,9 +2110,9 @@ static void ieee80211_sta_work(struct work_struct *work)
                mutex_unlock(&ifmgd->mtx);
 
                if (test_and_clear_bit(IEEE80211_STA_REQ_SCAN, &ifmgd->request))
-                       queue_delayed_work(local->hw.workqueue,
-                                          &local->scan_work,
-                                          round_jiffies_relative(0));
+                       ieee80211_queue_delayed_work(&local->hw,
+                                                    &local->scan_work,
+                                                    round_jiffies_relative(0));
                return;
        }
 
@@ -2196,8 +2193,7 @@ static void ieee80211_sta_bcn_mon_timer(unsigned long data)
        if (local->quiescing)
                return;
 
-       queue_work(sdata->local->hw.workqueue,
-                  &sdata->u.mgd.beacon_loss_work);
+       ieee80211_queue_work(&sdata->local->hw, &sdata->u.mgd.beacon_loss_work);
 }
 
 static void ieee80211_sta_conn_mon_timer(unsigned long data)
@@ -2210,7 +2206,7 @@ static void ieee80211_sta_conn_mon_timer(unsigned long data)
        if (local->quiescing)
                return;
 
-       queue_work(local->hw.workqueue, &ifmgd->monitor_work);
+       ieee80211_queue_work(&local->hw, &ifmgd->monitor_work);
 }
 
 static void ieee80211_sta_monitor_work(struct work_struct *work)
@@ -2229,10 +2225,10 @@ static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
                                        IEEE80211_STA_CONNECTION_POLL);
 
                /* let's probe the connection once */
-               queue_work(sdata->local->hw.workqueue,
+               ieee80211_queue_work(&sdata->local->hw,
                           &sdata->u.mgd.monitor_work);
                /* and do all the other regular work too */
-               queue_work(sdata->local->hw.workqueue,
+               ieee80211_queue_work(&sdata->local->hw,
                           &sdata->u.mgd.work);
        }
 }
@@ -2393,7 +2389,7 @@ int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
        list_add(&wk->list, &sdata->u.mgd.work_list);
        mutex_unlock(&ifmgd->mtx);
 
-       queue_work(sdata->local->hw.workqueue, &sdata->u.mgd.work);
+       ieee80211_queue_work(&sdata->local->hw, &sdata->u.mgd.work);
        return 0;
 }
 
@@ -2467,7 +2463,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
        else
                ifmgd->flags &= ~IEEE80211_STA_CONTROL_PORT;
 
-       queue_work(sdata->local->hw.workqueue, &sdata->u.mgd.work);
+       ieee80211_queue_work(&sdata->local->hw, &sdata->u.mgd.work);
 
        err = 0;