aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2011-01-05 14:35:41 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-01-05 14:35:41 -0500
commit6303710d7aa62bfb154cd13ab5ab12cfa8baaf91 (patch)
tree4718ca3186d92819b3d617f32813eab6a1896b91
parentdb98a6cfcc9ac951067c9a2cb60459b618fd7b10 (diff)
parentd2460f4b2fa6dbdeec800414f9cf5b1fc8b71197 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
-rw-r--r--drivers/net/wireless/hostap/hostap_main.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-helpers.h6
-rw-r--r--net/mac80211/key.c6
-rw-r--r--net/mac80211/rx.c3
5 files changed, 20 insertions, 5 deletions
diff --git a/drivers/net/wireless/hostap/hostap_main.c b/drivers/net/wireless/hostap/hostap_main.c
index 25a2722c8a98..1d9aed645723 100644
--- a/drivers/net/wireless/hostap/hostap_main.c
+++ b/drivers/net/wireless/hostap/hostap_main.c
@@ -891,7 +891,6 @@ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
891 891
892 SET_ETHTOOL_OPS(dev, &prism2_ethtool_ops); 892 SET_ETHTOOL_OPS(dev, &prism2_ethtool_ops);
893 893
894 netif_stop_queue(dev);
895} 894}
896 895
897static int hostap_enable_hostapd(local_info_t *local, int rtnl_locked) 896static int hostap_enable_hostapd(local_info_t *local, int rtnl_locked)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 5f11dc25a9bd..f13a83a7e62b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -3280,9 +3280,10 @@ void iwlagn_mac_stop(struct ieee80211_hw *hw)
3280 3280
3281 flush_workqueue(priv->workqueue); 3281 flush_workqueue(priv->workqueue);
3282 3282
3283 /* enable interrupts again in order to receive rfkill changes */ 3283 /* User space software may expect getting rfkill changes
3284 * even if interface is down */
3284 iwl_write32(priv, CSR_INT, 0xFFFFFFFF); 3285 iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
3285 iwl_enable_interrupts(priv); 3286 iwl_enable_rfkill_int(priv);
3286 3287
3287 IWL_DEBUG_MAC80211(priv, "leave\n"); 3288 IWL_DEBUG_MAC80211(priv, "leave\n");
3288} 3289}
@@ -4191,14 +4192,14 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
4191 * 8. Enable interrupts and read RFKILL state 4192 * 8. Enable interrupts and read RFKILL state
4192 *********************************************/ 4193 *********************************************/
4193 4194
4194 /* enable interrupts if needed: hw bug w/a */ 4195 /* enable rfkill interrupt: hw bug w/a */
4195 pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd); 4196 pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd);
4196 if (pci_cmd & PCI_COMMAND_INTX_DISABLE) { 4197 if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
4197 pci_cmd &= ~PCI_COMMAND_INTX_DISABLE; 4198 pci_cmd &= ~PCI_COMMAND_INTX_DISABLE;
4198 pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd); 4199 pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd);
4199 } 4200 }
4200 4201
4201 iwl_enable_interrupts(priv); 4202 iwl_enable_rfkill_int(priv);
4202 4203
4203 /* If platform's RF_KILL switch is NOT set to KILL */ 4204 /* If platform's RF_KILL switch is NOT set to KILL */
4204 if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) 4205 if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
diff --git a/drivers/net/wireless/iwlwifi/iwl-helpers.h b/drivers/net/wireless/iwlwifi/iwl-helpers.h
index 3f5bedd8875f..8821f088ba7f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-helpers.h
+++ b/drivers/net/wireless/iwlwifi/iwl-helpers.h
@@ -148,6 +148,12 @@ static inline void iwl_disable_interrupts(struct iwl_priv *priv)
148 IWL_DEBUG_ISR(priv, "Disabled interrupts\n"); 148 IWL_DEBUG_ISR(priv, "Disabled interrupts\n");
149} 149}
150 150
151static inline void iwl_enable_rfkill_int(struct iwl_priv *priv)
152{
153 IWL_DEBUG_ISR(priv, "Enabling rfkill interrupt\n");
154 iwl_write32(priv, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
155}
156
151static inline void iwl_enable_interrupts(struct iwl_priv *priv) 157static inline void iwl_enable_interrupts(struct iwl_priv *priv)
152{ 158{
153 IWL_DEBUG_ISR(priv, "Enabling interrupts\n"); 159 IWL_DEBUG_ISR(priv, "Enabling interrupts\n");
diff --git a/net/mac80211/key.c b/net/mac80211/key.c
index 315ee301b75e..8c02469b7176 100644
--- a/net/mac80211/key.c
+++ b/net/mac80211/key.c
@@ -375,6 +375,12 @@ static void __ieee80211_key_destroy(struct ieee80211_key *key)
375 if (!key) 375 if (!key)
376 return; 376 return;
377 377
378 /*
379 * Synchronize so the TX path can no longer be using
380 * this key before we free/remove it.
381 */
382 synchronize_rcu();
383
378 if (key->local) 384 if (key->local)
379 ieee80211_key_disable_hw_accel(key); 385 ieee80211_key_disable_hw_accel(key);
380 386
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 9595e564badd..2b9db5ab9048 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1808,6 +1808,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1808 if (!fwd_skb && net_ratelimit()) 1808 if (!fwd_skb && net_ratelimit())
1809 printk(KERN_DEBUG "%s: failed to clone mesh frame\n", 1809 printk(KERN_DEBUG "%s: failed to clone mesh frame\n",
1810 sdata->name); 1810 sdata->name);
1811 if (!fwd_skb)
1812 goto out;
1811 1813
1812 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data; 1814 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data;
1813 memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); 1815 memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
@@ -1845,6 +1847,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1845 } 1847 }
1846 } 1848 }
1847 1849
1850 out:
1848 if (is_multicast_ether_addr(hdr->addr1) || 1851 if (is_multicast_ether_addr(hdr->addr1) ||
1849 sdata->dev->flags & IFF_PROMISC) 1852 sdata->dev->flags & IFF_PROMISC)
1850 return RX_CONTINUE; 1853 return RX_CONTINUE;