diff options
author | John W. Linville <linville@tuxdriver.com> | 2011-01-05 14:35:41 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-01-05 14:35:41 -0500 |
commit | 6303710d7aa62bfb154cd13ab5ab12cfa8baaf91 (patch) | |
tree | 4718ca3186d92819b3d617f32813eab6a1896b91 | |
parent | db98a6cfcc9ac951067c9a2cb60459b618fd7b10 (diff) | |
parent | d2460f4b2fa6dbdeec800414f9cf5b1fc8b71197 (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.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-helpers.h | 6 | ||||
-rw-r--r-- | net/mac80211/key.c | 6 | ||||
-rw-r--r-- | net/mac80211/rx.c | 3 |
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 | ||
897 | static int hostap_enable_hostapd(local_info_t *local, int rtnl_locked) | 896 | static 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 | ||
151 | static 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 | |||
151 | static inline void iwl_enable_interrupts(struct iwl_priv *priv) | 157 | static 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; |