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?

>       /* 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.
> 

Reply via email to