···679 return rate;680681 if (rate_table->info[rate].valid_single_stream &&682- !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG));683 return rate;684685 /* This should not happen */
···679 return rate;680681 if (rate_table->info[rate].valid_single_stream &&682+ !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG))683 return rate;684685 /* This should not happen */
+13-2
drivers/net/wireless/b43/dma.c
···1157}11581159static int dma_tx_fragment(struct b43_dmaring *ring,1160- struct sk_buff *skb)1161{01162 const struct b43_dma_ops *ops = ring->ops;1163 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);1164 u8 *header;···1225 }12261227 memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len);000001228 dev_kfree_skb_any(skb);1229 skb = bounce_skb;01230 meta->skb = skb;1231 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);1232 if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {···1362 * static, so we don't need to store it per frame. */1363 ring->queue_prio = skb_get_queue_mapping(skb);13641365- err = dma_tx_fragment(ring, skb);00001366 if (unlikely(err == -ENOKEY)) {1367 /* Drop this packet, as we don't have the encryption key1368 * anymore and must not transmit it unencrypted. */
···1157}11581159static int dma_tx_fragment(struct b43_dmaring *ring,1160+ struct sk_buff **in_skb)1161{1162+ struct sk_buff *skb = *in_skb;1163 const struct b43_dma_ops *ops = ring->ops;1164 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);1165 u8 *header;···1224 }12251226 memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len);1227+ memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb));1228+ bounce_skb->dev = skb->dev;1229+ skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb));1230+ info = IEEE80211_SKB_CB(bounce_skb);1231+1232 dev_kfree_skb_any(skb);1233 skb = bounce_skb;1234+ *in_skb = bounce_skb;1235 meta->skb = skb;1236 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);1237 if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {···1355 * static, so we don't need to store it per frame. */1356 ring->queue_prio = skb_get_queue_mapping(skb);13571358+ /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing1359+ * into the skb data or cb now. */1360+ hdr = NULL;1361+ info = NULL;1362+ err = dma_tx_fragment(ring, &skb);1363 if (unlikely(err == -ENOKEY)) {1364 /* Drop this packet, as we don't have the encryption key1365 * anymore and must not transmit it unencrypted. */
+4-1
drivers/net/wireless/ipw2x00/ipw2100.c
···63256326 fail:6327 if (dev) {6328- if (registered)06329 unregister_netdev(dev);063306331 ipw2100_hw_stop_adapter(priv);6332···6385 /* Unregister the device first - this results in close()6386 * being called if the device is open. If we free storage6387 * first, then close() will crash. */06388 unregister_netdev(dev);63896390 /* ipw2100_down will ensure that there is no more pending work
···63256326 fail:6327 if (dev) {6328+ if (registered) {6329+ unregister_ieee80211(priv->ieee);6330 unregister_netdev(dev);6331+ }63326333 ipw2100_hw_stop_adapter(priv);6334···6383 /* Unregister the device first - this results in close()6384 * being called if the device is open. If we free storage6385 * first, then close() will crash. */6386+ unregister_ieee80211(priv->ieee);6387 unregister_netdev(dev);63886389 /* ipw2100_down will ensure that there is no more pending work
+2
drivers/net/wireless/ipw2x00/ipw2200.c
···11821 if (err) {11822 IPW_ERROR("Failed to register promiscuous network "11823 "device (error %d).\n", err);011824 unregister_netdev(priv->net_dev);11825 goto out_remove_sysfs;11826 }···1187211873 mutex_unlock(&priv->mutex);11874011875 unregister_netdev(priv->net_dev);1187611877 if (priv->rxq) {
···11821 if (err) {11822 IPW_ERROR("Failed to register promiscuous network "11823 "device (error %d).\n", err);11824+ unregister_ieee80211(priv->ieee);11825 unregister_netdev(priv->net_dev);11826 goto out_remove_sysfs;11827 }···1187111872 mutex_unlock(&priv->mutex);1187311874+ unregister_ieee80211(priv->ieee);11875 unregister_netdev(priv->net_dev);1187611877 if (priv->rxq) {
+1
drivers/net/wireless/ipw2x00/libipw.h
···1020/* ieee80211.c */1021extern void free_ieee80211(struct net_device *dev, int monitor);1022extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor);01023extern int libipw_change_mtu(struct net_device *dev, int new_mtu);10241025extern void libipw_networks_age(struct libipw_device *ieee,
···1020/* ieee80211.c */1021extern void free_ieee80211(struct net_device *dev, int monitor);1022extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor);1023+extern void unregister_ieee80211(struct libipw_device *ieee);1024extern int libipw_change_mtu(struct net_device *dev, int new_mtu);10251026extern void libipw_networks_age(struct libipw_device *ieee,
···508 /* Fill the receive configuration URB and initialise the Rx call back */509 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,510 usb_rcvbulkpipe(cardp->udev, cardp->ep_in),511- (void *) (skb->tail + (size_t) IPFIELD_ALIGN_OFFSET),512 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn,513 cardp);514
···508 /* Fill the receive configuration URB and initialise the Rx call back */509 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,510 usb_rcvbulkpipe(cardp->udev, cardp->ep_in),511+ skb->data + IPFIELD_ALIGN_OFFSET,512 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn,513 cardp);514
···666667 state = &sta->ampdu_mlme.tid_state_tx[tid];66800669 spin_lock_bh(&sta->lock);670671- if (!(*state & HT_ADDBA_REQUESTED_MSK)) {672- spin_unlock_bh(&sta->lock);673- return;674- }675676 if (mgmt->u.action.u.addba_resp.dialog_token !=677 sta->ampdu_mlme.tid_tx[tid]->dialog_token) {678- spin_unlock_bh(&sta->lock);679#ifdef CONFIG_MAC80211_HT_DEBUG680 printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);681#endif /* CONFIG_MAC80211_HT_DEBUG */682- return;683 }684685- del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);686#ifdef CONFIG_MAC80211_HT_DEBUG687 printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);688#endif /* CONFIG_MAC80211_HT_DEBUG */0689 if (le16_to_cpu(mgmt->u.action.u.addba_resp.status)690 == WLAN_STATUS_SUCCESS) {691 u8 curstate = *state;···698 } else {699 ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);700 }000000701 spin_unlock_bh(&sta->lock);702}
···666667 state = &sta->ampdu_mlme.tid_state_tx[tid];668669+ del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);670+671 spin_lock_bh(&sta->lock);672673+ if (!(*state & HT_ADDBA_REQUESTED_MSK))674+ goto timer_still_needed;00675676 if (mgmt->u.action.u.addba_resp.dialog_token !=677 sta->ampdu_mlme.tid_tx[tid]->dialog_token) {0678#ifdef CONFIG_MAC80211_HT_DEBUG679 printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);680#endif /* CONFIG_MAC80211_HT_DEBUG */681+ goto timer_still_needed;682 }6830684#ifdef CONFIG_MAC80211_HT_DEBUG685 printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);686#endif /* CONFIG_MAC80211_HT_DEBUG */687+688 if (le16_to_cpu(mgmt->u.action.u.addba_resp.status)689 == WLAN_STATUS_SUCCESS) {690 u8 curstate = *state;···699 } else {700 ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);701 }702+703+ goto out;704+705+ timer_still_needed:706+ add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);707+ out:708 spin_unlock_bh(&sta->lock);709}
+3-3
net/mac80211/cfg.c
···72 struct ieee80211_sub_if_data *sdata;73 int ret;7400075 if (!nl80211_type_check(type))76 return -EINVAL;77···83 ret = ieee80211_if_change_type(sdata, type);84 if (ret)85 return ret;86-87- if (netif_running(sdata->dev))88- return -EBUSY;8990 if (ieee80211_vif_is_mesh(&sdata->vif) && params->mesh_id_len)91 ieee80211_sdata_set_mesh_id(sdata,
···72 struct ieee80211_sub_if_data *sdata;73 int ret;7475+ if (netif_running(dev))76+ return -EBUSY;77+78 if (!nl80211_type_check(type))79 return -EINVAL;80···80 ret = ieee80211_if_change_type(sdata, type);81 if (ret)82 return ret;0008384 if (ieee80211_vif_is_mesh(&sdata->vif) && params->mesh_id_len)85 ieee80211_sdata_set_mesh_id(sdata,
+1-1
net/mac80211/ht.c
···153 if (net_ratelimit())154 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n",155 mgmt->sa, initiator ? "initiator" : "recipient", tid,156- mgmt->u.action.u.delba.reason_code);157#endif /* CONFIG_MAC80211_HT_DEBUG */158159 if (initiator == WLAN_BACK_INITIATOR)
···153 if (net_ratelimit())154 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n",155 mgmt->sa, initiator ? "initiator" : "recipient", tid,156+ le16_to_cpu(mgmt->u.action.u.delba.reason_code));157#endif /* CONFIG_MAC80211_HT_DEBUG */158159 if (initiator == WLAN_BACK_INITIATOR)