[dpdk-dev] [PATCH v7 5/8] net/virtio: implement transmit path for packed queues
Jens Freimann
jfreimann at redhat.com
Fri Oct 12 09:24:29 CEST 2018
On Thu, Oct 11, 2018 at 07:31:57PM +0200, Maxime Coquelin wrote:
>
>I'm testing your series, and it gets stuck after 256 packets in transmit
>path. When it happens, descs flags indicate it has been made available
>by the driver (desc->flags = 0x80), but it is not consistent with the
>expected wrap counter value (0).
>
>Not sure this is the root cause, but it seems below code is broken:
>
>On 10/03/2018 03:11 PM, Jens Freimann wrote:
[snip]
>+
>>+ do {
>>+ if (idx >= vq->vq_nentries) {
>>+ idx = 0;
>>+ vq->vq_ring.avail_wrap_counter ^= 1;
>>+ }
>>+ start_dp[idx].addr = VIRTIO_MBUF_DATA_DMA_ADDR(cookie, vq);
>>+ start_dp[idx].len = cookie->data_len;
>>+ start_dp[idx].flags = cookie->next ? VRING_DESC_F_NEXT : 0;
>>+ start_dp[idx].flags |=
>>+ VRING_DESC_F_AVAIL(vq->vq_ring.avail_wrap_counter) |
>>+ VRING_DESC_F_USED(!vq->vq_ring.avail_wrap_counter);
>>+ if (use_indirect) {
>>+ if (++idx >= (seg_num + 1))
>>+ break;
>>+ } else {
>>+ dxp = &vq->vq_descx[idx];
>>+ idx = dxp->next;
>>+ }
>
>Imagine current idx is 255, dxp->next will give idx 0, right?
No it will be VQ_RING_DESC_CHAIN_END which is defined as 32768.
>In that case, for desc[0], on next iteration, the flags won't be set
>available properly, as vq->vq_ring.avail_wrap_counter isn't updated.
It will wrap because VQ_RING_DESC_CHAIN_END is > ring size.
I can't reproduce what you see. Do you test with txonly fwd mode?
regards,
Jens
More information about the dev
mailing list