[PATCH] app/testpmd: fix invalid queue ID when start port

lihuisong (C) lihuisong at huawei.com
Tue Jul 4 04:22:47 CEST 2023


在 2023/7/3 19:02, Jie Hai 写道:
> Function update_queue_state updates queue state of all queues
> of all ports, using the queue num nb_rxq|nb_txq stored locally
> by testpmd. Error on invalid queue ID occurs if we start testpmd
> with two ports and detach-attach one of them and start the other
How do start the first port? start packet forwarding?
> port first. That's because the attached port has zero queues and
> that differs from the nb_rxq|nb_txq. The similar error happens
> in multi-process senoris if secondary process attaches a port
> and starts it.
>
> This patch updates queue state according to the num of queues
> reported by driver instead of testpmd.
>
> Fixes: 141a520b35f7 ("app/testpmd: fix primary process not polling all queues")
> Fixes: 5028f207a4fa ("app/testpmd: fix secondary process packet forwarding")
> Cc: stable at dpdk.org
>
> Signed-off-by: Jie Hai <haijie1 at huawei.com>
> ---
>   app/test-pmd/testpmd.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 1fc70650e0a4..c8ce67d0de9f 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -2479,13 +2479,22 @@ update_tx_queue_state(uint16_t port_id, uint16_t queue_id)
>   static void
>   update_queue_state(void)
>   {
> +	struct rte_port *port;
> +	uint16_t nb_rx_queues;
> +	uint16_t nb_tx_queues;
>   	portid_t pi;
>   	queueid_t qi;
>   
>   	RTE_ETH_FOREACH_DEV(pi) {
> -		for (qi = 0; qi < nb_rxq; qi++)
> +		port = &ports[pi];
> +		if (eth_dev_info_get_print_err(pi, &port->dev_info) != 0)
> +			continue;
Is this something to do for the dettach-attached port?
If so I don't think this is the root method.
Because the global ports[attached_port_id] isn't initialized, and the 
attached port isn't started.
And the first port cannot be start to forward(start_packet_forwarding 
will do check this).
Another possible reason is that the attached port status is incorrect.

Please take a look at the following patchset.
http://patches.dpdk.org/project/dpdk/list/?series=&submitter=2085&state=&q=&archive=&delegate=
> +
> +		nb_rx_queues = RTE_MIN(nb_rxq, port->dev_info.nb_rx_queues);
> +		nb_tx_queues = RTE_MIN(nb_txq, port->dev_info.nb_tx_queues);
> +		for (qi = 0; qi < nb_rx_queues; qi++)
>   			update_rx_queue_state(pi, qi);
> -		for (qi = 0; qi < nb_txq; qi++)
> +		for (qi = 0; qi < nb_tx_queues; qi++)
>   			update_tx_queue_state(pi, qi);
>   	}
>   }


More information about the dev mailing list