patch 'net/nfp: fix VF link speed problem' has been queued to stable release 23.11.4
Xueming Li
xuemingl at nvidia.com
Tue Apr 8 10:16:24 CEST 2025
Hi,
FYI, your patch has been queued to stable release 23.11.4
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 04/10/25. 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://git.dpdk.org/dpdk-stable/log/?h=23.11-staging
This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=23.11-staging&id=973f287b205f49b94aa117e1e0109dd3869a052e
Thanks.
Xueming Li <xuemingl at nvidia.com>
---
>From 973f287b205f49b94aa117e1e0109dd3869a052e Mon Sep 17 00:00:00 2001
From: Long Wu <long.wu at corigine.com>
Date: Mon, 24 Feb 2025 16:01:42 +0800
Subject: [PATCH] net/nfp: fix VF link speed problem
Cc: Xueming Li <xuemingl at nvidia.com>
[ upstream commit c43d2aab426bdc6e22142b4c5667d6d1634248de ]
The previous logic does not update the 'rte_eth_device' link status
when the port link status changed, which cause the firmware won't be
notified by the PMD.
Furthermore, the physical representor port should also notify firmware
its current speed with multi-pf firmware.
Fix these problems by modify the related logic, also add needed helper
function at the same time.
Fixes: eae7dadbe987 ("net/nfp: update link status reporting")
Signed-off-by: Long Wu <long.wu at corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he at corigine.com>
---
drivers/net/nfp/flower/nfp_flower_ctrl.c | 14 ++++++++++++++
drivers/net/nfp/flower/nfp_flower_representor.c | 2 +-
drivers/net/nfp/flower/nfp_flower_representor.h | 2 ++
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c
index 102daa3d70..574e4fa056 100644
--- a/drivers/net/nfp/flower/nfp_flower_ctrl.c
+++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c
@@ -419,6 +419,8 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_app_fw_flower *app_fw_flower,
struct rte_mbuf *pkt_burst)
{
uint32_t port;
+ uint16_t link_status;
+ struct rte_eth_dev *eth_dev;
struct nfp_flower_representor *repr;
struct nfp_flower_cmsg_port_mod *msg;
@@ -447,11 +449,23 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_app_fw_flower *app_fw_flower,
}
repr->link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX;
+
+ link_status = repr->link.link_status;
if ((msg->info & NFP_FLOWER_CMSG_PORT_MOD_INFO_LINK) != 0)
repr->link.link_status = RTE_ETH_LINK_UP;
else
repr->link.link_status = RTE_ETH_LINK_DOWN;
+ if (link_status != repr->link.link_status) {
+ eth_dev = rte_eth_dev_get_by_name(repr->name);
+ if (eth_dev == NULL) {
+ PMD_DRV_LOG(ERR, "Can not get ethernet device by name %s.", repr->name);
+ return -EINVAL;
+ }
+
+ nfp_flower_repr_link_update(eth_dev, 0);
+ }
+
return 0;
}
diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c
index ada28d07c6..a86b6bb580 100644
--- a/drivers/net/nfp/flower/nfp_flower_representor.c
+++ b/drivers/net/nfp/flower/nfp_flower_representor.c
@@ -18,7 +18,7 @@ enum nfp_repr_type {
NFP_REPR_TYPE_MAX, /*<< Number of representor types */
};
-static int
+int
nfp_flower_repr_link_update(struct rte_eth_dev *dev,
__rte_unused int wait_to_complete)
{
diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h
index 8053617562..ea912ddcd4 100644
--- a/drivers/net/nfp/flower/nfp_flower_representor.h
+++ b/drivers/net/nfp/flower/nfp_flower_representor.h
@@ -24,5 +24,7 @@ struct nfp_flower_representor {
};
int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower);
+int nfp_flower_repr_link_update(struct rte_eth_dev *dev,
+ __rte_unused int wait_to_complete);
#endif /* __NFP_FLOWER_REPRESENTOR_H__ */
--
2.34.1
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-04-08 15:39:07.269372547 +0800
+++ 0047-net-nfp-fix-VF-link-speed-problem.patch 2025-04-08 15:39:06.056436539 +0800
@@ -1 +1 @@
-From c43d2aab426bdc6e22142b4c5667d6d1634248de Mon Sep 17 00:00:00 2001
+From 973f287b205f49b94aa117e1e0109dd3869a052e Mon Sep 17 00:00:00 2001
@@ -3,2 +3,5 @@
-Date: Wed, 18 Dec 2024 14:52:55 +0800
-Subject: [PATCH] net/nfp: fix VF link speed
+Date: Mon, 24 Feb 2025 16:01:42 +0800
+Subject: [PATCH] net/nfp: fix VF link speed problem
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit c43d2aab426bdc6e22142b4c5667d6d1634248de ]
@@ -16 +18,0 @@
-Cc: stable at dpdk.org
@@ -21,5 +23,4 @@
- drivers/net/nfp/flower/nfp_flower_ctrl.c | 14 ++++++++++++++
- .../net/nfp/flower/nfp_flower_representor.c | 19 +++++++++++++++++--
- .../net/nfp/flower/nfp_flower_representor.h | 3 +++
- drivers/net/nfp/nfp_net_common.c | 11 ++++++++++-
- 4 files changed, 44 insertions(+), 3 deletions(-)
+ drivers/net/nfp/flower/nfp_flower_ctrl.c | 14 ++++++++++++++
+ drivers/net/nfp/flower/nfp_flower_representor.c | 2 +-
+ drivers/net/nfp/flower/nfp_flower_representor.h | 2 ++
+ 3 files changed, 17 insertions(+), 1 deletion(-)
@@ -28 +29 @@
-index 92887ce1be..21bf26b738 100644
+index 102daa3d70..574e4fa056 100644
@@ -31 +32,2 @@
-@@ -420,6 +420,8 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_net_hw_priv *hw_priv,
+@@ -419,6 +419,8 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_app_fw_flower *app_fw_flower,
+ struct rte_mbuf *pkt_burst)
@@ -34 +35,0 @@
- uint32_t index;
@@ -39,2 +40,2 @@
- struct nfp_app_fw_flower *app_fw_flower;
-@@ -456,11 +458,23 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_net_hw_priv *hw_priv,
+
+@@ -447,11 +449,23 @@ nfp_flower_cmsg_port_mod_rx(struct nfp_app_fw_flower *app_fw_flower,
@@ -54 +55 @@
-+ PMD_DRV_LOG(ERR, "Can not get 'eth_dev' by name %s.", repr->name);
++ PMD_DRV_LOG(ERR, "Can not get ethernet device by name %s.", repr->name);
@@ -65 +66 @@
-index 4017f602a2..9601aa5f96 100644
+index ada28d07c6..a86b6bb580 100644
@@ -68,2 +69,2 @@
-@@ -24,6 +24,21 @@ struct nfp_repr_init {
- struct nfp_net_hw_priv *hw_priv;
+@@ -18,7 +18,7 @@ enum nfp_repr_type {
+ NFP_REPR_TYPE_MAX, /*<< Number of representor types */
@@ -72,22 +72,0 @@
-+bool
-+nfp_flower_repr_is_pf(struct rte_eth_dev *dev)
-+{
-+ struct nfp_net_hw_priv *hw_priv;
-+ struct nfp_flower_representor *repr;
-+
-+ hw_priv = dev->process_private;
-+ repr = dev->data->dev_private;
-+
-+ if (hw_priv->pf_dev->multi_pf.enabled)
-+ return repr->repr_type == NFP_REPR_TYPE_PHYS_PORT;
-+ else
-+ return repr->repr_type == NFP_REPR_TYPE_PF;
-+}
-+
- static int
- nfp_repr_get_eeprom_len(struct rte_eth_dev *dev)
- {
-@@ -112,7 +127,7 @@ nfp_flower_repr_led_off(struct rte_eth_dev *dev)
- return nfp_net_led_off(dev);
- }
-
@@ -99,9 +77,0 @@
-@@ -125,7 +140,7 @@ nfp_flower_repr_link_update(struct rte_eth_dev *dev,
-
- ret = nfp_net_link_update_common(dev, link, link->link_status);
-
-- if (repr->repr_type == NFP_REPR_TYPE_PF)
-+ if (nfp_flower_repr_is_pf(dev))
- nfp_net_notify_port_speed(repr->app_fw_flower->pf_hw, link);
-
- return ret;
@@ -109 +79 @@
-index 3f6ee32fe4..a7416eccab 100644
+index 8053617562..ea912ddcd4 100644
@@ -112,4 +82,4 @@
-@@ -32,5 +32,8 @@ int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower,
- bool nfp_flower_repr_is_vf(struct nfp_flower_representor *repr);
- bool nfp_flower_repr_is_phy(struct nfp_flower_representor *repr);
- int nfp_flower_repr_stats_reset(struct rte_eth_dev *ethdev);
+@@ -24,5 +24,7 @@ struct nfp_flower_representor {
+ };
+
+ int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower);
@@ -118 +87,0 @@
-+bool nfp_flower_repr_is_pf(struct rte_eth_dev *dev);
@@ -121,29 +89,0 @@
-diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c
-index e68ce68229..aaa515bac2 100644
---- a/drivers/net/nfp/nfp_net_common.c
-+++ b/drivers/net/nfp/nfp_net_common.c
-@@ -159,6 +159,15 @@ static const uint32_t nfp_net_link_speed_nfp2rte[] = {
- [NFP_NET_CFG_STS_LINK_RATE_100G] = RTE_ETH_SPEED_NUM_100G,
- };
-
-+static bool
-+nfp_net_is_pf(struct rte_eth_dev *dev)
-+{
-+ if (rte_eth_dev_is_repr(dev))
-+ return nfp_flower_repr_is_pf(dev);
-+
-+ return ((struct nfp_net_hw_priv *)dev->process_private)->is_pf;
-+}
-+
- static size_t
- nfp_net_link_speed_rte2nfp(uint32_t speed)
- {
-@@ -826,7 +835,7 @@ nfp_net_link_update_common(struct rte_eth_dev *dev,
-
- hw_priv = dev->process_private;
- if (link->link_status == RTE_ETH_LINK_UP) {
-- if (hw_priv->is_pf)
-+ if (nfp_net_is_pf(dev))
- nfp_net_pf_speed_update(dev, hw_priv, link);
- else
- nfp_net_vf_speed_update(link, link_status);
More information about the stable
mailing list