[dpdk-dev] Bug in virtqueue_dequeue_burst_rx()
Yuanhan Liu
yuanhan.liu at linux.intel.com
Thu Dec 22 08:38:34 CET 2016
On Mon, Dec 19, 2016 at 09:59:33PM -0800, Gopakumar Choorakkot Edakkunni wrote:
> While I was testing virtio with ubuntu 14.04 kvm as host and dpdk16.07
> linux as guest, quite often I have seen that I get into a situation where
> virtio_recv_mergeable_pkts() gets into a forever loop, after sending
> traffic for a while. In the below API, I see that it clearly leads to a
> while loop, I am not quite familiar with virtio or mergeable buffers, so
> thought of checking with dpdk alias on the intent here.
>
> I checked the linux kernel virtio_net.c file which does the similar
> mergeable recieve, and the kernel code breaks out in case of error.
> Shouldnt dpdk be breaking out of here on error instead of continue ?
Yep, that looks buggy.
>
> virtio_recv_mergeable_pkts()
> {
> <snip>
> while (i < nb_used) {
> <snip>
> * num = virtqueue_dequeue_burst_rx(rxvq, rcv_pkts, len, 1);*
> * if (num != 1)*
> * continue;*
However, normally, virtqueue_dequeue_burst_rx() would be successful
here: the outer check (i < nb_used) somehow ascertains it.
Two options I can think of so far:
- will it go back working once you do "break" here?
- tell us how you managed to trigger this issue, so that I could
also reproduce it that I can debug it.
--yliu
More information about the dev
mailing list