Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes
This commit is contained in:
commit
e734207fee
@ -521,7 +521,7 @@ static void iwlagn_mac_tx(struct ieee80211_hw *hw,
|
|||||||
ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
|
ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
|
||||||
|
|
||||||
if (iwlagn_tx_skb(priv, control->sta, skb))
|
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,
|
static void iwlagn_mac_update_tkip_key(struct ieee80211_hw *hw,
|
||||||
|
@ -2114,7 +2114,7 @@ static void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb)
|
|||||||
|
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]);
|
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)
|
static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)
|
||||||
|
@ -321,6 +321,14 @@ static void iwl_rx_allocate(struct iwl_trans *trans, gfp_t priority)
|
|||||||
dma_map_page(trans->dev, page, 0,
|
dma_map_page(trans->dev, page, 0,
|
||||||
PAGE_SIZE << trans_pcie->rx_page_order,
|
PAGE_SIZE << trans_pcie->rx_page_order,
|
||||||
DMA_FROM_DEVICE);
|
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 */
|
/* dma address must be no more than 36 bits */
|
||||||
BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
|
BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
|
||||||
/* and also 256 byte aligned! */
|
/* 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,
|
dma_map_page(trans->dev, rxb->page, 0,
|
||||||
PAGE_SIZE << trans_pcie->rx_page_order,
|
PAGE_SIZE << trans_pcie->rx_page_order,
|
||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
list_add_tail(&rxb->list, &rxq->rx_free);
|
if (dma_mapping_error(trans->dev, rxb->page_dma)) {
|
||||||
rxq->free_count++;
|
/*
|
||||||
|
* 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
|
} else
|
||||||
list_add_tail(&rxb->list, &rxq->rx_used);
|
list_add_tail(&rxb->list, &rxq->rx_used);
|
||||||
spin_unlock_irqrestore(&rxq->lock, flags);
|
spin_unlock_irqrestore(&rxq->lock, flags);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user