diff options
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/b43legacy/pio.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/mac80211.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/main.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/rx.c | 23 | 
5 files changed, 25 insertions, 6 deletions
diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c index 192251adf98..282eedec675 100644 --- a/drivers/net/wireless/b43legacy/pio.c +++ b/drivers/net/wireless/b43legacy/pio.c @@ -382,7 +382,7 @@ static void cancel_transfers(struct b43legacy_pioqueue *queue)  {  	struct b43legacy_pio_txpacket *packet, *tmp_packet; -	tasklet_disable(&queue->txtask); +	tasklet_kill(&queue->txtask);  	list_for_each_entry_safe(packet, tmp_packet, &queue->txrunning, list)  		free_txpacket(packet, 0); diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index a6f1e816600..481345c23de 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c @@ -4401,7 +4401,7 @@ static s32 brcmf_mode_to_nl80211_iftype(s32 mode)  static void brcmf_wiphy_pno_params(struct wiphy *wiphy)  { -#ifndef CONFIG_BRCMFISCAN +#ifndef CONFIG_BRCMISCAN  	/* scheduled scan settings */  	wiphy->max_sched_scan_ssids = BRCMF_PNO_MAX_PFN_COUNT;  	wiphy->max_match_sets = BRCMF_PNO_MAX_PFN_COUNT; diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c index ff8162d4c45..fa4d1b8cd9f 100644 --- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c @@ -521,7 +521,7 @@ static void iwlagn_mac_tx(struct ieee80211_hw *hw,  		     ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);  	if (iwlagn_tx_skb(priv, control->sta, skb)) -		dev_kfree_skb_any(skb); +		ieee80211_free_txskb(hw, skb);  }  static void iwlagn_mac_update_tkip_key(struct ieee80211_hw *hw, diff --git a/drivers/net/wireless/iwlwifi/dvm/main.c b/drivers/net/wireless/iwlwifi/dvm/main.c index 7ff3f143067..408132cf83c 100644 --- a/drivers/net/wireless/iwlwifi/dvm/main.c +++ b/drivers/net/wireless/iwlwifi/dvm/main.c @@ -2114,7 +2114,7 @@ static void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb)  	info = IEEE80211_SKB_CB(skb);  	iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]); -	dev_kfree_skb_any(skb); +	ieee80211_free_txskb(priv->hw, skb);  }  static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state) diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c index 17c8e5d8268..bb69f8f90b3 100644 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c @@ -321,6 +321,14 @@ static void iwl_rx_allocate(struct iwl_trans *trans, gfp_t priority)  			dma_map_page(trans->dev, page, 0,  				     PAGE_SIZE << trans_pcie->rx_page_order,  				     DMA_FROM_DEVICE); +		if (dma_mapping_error(trans->dev, rxb->page_dma)) { +			rxb->page = NULL; +			spin_lock_irqsave(&rxq->lock, flags); +			list_add(&rxb->list, &rxq->rx_used); +			spin_unlock_irqrestore(&rxq->lock, flags); +			__free_pages(page, trans_pcie->rx_page_order); +			return; +		}  		/* dma address must be no more than 36 bits */  		BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));  		/* and also 256 byte aligned! */ @@ -488,8 +496,19 @@ static void iwl_rx_handle_rxbuf(struct iwl_trans *trans,  			dma_map_page(trans->dev, rxb->page, 0,  				     PAGE_SIZE << trans_pcie->rx_page_order,  				     DMA_FROM_DEVICE); -		list_add_tail(&rxb->list, &rxq->rx_free); -		rxq->free_count++; +		if (dma_mapping_error(trans->dev, rxb->page_dma)) { +			/* +			 * free the page(s) as well to not break +			 * the invariant that the items on the used +			 * list have no page(s) +			 */ +			__free_pages(rxb->page, trans_pcie->rx_page_order); +			rxb->page = NULL; +			list_add_tail(&rxb->list, &rxq->rx_used); +		} else { +			list_add_tail(&rxb->list, &rxq->rx_free); +			rxq->free_count++; +		}  	} else  		list_add_tail(&rxb->list, &rxq->rx_used);  	spin_unlock_irqrestore(&rxq->lock, flags);  |