Loading drivers/net/wireless/ath/ath9k/main.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1555,6 +1555,8 @@ void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_MESH_POINT); BIT(NL80211_IFTYPE_MESH_POINT); hw->wiphy->ps_default = false; hw->queues = 4; hw->queues = 4; hw->max_rates = 4; hw->max_rates = 4; hw->channel_change_time = 5000; hw->channel_change_time = 5000; Loading net/mac80211/agg-tx.c +8 −10 Original line number Original line Diff line number Diff line Loading @@ -173,12 +173,14 @@ static void sta_addba_resp_timer_expired(unsigned long data) /* check if the TID waits for addBA response */ /* check if the TID waits for addBA response */ spin_lock_bh(&sta->lock); spin_lock_bh(&sta->lock); if (!(*state & HT_ADDBA_REQUESTED_MSK)) { if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) != HT_ADDBA_REQUESTED_MSK) { spin_unlock_bh(&sta->lock); spin_unlock_bh(&sta->lock); *state = HT_AGG_STATE_IDLE; *state = HT_AGG_STATE_IDLE; #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "timer expired on tid %d but we are not " printk(KERN_DEBUG "timer expired on tid %d but we are not " "expecting addBA response there", tid); "(or no longer) expecting addBA response there", tid); #endif #endif return; return; } } Loading Loading @@ -666,21 +668,21 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, state = &sta->ampdu_mlme.tid_state_tx[tid]; state = &sta->ampdu_mlme.tid_state_tx[tid]; del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); spin_lock_bh(&sta->lock); spin_lock_bh(&sta->lock); if (!(*state & HT_ADDBA_REQUESTED_MSK)) if (!(*state & HT_ADDBA_REQUESTED_MSK)) goto timer_still_needed; goto out; if (mgmt->u.action.u.addba_resp.dialog_token != if (mgmt->u.action.u.addba_resp.dialog_token != sta->ampdu_mlme.tid_tx[tid]->dialog_token) { sta->ampdu_mlme.tid_tx[tid]->dialog_token) { #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ #endif /* CONFIG_MAC80211_HT_DEBUG */ goto timer_still_needed; goto out; } } del_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ #endif /* CONFIG_MAC80211_HT_DEBUG */ Loading @@ -699,10 +701,6 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); } } goto out; timer_still_needed: add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); out: out: spin_unlock_bh(&sta->lock); spin_unlock_bh(&sta->lock); } } net/mac80211/ieee80211_i.h +8 −0 Original line number Original line Diff line number Diff line Loading @@ -661,6 +661,14 @@ struct ieee80211_local { */ */ bool suspended; bool suspended; /* * Resuming is true while suspended, but when we're reprogramming the * hardware -- at that time it's allowed to use ieee80211_queue_work() * again even though some other parts of the stack are still suspended * and we still drop received frames to avoid waking the stack. */ bool resuming; /* /* * quiescing is true during the suspend process _only_ to * quiescing is true during the suspend process _only_ to * ease timer cancelling etc. * ease timer cancelling etc. Loading net/mac80211/util.c +9 −10 Original line number Original line Diff line number Diff line Loading @@ -520,8 +520,8 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic); */ */ static bool ieee80211_can_queue_work(struct ieee80211_local *local) static bool ieee80211_can_queue_work(struct ieee80211_local *local) { { if (WARN(local->suspended, "queueing ieee80211 work while " if (WARN(local->suspended && !local->resuming, "going to suspend\n")) "queueing ieee80211 work while going to suspend\n")) return false; return false; return true; return true; Loading Loading @@ -1025,13 +1025,9 @@ int ieee80211_reconfig(struct ieee80211_local *local) struct sta_info *sta; struct sta_info *sta; unsigned long flags; unsigned long flags; int res; int res; bool from_suspend = local->suspended; /* if (local->suspended) * We're going to start the hardware, at that point local->resuming = true; * we are no longer suspended and can RX frames. */ local->suspended = false; /* restart hardware */ /* restart hardware */ if (local->open_count) { if (local->open_count) { Loading Loading @@ -1129,11 +1125,14 @@ int ieee80211_reconfig(struct ieee80211_local *local) * If this is for hw restart things are still running. * If this is for hw restart things are still running. * We may want to change that later, however. * We may want to change that later, however. */ */ if (!from_suspend) if (!local->suspended) return 0; return 0; #ifdef CONFIG_PM #ifdef CONFIG_PM /* first set suspended false, then resuming */ local->suspended = false; local->suspended = false; mb(); local->resuming = false; list_for_each_entry(sdata, &local->interfaces, list) { list_for_each_entry(sdata, &local->interfaces, list) { switch(sdata->vif.type) { switch(sdata->vif.type) { Loading net/rfkill/core.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1189,6 +1189,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd, #endif #endif static const struct file_operations rfkill_fops = { static const struct file_operations rfkill_fops = { .owner = THIS_MODULE, .open = rfkill_fop_open, .open = rfkill_fop_open, .read = rfkill_fop_read, .read = rfkill_fop_read, .write = rfkill_fop_write, .write = rfkill_fop_write, Loading Loading
drivers/net/wireless/ath/ath9k/main.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1555,6 +1555,8 @@ void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_MESH_POINT); BIT(NL80211_IFTYPE_MESH_POINT); hw->wiphy->ps_default = false; hw->queues = 4; hw->queues = 4; hw->max_rates = 4; hw->max_rates = 4; hw->channel_change_time = 5000; hw->channel_change_time = 5000; Loading
net/mac80211/agg-tx.c +8 −10 Original line number Original line Diff line number Diff line Loading @@ -173,12 +173,14 @@ static void sta_addba_resp_timer_expired(unsigned long data) /* check if the TID waits for addBA response */ /* check if the TID waits for addBA response */ spin_lock_bh(&sta->lock); spin_lock_bh(&sta->lock); if (!(*state & HT_ADDBA_REQUESTED_MSK)) { if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) != HT_ADDBA_REQUESTED_MSK) { spin_unlock_bh(&sta->lock); spin_unlock_bh(&sta->lock); *state = HT_AGG_STATE_IDLE; *state = HT_AGG_STATE_IDLE; #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "timer expired on tid %d but we are not " printk(KERN_DEBUG "timer expired on tid %d but we are not " "expecting addBA response there", tid); "(or no longer) expecting addBA response there", tid); #endif #endif return; return; } } Loading Loading @@ -666,21 +668,21 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, state = &sta->ampdu_mlme.tid_state_tx[tid]; state = &sta->ampdu_mlme.tid_state_tx[tid]; del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); spin_lock_bh(&sta->lock); spin_lock_bh(&sta->lock); if (!(*state & HT_ADDBA_REQUESTED_MSK)) if (!(*state & HT_ADDBA_REQUESTED_MSK)) goto timer_still_needed; goto out; if (mgmt->u.action.u.addba_resp.dialog_token != if (mgmt->u.action.u.addba_resp.dialog_token != sta->ampdu_mlme.tid_tx[tid]->dialog_token) { sta->ampdu_mlme.tid_tx[tid]->dialog_token) { #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ #endif /* CONFIG_MAC80211_HT_DEBUG */ goto timer_still_needed; goto out; } } del_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); #ifdef CONFIG_MAC80211_HT_DEBUG #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ #endif /* CONFIG_MAC80211_HT_DEBUG */ Loading @@ -699,10 +701,6 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); } } goto out; timer_still_needed: add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); out: out: spin_unlock_bh(&sta->lock); spin_unlock_bh(&sta->lock); } }
net/mac80211/ieee80211_i.h +8 −0 Original line number Original line Diff line number Diff line Loading @@ -661,6 +661,14 @@ struct ieee80211_local { */ */ bool suspended; bool suspended; /* * Resuming is true while suspended, but when we're reprogramming the * hardware -- at that time it's allowed to use ieee80211_queue_work() * again even though some other parts of the stack are still suspended * and we still drop received frames to avoid waking the stack. */ bool resuming; /* /* * quiescing is true during the suspend process _only_ to * quiescing is true during the suspend process _only_ to * ease timer cancelling etc. * ease timer cancelling etc. Loading
net/mac80211/util.c +9 −10 Original line number Original line Diff line number Diff line Loading @@ -520,8 +520,8 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic); */ */ static bool ieee80211_can_queue_work(struct ieee80211_local *local) static bool ieee80211_can_queue_work(struct ieee80211_local *local) { { if (WARN(local->suspended, "queueing ieee80211 work while " if (WARN(local->suspended && !local->resuming, "going to suspend\n")) "queueing ieee80211 work while going to suspend\n")) return false; return false; return true; return true; Loading Loading @@ -1025,13 +1025,9 @@ int ieee80211_reconfig(struct ieee80211_local *local) struct sta_info *sta; struct sta_info *sta; unsigned long flags; unsigned long flags; int res; int res; bool from_suspend = local->suspended; /* if (local->suspended) * We're going to start the hardware, at that point local->resuming = true; * we are no longer suspended and can RX frames. */ local->suspended = false; /* restart hardware */ /* restart hardware */ if (local->open_count) { if (local->open_count) { Loading Loading @@ -1129,11 +1125,14 @@ int ieee80211_reconfig(struct ieee80211_local *local) * If this is for hw restart things are still running. * If this is for hw restart things are still running. * We may want to change that later, however. * We may want to change that later, however. */ */ if (!from_suspend) if (!local->suspended) return 0; return 0; #ifdef CONFIG_PM #ifdef CONFIG_PM /* first set suspended false, then resuming */ local->suspended = false; local->suspended = false; mb(); local->resuming = false; list_for_each_entry(sdata, &local->interfaces, list) { list_for_each_entry(sdata, &local->interfaces, list) { switch(sdata->vif.type) { switch(sdata->vif.type) { Loading
net/rfkill/core.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1189,6 +1189,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd, #endif #endif static const struct file_operations rfkill_fops = { static const struct file_operations rfkill_fops = { .owner = THIS_MODULE, .open = rfkill_fop_open, .open = rfkill_fop_open, .read = rfkill_fop_read, .read = rfkill_fop_read, .write = rfkill_fop_write, .write = rfkill_fop_write, Loading