patch 'net/ice: fix Rx packets statistics underflow' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Mon Jul 6 12:20:26 CEST 2026
Hi,
FYI, your patch has been queued to stable release 24.11.7
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/05/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/8ce858c5b74b504fd0b201a0f7e61e7b91eee1d5
Thanks.
Luca Boccassi
---
>From 8ce858c5b74b504fd0b201a0f7e61e7b91eee1d5 Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus at intel.com>
Date: Thu, 25 Jun 2026 09:36:17 +0000
Subject: [PATCH] net/ice: fix Rx packets statistics underflow
[ upstream commit 403af2bebf29472495a060a91fc207779742101f ]
The number of Rx packets is computed as the sum of the unicast,
multicast and broadcast packet counters, minus the discarded packet
count:
ipackets = rx_unicast + rx_multicast + rx_broadcast - rx_discards
The unicast, multicast and broadcast counters already include the
packets that were subsequently dropped, so subtracting rx_discards
yields only the packets delivered to the application. However, each of
these counters is read from a separate hardware register, and the reads
happen at slightly different instants. Under load, rx_discards (read
last) can momentarily exceed the sum of the unicast, multicast and
broadcast counters (read earlier). As ipackets is unsigned, the
subtraction then wraps to a huge bogus value, reported to the
application as an enormous Rx packet count and packet rate.
Read the rx_discards register before the unicast, multicast and
broadcast registers. As all of these counters only ever increase, and
the unicast, multicast and broadcast counters always include the
discarded packets, sampling rx_discards first guarantees it can never
exceed the later sum of the other three, so the subtraction can never
underflow.
Fixes: a37bde56314d ("net/ice: support statistics")
Signed-off-by: Ciara Loftus <ciara.loftus at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/ice/ice_ethdev.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index ffdcaebc59..1d7fac0435 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -5997,6 +5997,15 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
int idx = rte_le_to_cpu_16(vsi->vsi_id);
+ /*
+ * Unicast/multicast/broadcast counters include discarded packets. Received packets is
+ * calculated by deducting discards from unicast/multicast/broadcast. To prevent a
+ * potential underflow, read discards first to guarantee it is smaller than
+ * unicast/multicast/broadcast.
+ */
+ ice_stat_update_32(hw, GLV_RDPC(idx), vsi->offset_loaded,
+ &oes->rx_discards, &nes->rx_discards);
+
ice_stat_update_40(hw, GLV_GORCH(idx), GLV_GORCL(idx),
vsi->offset_loaded, &oes->rx_bytes,
&nes->rx_bytes);
@@ -6020,8 +6029,6 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
nes->rx_bytes -= (nes->rx_unicast + nes->rx_multicast +
nes->rx_broadcast) * RTE_ETHER_CRC_LEN;
- ice_stat_update_32(hw, GLV_RDPC(idx), vsi->offset_loaded,
- &oes->rx_discards, &nes->rx_discards);
/* GLV_REPC not supported */
/* GLV_RMPC not supported */
ice_stat_update_32(hw, GLSWID_RUPP(idx), vsi->offset_loaded,
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-07-03 12:55:48.005811775 +0100
+++ 0034-net-ice-fix-Rx-packets-statistics-underflow.patch 2026-07-03 12:55:46.666573877 +0100
@@ -1 +1 @@
-From 403af2bebf29472495a060a91fc207779742101f Mon Sep 17 00:00:00 2001
+From 8ce858c5b74b504fd0b201a0f7e61e7b91eee1d5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 403af2bebf29472495a060a91fc207779742101f ]
+
@@ -30 +31,0 @@
-Cc: stable at dpdk.org
@@ -35 +36 @@
- drivers/net/intel/ice/ice_ethdev.c | 11 +++++++++--
+ drivers/net/ice/ice_ethdev.c | 11 +++++++++--
@@ -38,5 +39,5 @@
-diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
-index 99305b604b..022d92a2f6 100644
---- a/drivers/net/intel/ice/ice_ethdev.c
-+++ b/drivers/net/intel/ice/ice_ethdev.c
-@@ -6455,6 +6455,15 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
+diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
+index ffdcaebc59..1d7fac0435 100644
+--- a/drivers/net/ice/ice_ethdev.c
++++ b/drivers/net/ice/ice_ethdev.c
+@@ -5997,6 +5997,15 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
@@ -58 +59 @@
-@@ -6481,8 +6490,6 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
+@@ -6020,8 +6029,6 @@ ice_update_vsi_stats(struct ice_vsi *vsi)
More information about the stable
mailing list