[dpdk-stable] patch 'net/sfc: fix xstats query by unsorted list of IDs' has been queued to stable release 19.11.10
christian.ehrhardt at canonical.com
christian.ehrhardt at canonical.com
Tue Aug 10 17:40:08 CEST 2021
Hi,
FYI, your patch has been queued to stable release 19.11.10
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/12/21. 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/cpaelzer/dpdk-stable-queue
This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/6fe317e2505898550ddb64ef84a80c9f6b1abb54
Thanks.
Christian Ehrhardt <christian.ehrhardt at canonical.com>
---
>From 6fe317e2505898550ddb64ef84a80c9f6b1abb54 Mon Sep 17 00:00:00 2001
From: Ivan Ilchenko <ivan.ilchenko at oktetlabs.ru>
Date: Fri, 23 Jul 2021 16:15:10 +0300
Subject: [PATCH] net/sfc: fix xstats query by unsorted list of IDs
[ upstream commit 7d466e5fd8d13def57538d80a2f759c2c436dba0 ]
Device may support only some MAC stats. Add mapping from ids to subset
of supported MAC stats for each port.
Fixes: 73280c1e4ff ("net/sfc: support xstats retrieval by ID")
Signed-off-by: Ivan Ilchenko <ivan.ilchenko at oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton at xilinx.com>
---
drivers/net/sfc/sfc.h | 2 ++
drivers/net/sfc/sfc_ethdev.c | 44 ++++++++++++++++++------------------
drivers/net/sfc/sfc_port.c | 29 ++++++++++++++++++------
3 files changed, 46 insertions(+), 29 deletions(-)
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index 57a901b948..e12b4f56f2 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -152,6 +152,8 @@ struct sfc_port {
uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES];
+ unsigned int mac_stats_by_id[EFX_MAC_NSTATS];
+
uint64_t ipackets;
};
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 7317c30a71..c008a93af0 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -771,8 +771,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
struct sfc_port *port = &sa->port;
uint64_t *mac_stats;
- unsigned int nb_supported = 0;
- unsigned int nb_written = 0;
unsigned int i;
int ret;
int rc;
@@ -791,17 +789,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
mac_stats = port->mac_stats_buf;
- for (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < n); ++i) {
- if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i))
- continue;
-
- if (ids[nb_written] == nb_supported)
- values[nb_written++] = mac_stats[i];
+ SFC_ASSERT(port->mac_stats_nb_supported <=
+ RTE_DIM(port->mac_stats_by_id));
- ++nb_supported;
+ for (i = 0; i < n; i++) {
+ if (ids[i] < port->mac_stats_nb_supported) {
+ values[i] = mac_stats[port->mac_stats_by_id[ids[i]]];
+ } else {
+ ret = i;
+ goto unlock;
+ }
}
- ret = nb_written;
+ ret = n;
unlock:
sfc_adapter_unlock(sa);
@@ -816,8 +816,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
{
struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
struct sfc_port *port = &sa->port;
- unsigned int nb_supported = 0;
- unsigned int nb_written = 0;
+ unsigned int nb_supported;
unsigned int i;
if (unlikely(xstats_names == NULL && ids != NULL) ||
@@ -832,23 +831,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
return nb_supported;
}
- for (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < size); ++i) {
- if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i))
- continue;
-
- if (ids[nb_written] == nb_supported) {
- char *name = xstats_names[nb_written++].name;
+ SFC_ASSERT(port->mac_stats_nb_supported <=
+ RTE_DIM(port->mac_stats_by_id));
- strlcpy(name, efx_mac_stat_name(sa->nic, i),
+ for (i = 0; i < size; i++) {
+ if (ids[i] < port->mac_stats_nb_supported) {
+ strlcpy(xstats_names[i].name,
+ efx_mac_stat_name(sa->nic,
+ port->mac_stats_by_id[ids[i]]),
sizeof(xstats_names[0].name));
+ } else {
+ sfc_adapter_unlock(sa);
+ return i;
}
-
- ++nb_supported;
}
sfc_adapter_unlock(sa);
- return nb_written;
+ return size;
}
static int
diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
index 967fd3a266..ee59766208 100644
--- a/drivers/net/sfc/sfc_port.c
+++ b/drivers/net/sfc/sfc_port.c
@@ -156,6 +156,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps)
#endif
+static void
+sfc_port_fill_mac_stats_info(struct sfc_adapter *sa)
+{
+ unsigned int mac_stats_nb_supported = 0;
+ struct sfc_port *port = &sa->port;
+ unsigned int stat_idx;
+
+ efx_mac_stats_get_mask(sa->nic, port->mac_stats_mask,
+ sizeof(port->mac_stats_mask));
+
+ for (stat_idx = 0; stat_idx < EFX_MAC_NSTATS; ++stat_idx) {
+ if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, stat_idx))
+ continue;
+
+ port->mac_stats_by_id[mac_stats_nb_supported] = stat_idx;
+ mac_stats_nb_supported++;
+ }
+
+ port->mac_stats_nb_supported = mac_stats_nb_supported;
+}
+
int
sfc_port_start(struct sfc_adapter *sa)
{
@@ -164,7 +185,6 @@ sfc_port_start(struct sfc_adapter *sa)
uint32_t phy_adv_cap;
const uint32_t phy_pause_caps =
((1u << EFX_PHY_CAP_PAUSE) | (1u << EFX_PHY_CAP_ASYM));
- unsigned int i;
sfc_log_init(sa, "entry");
@@ -258,12 +278,7 @@ sfc_port_start(struct sfc_adapter *sa)
port->mac_stats_reset_pending = B_FALSE;
}
- efx_mac_stats_get_mask(sa->nic, port->mac_stats_mask,
- sizeof(port->mac_stats_mask));
-
- for (i = 0, port->mac_stats_nb_supported = 0; i < EFX_MAC_NSTATS; ++i)
- if (EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i))
- port->mac_stats_nb_supported++;
+ sfc_port_fill_mac_stats_info(sa);
port->mac_stats_update_generation = 0;
--
2.32.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2021-08-10 15:11:16.408690382 +0200
+++ 0088-net-sfc-fix-xstats-query-by-unsorted-list-of-IDs.patch 2021-08-10 15:11:13.106638735 +0200
@@ -1 +1 @@
-From 7d466e5fd8d13def57538d80a2f759c2c436dba0 Mon Sep 17 00:00:00 2001
+From 6fe317e2505898550ddb64ef84a80c9f6b1abb54 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7d466e5fd8d13def57538d80a2f759c2c436dba0 ]
+
@@ -10 +11,0 @@
-Cc: stable at dpdk.org
@@ -22 +23 @@
-index c7b0e5a30d..972d32606d 100644
+index 57a901b948..e12b4f56f2 100644
@@ -25 +26 @@
-@@ -141,6 +141,8 @@ struct sfc_port {
+@@ -152,6 +152,8 @@ struct sfc_port {
@@ -35 +36 @@
-index fca3f524a1..ae9304f90f 100644
+index 7317c30a71..c008a93af0 100644
@@ -38 +39 @@
-@@ -788,8 +788,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
+@@ -771,8 +771,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
@@ -47 +48 @@
-@@ -808,17 +806,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
+@@ -791,17 +789,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
@@ -75 +76 @@
-@@ -833,8 +833,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
+@@ -816,8 +816,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
@@ -85 +86 @@
-@@ -849,23 +848,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
+@@ -832,23 +831,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
@@ -121 +122 @@
-index cdc0f94f19..bb9e01d96b 100644
+index 967fd3a266..ee59766208 100644
@@ -124 +125 @@
-@@ -157,6 +157,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps)
+@@ -156,6 +156,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps)
@@ -152 +153 @@
-@@ -165,7 +186,6 @@ sfc_port_start(struct sfc_adapter *sa)
+@@ -164,7 +185,6 @@ sfc_port_start(struct sfc_adapter *sa)
@@ -160 +161 @@
-@@ -259,12 +279,7 @@ sfc_port_start(struct sfc_adapter *sa)
+@@ -258,12 +278,7 @@ sfc_port_start(struct sfc_adapter *sa)
More information about the stable
mailing list