aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>2015-03-15 10:00:16 -0400
committerKalle Valo <kvalo@codeaurora.org>2015-03-20 02:33:16 -0400
commit148416a973e0a07fa94a0de90dae92763b282311 (patch)
tree2cf3902cd2213206e7c34f34a0ac7db5095136ca /drivers/net/wireless/ath
parent8fbb2e98fef043019b9d546300406b2f6e9d38f5 (diff)
wil6210: optimize index manipulation in wil_vring_reap_rx
Use temporal variable for often used vring->swhead; and use proper index in debug printing - vring->swhead used before was modified in wil_vring_advance_head and then increased value was used in debug print Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 689081c2c37b..3feb86c47795 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -369,6 +369,7 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
369 u16 dmalen; 369 u16 dmalen;
370 u8 ftype; 370 u8 ftype;
371 int cid; 371 int cid;
372 int i = (int)vring->swhead;
372 struct wil_net_stats *stats; 373 struct wil_net_stats *stats;
373 374
374 BUILD_BUG_ON(sizeof(struct vring_rx_desc) > sizeof(skb->cb)); 375 BUILD_BUG_ON(sizeof(struct vring_rx_desc) > sizeof(skb->cb));
@@ -376,24 +377,28 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
376 if (unlikely(wil_vring_is_empty(vring))) 377 if (unlikely(wil_vring_is_empty(vring)))
377 return NULL; 378 return NULL;
378 379
379 _d = &vring->va[vring->swhead].rx; 380 _d = &vring->va[i].rx;
380 if (unlikely(!(_d->dma.status & RX_DMA_STATUS_DU))) { 381 if (unlikely(!(_d->dma.status & RX_DMA_STATUS_DU))) {
381 /* it is not error, we just reached end of Rx done area */ 382 /* it is not error, we just reached end of Rx done area */
382 return NULL; 383 return NULL;
383 } 384 }
384 385
385 skb = vring->ctx[vring->swhead].skb; 386 skb = vring->ctx[i].skb;
387 vring->ctx[i].skb = NULL;
388 wil_vring_advance_head(vring, 1);
389 if (!skb) {
390 wil_err(wil, "No Rx skb at [%d]\n", i);
391 return NULL;
392 }
386 d = wil_skb_rxdesc(skb); 393 d = wil_skb_rxdesc(skb);
387 *d = *_d; 394 *d = *_d;
388 pa = wil_desc_addr(&d->dma.addr); 395 pa = wil_desc_addr(&d->dma.addr);
389 vring->ctx[vring->swhead].skb = NULL;
390 wil_vring_advance_head(vring, 1);
391 396
392 dma_unmap_single(dev, pa, sz, DMA_FROM_DEVICE); 397 dma_unmap_single(dev, pa, sz, DMA_FROM_DEVICE);
393 dmalen = le16_to_cpu(d->dma.length); 398 dmalen = le16_to_cpu(d->dma.length);
394 399
395 trace_wil6210_rx(vring->swhead, d); 400 trace_wil6210_rx(i, d);
396 wil_dbg_txrx(wil, "Rx[%3d] : %d bytes\n", vring->swhead, dmalen); 401 wil_dbg_txrx(wil, "Rx[%3d] : %d bytes\n", i, dmalen);
397 wil_hex_dump_txrx("Rx ", DUMP_PREFIX_NONE, 32, 4, 402 wil_hex_dump_txrx("Rx ", DUMP_PREFIX_NONE, 32, 4,
398 (const void *)d, sizeof(*d), false); 403 (const void *)d, sizeof(*d), false);
399 404