Thanks, it looks good to me. Acked-by: Chaoyong He <chaoyong...@corigine.com>
> -----Original Message----- > From: Jie Hai <haij...@huawei.com> > Sent: Friday, September 8, 2023 7:29 PM > To: dev@dpdk.org; Chaoyong He <chaoyong...@corigine.com>; Niklas > Soderlund <niklas.soderl...@corigine.com>; Chengwen Feng > <fengcheng...@huawei.com>; Lijun Ou <ouli...@huawei.com>; Konstantin > Ananyev > <"konstantin.v.ananyev@yandex.rukonstantin.ananyev"@huawei.com>; > Thomas Monjalon <tho...@monjalon.net>; Ferruh Yigit > <ferruh.yi...@intel.com> > Cc: haij...@huawei.com; lihuis...@huawei.com > Subject: [PATCH 23/36] net/nfp: fix Rx and Tx queue state > > [Some people who received this message don't often get email from > haij...@huawei.com. Learn why this is important at > https://aka.ms/LearnAboutSenderIdentification ] > > The DPDK framework reports the queue state, which is stored in > dev->data->tx_queue_state and dev->data->rx_queue_state. The > state is maintained by the driver. Users may determine whether a queue > participates in packet forwarding based on the state. > Therefore, the driver needs to modify the queue state in time according to the > actual situation. > > Fixes: 9ad9ff476cac ("ethdev: add queue state in queried queue information") > Cc: sta...@dpdk.org > > Signed-off-by: Jie Hai <haij...@huawei.com> > --- > drivers/net/nfp/flower/nfp_flower.c | 8 ++++++++ > drivers/net/nfp/flower/nfp_flower_representor.c | 12 ++++++++++++ > drivers/net/nfp/nfp_common.c | 2 ++ > drivers/net/nfp/nfp_ethdev.c | 6 ++++++ > drivers/net/nfp/nfp_ethdev_vf.c | 6 ++++++ > 5 files changed, 34 insertions(+) > > diff --git a/drivers/net/nfp/flower/nfp_flower.c > b/drivers/net/nfp/flower/nfp_flower.c > index 77dab864f319..eb7b40a6eb25 100644 > --- a/drivers/net/nfp/flower/nfp_flower.c > +++ b/drivers/net/nfp/flower/nfp_flower.c > @@ -85,6 +85,7 @@ int > nfp_flower_pf_start(struct rte_eth_dev *dev) { > int ret; > + uint16_t i; > uint32_t new_ctrl; > uint32_t update = 0; > struct nfp_net_hw *hw; > @@ -137,6 +138,11 @@ nfp_flower_pf_start(struct rte_eth_dev *dev) > return -EIO; > } > > + for (i = 0; i < dev->data->nb_rx_queues; i++) > + dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; > + for (i = 0; i < dev->data->nb_tx_queues; i++) > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STARTED; > + > return 0; > } > > @@ -159,11 +165,13 @@ nfp_flower_pf_stop(struct rte_eth_dev *dev) > for (i = 0; i < dev->data->nb_tx_queues; i++) { > this_tx_q = dev->data->tx_queues[i]; > nfp_net_reset_tx_queue(this_tx_q); > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STOPPED; > } > > for (i = 0; i < dev->data->nb_rx_queues; i++) { > this_rx_q = dev->data->rx_queues[i]; > nfp_net_reset_rx_queue(this_rx_q); > + dev->data->rx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STOPPED; > } > > if (rte_eal_process_type() == RTE_PROC_PRIMARY) diff --git > a/drivers/net/nfp/flower/nfp_flower_representor.c > b/drivers/net/nfp/flower/nfp_flower_representor.c > index 5f94d20f1b0c..3f97bc9f8a39 100644 > --- a/drivers/net/nfp/flower/nfp_flower_representor.c > +++ b/drivers/net/nfp/flower/nfp_flower_representor.c > @@ -303,6 +303,7 @@ nfp_flower_repr_dev_start(struct rte_eth_dev *dev) > { > struct nfp_flower_representor *repr; > struct nfp_app_fw_flower *app_fw_flower; > + uint16_t i; > > repr = dev->data->dev_private; > app_fw_flower = repr->app_fw_flower; @@ -314,6 +315,11 @@ > nfp_flower_repr_dev_start(struct rte_eth_dev *dev) > > nfp_flower_cmsg_port_mod(app_fw_flower, repr->port_id, true); > > + for (i = 0; i < dev->data->nb_rx_queues; i++) > + dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; > + for (i = 0; i < dev->data->nb_tx_queues; i++) > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STARTED; > + > return 0; > } > > @@ -322,6 +328,7 @@ nfp_flower_repr_dev_stop(struct rte_eth_dev *dev) > { > struct nfp_flower_representor *repr; > struct nfp_app_fw_flower *app_fw_flower; > + uint16_t i; > > repr = dev->data->dev_private; > app_fw_flower = repr->app_fw_flower; @@ -333,6 +340,11 @@ > nfp_flower_repr_dev_stop(struct rte_eth_dev *dev) > repr->nfp_idx, 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; > } > > diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c > index 5092e5869de4..c0d4708f2b3e 100644 > --- a/drivers/net/nfp/nfp_common.c > +++ b/drivers/net/nfp/nfp_common.c > @@ -1927,6 +1927,7 @@ nfp_net_stop_rx_queue(struct rte_eth_dev *dev) > for (i = 0; i < dev->data->nb_rx_queues; i++) { > this_rx_q = dev->data->rx_queues[i]; > nfp_net_reset_rx_queue(this_rx_q); > + dev->data->rx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STOPPED; > } > } > > @@ -1952,6 +1953,7 @@ nfp_net_stop_tx_queue(struct rte_eth_dev *dev) > for (i = 0; i < dev->data->nb_tx_queues; i++) { > this_tx_q = dev->data->tx_queues[i]; > nfp_net_reset_tx_queue(this_tx_q); > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STOPPED; > } > } > > diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c > index e3ff3d80873d..bdfd5530c55f 100644 > --- a/drivers/net/nfp/nfp_ethdev.c > +++ b/drivers/net/nfp/nfp_ethdev.c > @@ -65,6 +65,7 @@ nfp_net_start(struct rte_eth_dev *dev) > struct rte_eth_conf *dev_conf; > struct rte_eth_rxmode *rxmode; > uint32_t intr_vector; > + uint16_t i; > int ret; > > hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); > @@ -176,6 +177,11 @@ nfp_net_start(struct rte_eth_dev *dev) > > hw->ctrl = new_ctrl; > > + for (i = 0; i < dev->data->nb_rx_queues; i++) > + dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; > + for (i = 0; i < dev->data->nb_tx_queues; i++) > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STARTED; > + > return 0; > > error: > diff --git a/drivers/net/nfp/nfp_ethdev_vf.c > b/drivers/net/nfp/nfp_ethdev_vf.c index eaf815d06da5..3e8aeef51ab4 > 100644 > --- a/drivers/net/nfp/nfp_ethdev_vf.c > +++ b/drivers/net/nfp/nfp_ethdev_vf.c > @@ -39,6 +39,7 @@ nfp_netvf_start(struct rte_eth_dev *dev) > struct rte_eth_conf *dev_conf; > struct rte_eth_rxmode *rxmode; > uint32_t intr_vector; > + uint16_t i; > int ret; > > hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); > @@ -115,6 +116,11 @@ nfp_netvf_start(struct rte_eth_dev *dev) > > hw->ctrl = new_ctrl; > > + for (i = 0; i < dev->data->nb_rx_queues; i++) > + dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; > + for (i = 0; i < dev->data->nb_tx_queues; i++) > + dev->data->tx_queue_state[i] = > + RTE_ETH_QUEUE_STATE_STARTED; > + > return 0; > > error: > -- > 2.30.0