[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