Hi Ferruh, >From: Ferruh Yigit <ferruh.yi...@intel.com> >Sent: Tuesday, May 05, 2020 2:01 AM > >On 5/5/2020 4:09 AM, Rasesh Mody wrote: >> Fix to assign dummy Rx/Tx handlers in dev_stop. >> For MTU set, assignment of the appropriate Rx/Tx handlers will be >> handled by dev_start/dev_stop. >> >> Fixes: 81f8804992c9 ("net/qede: enhance Rx CPU utilization") >> Fixes: 8de0c4201926 ("net/qede: fix odd number of queues usage in 100G >> mode") >> Cc: sta...@dpdk.org >> >> Signed-off-by: Rasesh Mody <rm...@marvell.com> >> Signed-off-by: Igor Russkikh <irussk...@marvell.com> >> --- >> drivers/net/qede/qede_ethdev.c | 33 ++++++++++++++++----------------- >> 1 file changed, 16 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/net/qede/qede_ethdev.c >> b/drivers/net/qede/qede_ethdev.c index e71fa1e6a..726daa3e3 100644 >> --- a/drivers/net/qede/qede_ethdev.c >> +++ b/drivers/net/qede/qede_ethdev.c >> @@ -320,13 +320,19 @@ qede_interrupt_handler(void *param) } >> >> static void >> -qede_assign_rxtx_handlers(struct rte_eth_dev *dev) >> +qede_assign_rxtx_handlers(struct rte_eth_dev *dev, bool is_dummy) >> { >> uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; >> struct qede_dev *qdev = dev->data->dev_private; >> struct ecore_dev *edev = &qdev->edev; >> bool use_tx_offload = false; >> >> + if (is_dummy) { >> + dev->rx_pkt_burst = qede_rxtx_pkts_dummy; >> + dev->tx_pkt_burst = qede_rxtx_pkts_dummy; >> + return; >> + } >> + >> if (ECORE_IS_CMT(edev)) { >> dev->rx_pkt_burst = qede_recv_pkts_cmt; >> dev->tx_pkt_burst = qede_xmit_pkts_cmt; @@ -1150,7 >+1156,9 @@ >> static int qede_dev_start(struct rte_eth_dev *eth_dev) >> /* Start/resume traffic */ >> qede_fastpath_start(edev); >> >> - qede_assign_rxtx_handlers(eth_dev); >> + /* Assign I/O handlers */ >> + qede_assign_rxtx_handlers(eth_dev, false); >> + >> DP_INFO(edev, "Device started\n"); >> >> return 0; >> @@ -1166,6 +1174,11 @@ static void qede_dev_stop(struct rte_eth_dev >> *eth_dev) >> >> PMD_INIT_FUNC_TRACE(edev); >> >> + /* Replace I/O functions with dummy ones. It cannot >> + * be set to NULL because rte_eth_rx_burst() doesn't check for NULL. >> + */ >> + qede_assign_rxtx_handlers(eth_dev, true); >> + > >Why need to assign dummy handlers on stop(), what happens if you keep >them as they are as many PMD does?
It helps in preventing crash when queues are still in use. Thanks! -Rasesh > >> /* Disable vport */ >> if (qede_activate_vport(eth_dev, false)) >> return; >> @@ -2316,11 +2329,6 @@ static int qede_set_mtu(struct rte_eth_dev >*dev, uint16_t mtu) >> dev->data->min_rx_buf_size); >> return -EINVAL; >> } >> - /* Temporarily replace I/O functions with dummy ones. It cannot >> - * be set to NULL because rte_eth_rx_burst() doesn't check for NULL. >> - */ >> - dev->rx_pkt_burst = qede_rxtx_pkts_dummy; >> - dev->tx_pkt_burst = qede_rxtx_pkts_dummy; >> if (dev->data->dev_started) { >> dev->data->dev_started = 0; >> qede_dev_stop(dev); >> @@ -2359,15 +2367,6 @@ static int qede_set_mtu(struct rte_eth_dev >*dev, uint16_t mtu) >> /* update max frame size */ >> dev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len; >> >> - /* Reassign back */ >> - qede_assign_rxtx_handlers(dev); >> - if (ECORE_IS_CMT(edev)) { >> - dev->rx_pkt_burst = qede_recv_pkts_cmt; >> - dev->tx_pkt_burst = qede_xmit_pkts_cmt; >> - } else { >> - dev->rx_pkt_burst = qede_recv_pkts; >> - dev->tx_pkt_burst = qede_xmit_pkts; >> - } >> return 0; >> } >> >> @@ -2570,7 +2569,7 @@ static int qede_common_dev_init(struct >rte_eth_dev *eth_dev, bool is_vf) >> strncpy((char *)params.name, QEDE_PMD_VER_PREFIX, >> QEDE_PMD_DRV_VER_STR_SIZE); >> >> - qede_assign_rxtx_handlers(eth_dev); >> + qede_assign_rxtx_handlers(eth_dev, true); >> eth_dev->tx_pkt_prepare = qede_xmit_prep_pkts; >> >> /* For CMT mode device do periodic polling for slowpath events. >>