| Index: chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c
|
| diff --git a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c
|
| index c7b14b2b279efdcd2dae3e86faeccad0da4845a5..a7fdba03860fd714c98e6fc052961ede6a654aaf 100644
|
| --- a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c
|
| +++ b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c
|
| @@ -1082,6 +1082,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
|
| struct ieee80211_rx_status *rxs;
|
| struct ath_hw *ah = sc->sc_ah;
|
| struct ath_common *common = ath9k_hw_common(ah);
|
| + u32 *rx_desc = NULL;
|
| /*
|
| * The hw can techncically differ from common->hw when using ath9k
|
| * virtual wiphy so to account for that we iterate over the active
|
| @@ -1174,12 +1175,24 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
|
| dma_type);
|
|
|
| skb_put(skb, rs.rs_datalen + ah->caps.rx_status_len);
|
| - if (ah->caps.rx_status_len)
|
| + if (ah->caps.rx_status_len) {
|
| + rx_desc = kzalloc(ah->caps.rx_status_len, GFP_ATOMIC);
|
| + if (rx_desc == NULL)
|
| + BUG_ON(1);
|
| + memcpy(rx_desc, skb->data, ah->caps.rx_status_len);
|
| skb_pull(skb, ah->caps.rx_status_len);
|
| + }
|
|
|
| ath9k_rx_skb_postprocess(common, skb, &rs,
|
| rxs, decrypt_error);
|
|
|
| + if (rx_desc) {
|
| + ath_pktlog_rx(sc, (void *) rx_desc, skb);
|
| + kfree(rx_desc);
|
| + } else {
|
| + ath_pktlog_rx(sc, bf->bf_desc, skb);
|
| + }
|
| +
|
| /* We will now give hardware our shiny new allocated skb */
|
| bf->bf_mpdu = requeue_skb;
|
| bf->bf_buf_addr = dma_map_single(sc->dev, requeue_skb->data,
|
|
|