search for: next_avail_idx

Displaying 20 results from an estimated 129 matches for "next_avail_idx".

2019 Aug 10
1
[PATCH v3 2/2] virtio: decrement avail idx with buffer detach for packed ring
On Fri, Aug 09, 2019 at 12:18:47PM +0530, Pankaj Gupta wrote: > This patch decrements 'next_avail_idx' count when detaching a buffer > from vq for packed ring code. Split ring code already does this in > virtqueue_detach_unused_buf_split function. This updates the > 'next_avail_idx' to the previous correct index after an unused buffer > is detatched from the vq. > > S...
2019 Aug 12
1
[PATCH v3 2/2] virtio: decrement avail idx with buffer detach for packed ring
On 2019/8/9 ??2:48, Pankaj Gupta wrote: > This patch decrements 'next_avail_idx' count when detaching a buffer > from vq for packed ring code. Split ring code already does this in > virtqueue_detach_unused_buf_split function. This updates the > 'next_avail_idx' to the previous correct index after an unused buffer > is detatched from the vq. > > Si...
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...16 new, old, off_wrap, flags, wrap_counter, event_idx; > bool needs_kick; > u32 snapshot; > > @@ -1015,9 +1015,19 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > * suppressions. */ > virtio_mb(vq->weak_barriers); > > + old = vq->next_avail_idx - vq->num_added; > + new = vq->next_avail_idx; > + vq->num_added = 0; > + > snapshot = *(u32 *)vq->vring_packed.device; > + off_wrap = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapshot & 0xffff)); > flags = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapsho...
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...16 new, old, off_wrap, flags, wrap_counter, event_idx; > bool needs_kick; > u32 snapshot; > > @@ -1015,9 +1015,19 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > * suppressions. */ > virtio_mb(vq->weak_barriers); > > + old = vq->next_avail_idx - vq->num_added; > + new = vq->next_avail_idx; > + vq->num_added = 0; > + > snapshot = *(u32 *)vq->vring_packed.device; > + off_wrap = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapshot & 0xffff)); > flags = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapsho...
2019 Aug 09
5
[PATCH v3 0/2] virtio_console: fix replug of virtio console port
This patch series fixes the issue with unplug/replug of a port in virtio console driver which fails with an error "Error allocating inbufs\n". Patch 1 makes use of 'virtqueue_detach_unused_buf' function to detach the unused buffers during port hotunplug time. Patch 2 updates the next avail index for packed ring code. Tested the packed ring code with the qemu virtio 1.1 device
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...t; > > > > u32 snapshot; > > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > * suppressions. */ > > > > > virtio_mb(vq->weak_barriers); > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > + new = vq->next_avail_idx; > > > > > + vq->num_added = 0; > > > > > + > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > > + off_wrap = virtio16_to_cpu(_vq->vdev, snap...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...t; > > > > u32 snapshot; > > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > * suppressions. */ > > > > > virtio_mb(vq->weak_barriers); > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > + new = vq->next_avail_idx; > > > > > + vq->num_added = 0; > > > > > + > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > > + off_wrap = virtio16_to_cpu(_vq->vdev, snap...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...wrap, flags; > > > bool needs_kick; > > > u32 snapshot; > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > * suppressions. */ > > > virtio_mb(vq->weak_barriers); > > > + old = vq->next_avail_idx - vq->num_added; > > > + new = vq->next_avail_idx; > > > + vq->num_added = 0; > > > + > > > snapshot = *(u32 *)vq->vring_packed.device; > > > + off_wrap = virtio16_to_cpu(_vq->vdev, snapshot & 0xffff); > > > flags = cpu_...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...wrap, flags; > > > bool needs_kick; > > > u32 snapshot; > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > * suppressions. */ > > > virtio_mb(vq->weak_barriers); > > > + old = vq->next_avail_idx - vq->num_added; > > > + new = vq->next_avail_idx; > > > + vq->num_added = 0; > > > + > > > snapshot = *(u32 *)vq->vring_packed.device; > > > + off_wrap = virtio16_to_cpu(_vq->vdev, snapshot & 0xffff); > > > flags = cpu_...
2018 May 16
0
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
..._virtqueue *vq = to_vvq(_vq); - u16 flags; + u16 new, old, off_wrap, flags, wrap_counter, event_idx; bool needs_kick; u32 snapshot; @@ -1015,9 +1015,19 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) * suppressions. */ virtio_mb(vq->weak_barriers); + old = vq->next_avail_idx - vq->num_added; + new = vq->next_avail_idx; + vq->num_added = 0; + snapshot = *(u32 *)vq->vring_packed.device; + off_wrap = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapshot & 0xffff)); flags = virtio16_to_cpu(_vq->vdev, (__virtio16)(snapshot >> 16)) & 0x3; + w...
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...> > > > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > > > * suppressions. */ > > > > > > > virtio_mb(vq->weak_barriers); > > > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > > > + new = vq->next_avail_idx; > > > > > > > + vq->num_added = 0; > > > > > > > + > > > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > > > &g...
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...> > > > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > > > * suppressions. */ > > > > > > > virtio_mb(vq->weak_barriers); > > > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > > > + new = vq->next_avail_idx; > > > > > > > + vq->num_added = 0; > > > > > > > + > > > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > > > &g...
2018 May 16
1
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...> - u16 flags; > + u16 new, old, off_wrap, flags; > bool needs_kick; > u32 snapshot; > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > * suppressions. */ > virtio_mb(vq->weak_barriers); > > + old = vq->next_avail_idx - vq->num_added; > + new = vq->next_avail_idx; > + vq->num_added = 0; > + > snapshot = *(u32 *)vq->vring_packed.device; > + off_wrap = virtio16_to_cpu(_vq->vdev, snapshot & 0xffff); > flags = cpu_to_virtio16(_vq->vdev, snapshot >> 16) & 0x3; &...
2018 May 16
0
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
..._USED_EVENT_IDX feature, we need to > > + * either clear the flags bit or point the event index at the next > > + * entry. Always update the event index to keep code simple. */ > > + > > + wrap_counter = vq->wrap_counter; > > + if (vq->last_used_idx > vq->next_avail_idx) > > Should this be ">=" consider rx refill may try to completely fill the ring? It seems that there are two cases that last_used_idx equals to next_avail_idx. The first one is that the ring is empty. And the second one is that the ring is full. Although in the first case, most...
2018 May 10
2
[RFC v3 3/5] virtio_ring: add packed ring support
...e're using some buffers from the free list. */ > + vq->vq.num_free -= descs_used; > + > + /* Update free pointer */ > + if (indirect) { > + n = head + 1; > + if (n >= vq->vring_packed.num) { > + n = 0; > + vq->wrap_counter ^= 1; > + } > + vq->next_avail_idx = n; > + } else > + vq->next_avail_idx = i; During testing zerocopy (out of order completion), I found driver may submit two identical buffer id to vhost. So the above code may not work well. Consider the case that driver adds 3 buffer and virtqueue size is 8. a) id = 0,count = 2,nex...
2018 May 10
2
[RFC v3 3/5] virtio_ring: add packed ring support
...e're using some buffers from the free list. */ > + vq->vq.num_free -= descs_used; > + > + /* Update free pointer */ > + if (indirect) { > + n = head + 1; > + if (n >= vq->vring_packed.num) { > + n = 0; > + vq->wrap_counter ^= 1; > + } > + vq->next_avail_idx = n; > + } else > + vq->next_avail_idx = i; During testing zerocopy (out of order completion), I found driver may submit two identical buffer id to vhost. So the above code may not work well. Consider the case that driver adds 3 buffer and virtqueue size is 8. a) id = 0,count = 2,nex...
2018 May 03
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...> > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > > > > * suppressions. */ > > > > > > > > virtio_mb(vq->weak_barriers); > > > > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > > > > + new = vq->next_avail_idx; > > > > > > > > + vq->num_added = 0; > > > > > > > > + > > > > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > &g...
2018 May 02
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...t; bool needs_kick; > > > > u32 snapshot; > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > * suppressions. */ > > > > virtio_mb(vq->weak_barriers); > > > > + old = vq->next_avail_idx - vq->num_added; > > > > + new = vq->next_avail_idx; > > > > + vq->num_added = 0; > > > > + > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > + off_wrap = virtio16_to_cpu(_vq->vdev, snapshot & 0xffff); >...
2019 Aug 09
0
[PATCH v3 2/2] virtio: decrement avail idx with buffer detach for packed ring
This patch decrements 'next_avail_idx' count when detaching a buffer from vq for packed ring code. Split ring code already does this in virtqueue_detach_unused_buf_split function. This updates the 'next_avail_idx' to the previous correct index after an unused buffer is detatched from the vq. Signed-off-by: Pankaj Gupta &lt...
2018 May 03
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...t; u32 snapshot; > > > > > > @@ -995,7 +995,12 @@ static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > > > > > > * suppressions. */ > > > > > > virtio_mb(vq->weak_barriers); > > > > > > + old = vq->next_avail_idx - vq->num_added; > > > > > > + new = vq->next_avail_idx; > > > > > > + vq->num_added = 0; > > > > > > + > > > > > > snapshot = *(u32 *)vq->vring_packed.device; > > > > > > + off_wrap = virtio16_...