The 'nfp_eth_set_configured()' function is not always success, so need to check the return value of it.
Signed-off-by: Chaoyong He <chaoyong...@corigine.com> Reviewed-by: Long Wu <long...@corigine.com> Reviewed-by: Peng Zhang <peng.zh...@corigine.com> --- .../net/nfp/flower/nfp_flower_representor.c | 18 +++++++++++++----- drivers/net/nfp/nfp_ethdev.c | 4 +++- drivers/net/nfp/nfp_net_common.c | 5 ++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index d1558b905c..eb0a02874b 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -83,6 +83,7 @@ nfp_flower_repr_dev_infos_get(__rte_unused struct rte_eth_dev *dev, static int nfp_flower_repr_dev_start(struct rte_eth_dev *dev) { + int ret; uint16_t i; struct nfp_net_hw_priv *hw_priv; struct nfp_flower_representor *repr; @@ -92,8 +93,11 @@ nfp_flower_repr_dev_start(struct rte_eth_dev *dev) hw_priv = dev->process_private; app_fw_flower = repr->app_fw_flower; - if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) - nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 1); + if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { + ret = nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 1); + if (ret < 0) + return ret; + } nfp_flower_cmsg_port_mod(app_fw_flower, repr->port_id, true); @@ -109,6 +113,7 @@ static int nfp_flower_repr_dev_stop(struct rte_eth_dev *dev) { uint16_t i; + int ret = 0; struct nfp_net_hw_priv *hw_priv; struct nfp_flower_representor *repr; struct nfp_app_fw_flower *app_fw_flower; @@ -119,15 +124,18 @@ nfp_flower_repr_dev_stop(struct rte_eth_dev *dev) nfp_flower_cmsg_port_mod(app_fw_flower, repr->port_id, false); - if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) - nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 0); + if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { + ret = nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 0); + if (ret == 1) + ret = 0; + } for (i = 0; i < dev->data->nb_rx_queues; i++) dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; for (i = 0; i < dev->data->nb_tx_queues; i++) dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; - return 0; + return ret; } static int diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 2fe6b1a292..302149e9dc 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -495,7 +495,9 @@ nfp_net_start(struct rte_eth_dev *dev) } /* Configure the physical port up */ - nfp_eth_set_configured(pf_dev->cpp, net_hw->nfp_idx, 1); + ret = nfp_eth_set_configured(pf_dev->cpp, net_hw->nfp_idx, 1); + if (ret < 0) + goto error; for (i = 0; i < dev->data->nb_rx_queues; i++) dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index 86a1fbfaf2..80d60515d8 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -2427,6 +2427,7 @@ nfp_net_ctrl_bar_size_set(struct nfp_pf_dev *pf_dev) int nfp_net_stop(struct rte_eth_dev *dev) { + int ret; struct nfp_net_hw *hw; struct nfp_net_hw_priv *hw_priv; @@ -2439,7 +2440,9 @@ nfp_net_stop(struct rte_eth_dev *dev) nfp_net_stop_tx_queue(dev); nfp_net_stop_rx_queue(dev); - nfp_eth_set_configured(hw_priv->pf_dev->cpp, hw->nfp_idx, 0); + ret = nfp_eth_set_configured(hw_priv->pf_dev->cpp, hw->nfp_idx, 0); + if (ret < 0) + return ret; return 0; } -- 2.39.1