Dear DPDK experts.

Thank you very much for your excellent work and great contributions.


I have a question about distributor library source code.   
/dpdk/lib/librte_distributor/rte_distributor.c

In rte_distributor_process(),

rte_distributor_process() { mbufs[] -> d->backlog -> d->bufs }   
=> lcore_worker() reads d->bufs (with 0x0 empty flag packet) and sets 
response bit(RTE_DISTRIB_GET_BUF) of a received packet (d->bufs).

When the first packet arrives at rte_distributor_process(), the match value is 
0.
And it is not enqueued in d->backlog nor in d->bufs    because the match 
value equals 0 .

The received first packet is never enqueued to d->bufs until the 
lcore_worker() returns the packet bufs (with the response 
bit(RTE_DISTRIB_GET_BUF) of bufs packet is set).

Since the lcore_worker cannot return packet if it cannot receive packet (Since 
the lcore_worker only reads the received packet with 0x0 flag).

It seems to be a deadlock.

Thus. first packet is never processed, I think.


Would you check this? 

Am I wrong? 

Does the lcore_worker() return packet even though it does not have received 
packet?


Thank you very much. 

Sincerely Yours,

Ick-Sung Choi.

Reply via email to