aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mv643xx_eth.c
diff options
context:
space:
mode:
authorLennert Buytenhek <buytenh@wantstofly.org>2008-09-14 09:50:32 -0400
committerLennert Buytenhek <buytenh@marvell.com>2008-09-14 09:53:28 -0400
commit6b8f90c276ac25cd37f143a00d467a8ccb19c4c6 (patch)
treeb62dd00ec3b0fde5bdc4a2b33e147fb8d236d391 /drivers/net/mv643xx_eth.c
parent2b4a624d706d404a3edccb6d1bb2c440a6dbbc31 (diff)
mv643xx_eth: avoid reading ->byte_cnt twice during receive processing
Currently, the receive processing reads ->byte_cnt twice (once to update interface statistics and once to properly size the data area of the received skb), but since receive descriptors live in uncached memory, caching this value in a local variable saves one uncached access, and increases routing performance a tiny little bit more. Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Diffstat (limited to 'drivers/net/mv643xx_eth.c')
-rw-r--r--drivers/net/mv643xx_eth.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index 4fbd62e45ae9..6564be122acf 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -477,6 +477,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
477 struct rx_desc *rx_desc; 477 struct rx_desc *rx_desc;
478 unsigned int cmd_sts; 478 unsigned int cmd_sts;
479 struct sk_buff *skb; 479 struct sk_buff *skb;
480 u16 byte_cnt;
480 481
481 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc]; 482 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc];
482 483
@@ -499,6 +500,8 @@ static int rxq_process(struct rx_queue *rxq, int budget)
499 500
500 mp->work_rx_refill |= 1 << rxq->index; 501 mp->work_rx_refill |= 1 << rxq->index;
501 502
503 byte_cnt = rx_desc->byte_cnt;
504
502 /* 505 /*
503 * Update statistics. 506 * Update statistics.
504 * 507 *
@@ -508,7 +511,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
508 * byte CRC at the end of the packet (which we do count). 511 * byte CRC at the end of the packet (which we do count).
509 */ 512 */
510 stats->rx_packets++; 513 stats->rx_packets++;
511 stats->rx_bytes += rx_desc->byte_cnt - 2; 514 stats->rx_bytes += byte_cnt - 2;
512 515
513 /* 516 /*
514 * In case we received a packet without first / last bits 517 * In case we received a packet without first / last bits
@@ -537,7 +540,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
537 * The -4 is for the CRC in the trailer of the 540 * The -4 is for the CRC in the trailer of the
538 * received packet 541 * received packet
539 */ 542 */
540 skb_put(skb, rx_desc->byte_cnt - 2 - 4); 543 skb_put(skb, byte_cnt - 2 - 4);
541 544
542 if (cmd_sts & LAYER_4_CHECKSUM_OK) { 545 if (cmd_sts & LAYER_4_CHECKSUM_OK) {
543 skb->ip_summed = CHECKSUM_UNNECESSARY; 546 skb->ip_summed = CHECKSUM_UNNECESSARY;