Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/wireless/iwlwifi/iwl-3945.h drivers/net/wireless/iwlwifi/iwl-tx.c drivers/net/wireless/iwlwifi/iwl3945-base.c
此提交包含在:
@@ -760,7 +760,7 @@ void ieee80211_dynamic_ps_timer(unsigned long data)
|
||||
{
|
||||
struct ieee80211_local *local = (void *) data;
|
||||
|
||||
if (local->quiescing)
|
||||
if (local->quiescing || local->suspended)
|
||||
return;
|
||||
|
||||
queue_work(local->hw.workqueue, &local->dynamic_ps_enable_work);
|
||||
|
@@ -55,15 +55,6 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
/* flush again, in case driver queued work */
|
||||
flush_workqueue(local->hw.workqueue);
|
||||
|
||||
/* stop hardware - this must stop RX */
|
||||
if (local->open_count) {
|
||||
ieee80211_led_radio(local, false);
|
||||
drv_stop(local);
|
||||
}
|
||||
|
||||
/* remove STAs */
|
||||
spin_lock_irqsave(&local->sta_lock, flags);
|
||||
list_for_each_entry(sta, &local->sta_list, list) {
|
||||
@@ -111,7 +102,22 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
|
||||
drv_remove_interface(local, &conf);
|
||||
}
|
||||
|
||||
/* stop hardware - this must stop RX */
|
||||
if (local->open_count) {
|
||||
ieee80211_led_radio(local, false);
|
||||
drv_stop(local);
|
||||
}
|
||||
|
||||
/*
|
||||
* flush again, in case driver queued work -- it
|
||||
* shouldn't be doing (or cancel everything in the
|
||||
* stop callback) that but better safe than sorry.
|
||||
*/
|
||||
flush_workqueue(local->hw.workqueue);
|
||||
|
||||
local->suspended = true;
|
||||
/* need suspended to be visible before quiescing is false */
|
||||
barrier();
|
||||
local->quiescing = false;
|
||||
|
||||
return 0;
|
||||
|
@@ -2439,6 +2439,18 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're suspending, it is possible although not too likely
|
||||
* that we'd be receiving frames after having already partially
|
||||
* quiesced the stack. We can't process such frames then since
|
||||
* that might, for example, cause stations to be added or other
|
||||
* driver callbacks be invoked.
|
||||
*/
|
||||
if (unlikely(local->quiescing || local->suspended)) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_HT) {
|
||||
/* rate_idx is MCS index */
|
||||
if (WARN_ON(status->rate_idx < 0 ||
|
||||
|
新增問題並參考
封鎖使用者