On 2023/6/6 22:45, Ferruh Yigit wrote:
On 5/29/2023 3:26 AM, Jie Hai wrote:
Each stream has a read-only "disabled" field that control if this
stream should be used to forward. This field depends on states
of Rx/Tx queues, please see
commit 3c4426db54fc ("app/testpmd: do not poll stopped queues").
Currently, the testpmd and DPDK frameworks maintain queue state
separately. That of the primary process of testpmd are set by
deferred_start in the queue configuration. And that of the
framework(dev->data->rx_queue_state or dev->data->tx_queue_state)
is set when the driver enables/disables the queue, and it is
shared between the primary/secondary process.
If the deferred_start is set, the queue is disabled and the
corresponding queue state in the framework changes to stopped.
However, the queue state in the framework does not only come from
this. If the primary/secondary process stops a queue, the related
queue state will change, too. However, the primary process of
testpmd does not know the change brought by this operation.
Therefore, setting the queue state in the primary testpmd by only
the deferred_start is unsafe.
For example, Rx/Tx queues who are stopped before the operations of
stopping and starting port cannot forward packets after these
operations on primary process.
Therefore, the primary process should getting the queue state from
of the framework as the secondary process does, please see commit
e065c9aa3e05 ("app/testpmd: fix secondary process packet forwarding").
Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues")
Cc: sta...@dpdk.org
Signed-off-by: Jie Hai <haij...@huawei.com>
---
v1->v2:
1. Fix misspelled word 'deferred'.
2. Fix incorrect format of reference to commits.
v2->v3
1. Fix incorrect format of reference to commits.
Hi Jie,
Problem is not clear for me.
Can you please describe more what is not working?
.
Hi Ferruh,
Thanks for your question.
Here's an example.
step1: Start the app.
dpdk-testpmd -a 0000:35:00.0 --file-prefix=test --proc-type=auto -l
0-3 -- -i --rxq=10 --txq=10
step2: Perform the following steps and send traffic. As expected, queue
7 does not send or receive packets, and other queues can send or receive
packets.
port 0 rxq 7 stop
port 0 txq 7 stop
set fwd mac
start
step3: Perform the following steps and send traffic. All queues are
expected to send and receive packets normally, but that's not the case
for queue 7.
stop
port stop all
port start all
start
show port xstats all
In fact, only the value of rx_q7_packets for queue 7 is not zero, which
means queue 7 is enabled for the driver but is not involved in packet
receiving and forwarding by software. If we check queue state by command
'show rxq info 0 7' and 'show txq info 0 7', we see queue 7 is started
as other queues are.
Rx queue state: started
Tx queue state: started
The queue 7 is started but cannot forward. That's the problem.
Jie Hai,
Thanks