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>
struct rx_desc *rx_desc;
unsigned int cmd_sts;
struct sk_buff *skb;
struct rx_desc *rx_desc;
unsigned int cmd_sts;
struct sk_buff *skb;
rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc];
rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc];
mp->work_rx_refill |= 1 << rxq->index;
mp->work_rx_refill |= 1 << rxq->index;
+ byte_cnt = rx_desc->byte_cnt;
+
/*
* Update statistics.
*
/*
* Update statistics.
*
* byte CRC at the end of the packet (which we do count).
*/
stats->rx_packets++;
* byte CRC at the end of the packet (which we do count).
*/
stats->rx_packets++;
- stats->rx_bytes += rx_desc->byte_cnt - 2;
+ stats->rx_bytes += byte_cnt - 2;
/*
* In case we received a packet without first / last bits
/*
* In case we received a packet without first / last bits
* The -4 is for the CRC in the trailer of the
* received packet
*/
* The -4 is for the CRC in the trailer of the
* received packet
*/
- skb_put(skb, rx_desc->byte_cnt - 2 - 4);
+ skb_put(skb, byte_cnt - 2 - 4);
if (cmd_sts & LAYER_4_CHECKSUM_OK) {
skb->ip_summed = CHECKSUM_UNNECESSARY;
if (cmd_sts & LAYER_4_CHECKSUM_OK) {
skb->ip_summed = CHECKSUM_UNNECESSARY;