This is a note to let you know that I've just added the patch titled
net: mvneta: increase the 64-bit rx/tx stats out of the hot path
to the 3.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch
and it can be found in the queue-3.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.
>From foo@baz Thu Feb 27 20:11:26 PST 2014
From: willy tarreau <[email protected]>
Date: Thu, 16 Jan 2014 08:20:07 +0100
Subject: net: mvneta: increase the 64-bit rx/tx stats out of the hot path
From: willy tarreau <[email protected]>
[ Upstream commit dc4277dd41a80fd5f29a90412ea04bc3ba54fbf1 ]
Better count packets and bytes in the stack and on 32 bit then
accumulate them at the end for once. This saves two memory writes
and two memory barriers per packet. The incoming packet rate was
increased by 4.7% on the Openblocks AX3 thanks to this.
Cc: Thomas Petazzoni <[email protected]>
Cc: Gregory CLEMENT <[email protected]>
Reviewed-by: Eric Dumazet <[email protected]>
Tested-by: Arnaud Ebalard <[email protected]>
Signed-off-by: Willy Tarreau <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
drivers/net/ethernet/marvell/mvneta.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -1391,6 +1391,8 @@ static int mvneta_rx(struct mvneta_port
{
struct net_device *dev = pp->dev;
int rx_done, rx_filled;
+ u32 rcvd_pkts = 0;
+ u32 rcvd_bytes = 0;
/* Get number of received packets */
rx_done = mvneta_rxq_busy_desc_num_get(pp, rxq);
@@ -1428,10 +1430,8 @@ static int mvneta_rx(struct mvneta_port
rx_bytes = rx_desc->data_size -
(ETH_FCS_LEN + MVNETA_MH_SIZE);
- u64_stats_update_begin(&pp->rx_stats.syncp);
- pp->rx_stats.packets++;
- pp->rx_stats.bytes += rx_bytes;
- u64_stats_update_end(&pp->rx_stats.syncp);
+ rcvd_pkts++;
+ rcvd_bytes += rx_bytes;
/* Linux processing */
skb_reserve(skb, MVNETA_MH_SIZE);
@@ -1452,6 +1452,13 @@ static int mvneta_rx(struct mvneta_port
}
}
+ if (rcvd_pkts) {
+ u64_stats_update_begin(&pp->rx_stats.syncp);
+ pp->rx_stats.packets += rcvd_pkts;
+ pp->rx_stats.bytes += rcvd_bytes;
+ u64_stats_update_end(&pp->rx_stats.syncp);
+ }
+
/* Update rxq management counters */
mvneta_rxq_desc_num_update(pp, rxq, rx_done, rx_filled);
Patches currently in stable-queue which might be from [email protected] are
queue-3.13/net-mvneta-use-per_cpu-stats-to-fix-an-smp-lock-up.patch
queue-3.13/net-mvneta-replace-tx-timer-with-a-real-interrupt.patch
queue-3.13/net-mvneta-increase-the-64-bit-rx-tx-stats-out-of-the-hot-path.patch
queue-3.13/net-mvneta-do-not-schedule-in-mvneta_tx_timeout.patch
queue-3.13/net-mvneta-add-missing-bit-descriptions-for-interrupt-masks-and-causes.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html