search for: used_idx

Displaying 20 results from an estimated 154 matches for "used_idx".

2018 Jun 07
1
[RFC v6 4/5] virtio_ring: add event idx support in packed ring
On 2018?06?05? 15:40, Tiwei Bie wrote: > static bool virtqueue_enable_cb_delayed_packed(struct virtqueue *_vq) > { > struct vring_virtqueue *vq = to_vvq(_vq); > + u16 bufs, used_idx, wrap_counter; > > START_USE(vq); > > /* We optimistically turn back on interrupts, then check if there was > * more to do. */ > + /* Depending on the VIRTIO_RING_F_EVENT_IDX feature, we need to > + * either clear the flags bit or point the event index at the n...
2018 May 16
1
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...vring_need_event(off_wrap & ~(1<<15), new, old); > + else > + needs_kick = (flags != VRING_EVENT_F_DISABLE); > END_USE(vq); > return needs_kick; > } > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > if (vq->last_used_idx >= vq->vring_packed.num) > vq->last_used_idx -= vq->vring_packed.num; > > + /* If we expect an interrupt for the next entry, tell host > + * by writing event index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_...
2018 Sep 07
1
[PATCH net-next v2 4/5] virtio_ring: add event idx support in packed ring
...index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_flags_shadow == VRING_EVENT_F_DESC) > + virtio_store_mb(vq->weak_barriers, > + &vq->vring_packed.driver->off_wrap, > + cpu_to_virtio16(_vq->vdev, vq->last_used_idx | > + ((u16)vq->used_wrap_counter << 15))); > + > #ifdef DEBUG > vq->last_add_time_valid = false; > #endif > @@ -1213,8 +1235,18 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > /* We optimistically turn back on interrupts, th...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...unit of descriptor ring size, but old looks not. Thanks > + else > + needs_kick = (flags != VRING_EVENT_F_DISABLE); > END_USE(vq); > return needs_kick; > } > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > if (vq->last_used_idx >= vq->vring_packed.num) > vq->last_used_idx -= vq->vring_packed.num; > > + /* If we expect an interrupt for the next entry, tell host > + * by writing event index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...unit of descriptor ring size, but old looks not. Thanks > + else > + needs_kick = (flags != VRING_EVENT_F_DISABLE); > END_USE(vq); > return needs_kick; > } > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > if (vq->last_used_idx >= vq->vring_packed.num) > vq->last_used_idx -= vq->vring_packed.num; > > + /* If we expect an interrupt for the next entry, tell host > + * by writing event index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_...
2016 Jan 21
1
[PATCH] tools/virtio: add ringtest utilities
...unsigned short call_index; + unsigned char reserved1[HOST_GUEST_PADDING - 2]; +}; + +struct data { + void *buf; /* descriptor is writeable, we can't get buf from there */ + void *data; +} *data; + +struct desc *ring; +struct event *event; + +struct guest { + unsigned avail_idx; + unsigned last_used_idx; + unsigned num_free; + unsigned kicked_avail_idx; + unsigned char reserved[HOST_GUEST_PADDING - 12]; +} guest; + +struct host { + /* we do not need to track last avail index + * unless we have more than one in flight. + */ + unsigned used_idx; + unsigned called_used_idx; + unsigned char reserved...
2016 Jan 21
1
[PATCH] tools/virtio: add ringtest utilities
...unsigned short call_index; + unsigned char reserved1[HOST_GUEST_PADDING - 2]; +}; + +struct data { + void *buf; /* descriptor is writeable, we can't get buf from there */ + void *data; +} *data; + +struct desc *ring; +struct event *event; + +struct guest { + unsigned avail_idx; + unsigned last_used_idx; + unsigned num_free; + unsigned kicked_avail_idx; + unsigned char reserved[HOST_GUEST_PADDING - 12]; +} guest; + +struct host { + /* we do not need to track last avail index + * unless we have more than one in flight. + */ + unsigned used_idx; + unsigned called_used_idx; + unsigned char reserved...
2018 Jul 09
0
[PATCH net-next v1 4/5] virtio_ring: add event idx support in packed ring
...ost + * by writing event index and flush out the write before + * the read in the next get_buf call. */ + if (vq->event_flags_shadow == VRING_EVENT_F_DESC) + virtio_store_mb(vq->weak_barriers, + &vq->vring_packed.driver->off_wrap, + cpu_to_virtio16(_vq->vdev, vq->last_used_idx | + ((u16)vq->used_wrap_counter << 15))); + #ifdef DEBUG vq->last_add_time_valid = false; #endif @@ -1213,8 +1235,18 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) /* We optimistically turn back on interrupts, then check if there was * more to...
2018 Jul 11
0
[PATCH net-next v2 4/5] virtio_ring: add event idx support in packed ring
...ost + * by writing event index and flush out the write before + * the read in the next get_buf call. */ + if (vq->event_flags_shadow == VRING_EVENT_F_DESC) + virtio_store_mb(vq->weak_barriers, + &vq->vring_packed.driver->off_wrap, + cpu_to_virtio16(_vq->vdev, vq->last_used_idx | + ((u16)vq->used_wrap_counter << 15))); + #ifdef DEBUG vq->last_add_time_valid = false; #endif @@ -1213,8 +1235,18 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) /* We optimistically turn back on interrupts, then check if there was * more to...
2019 Oct 25
1
[PATCH] virtio_ring: fix packed ring event may missing
...a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -1499,9 +1499,6 @@ static bool virtqueue_enable_cb_delayed_packed(struct virtqueue *_vq) > * counter first before updating event flags. > */ > virtio_wmb(vq->weak_barriers); > - } else { > - used_idx = vq->last_used_idx; > - wrap_counter = vq->packed.used_wrap_counter; > } Is all this theorectical? Or did you actually see a problem and then fixed it? Because as far as I could see after this patch and with event index off, used_idx and wrap_counter will be used without being ini...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...gt; + else > > > + needs_kick = (flags != VRING_EVENT_F_DISABLE); > > > END_USE(vq); > > > return needs_kick; > > > } > > > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > > > if (vq->last_used_idx >= vq->vring_packed.num) > > > vq->last_used_idx -= vq->vring_packed.num; > > > + /* If we expect an interrupt for the next entry, tell host > > > + * by writing event index and flush out the write before > > > + * the read in the next get_buf c...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...gt; + else > > > + needs_kick = (flags != VRING_EVENT_F_DISABLE); > > > END_USE(vq); > > > return needs_kick; > > > } > > > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > > > if (vq->last_used_idx >= vq->vring_packed.num) > > > vq->last_used_idx -= vq->vring_packed.num; > > > + /* If we expect an interrupt for the next entry, tell host > > > + * by writing event index and flush out the write before > > > + * the read in the next get_buf c...
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...id *ret; > > START_USE(vq); > @@ -1138,6 +1151,19 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > ret = vq->desc_state[id].data; > detach_buf_packed(vq, last_used, id, ctx); > > + wrap_counter = vq->wrap_counter; > + if (vq->last_used_idx > vq->next_avail_idx) > + wrap_counter ^= 1; > + > + /* If we expect an interrupt for the next entry, tell host > + * by writing event index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_flags_shadow == VRING_EVENT_F_DESC)...
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...id *ret; > > START_USE(vq); > @@ -1138,6 +1151,19 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > ret = vq->desc_state[id].data; > detach_buf_packed(vq, last_used, id, ctx); > > + wrap_counter = vq->wrap_counter; > + if (vq->last_used_idx > vq->next_avail_idx) > + wrap_counter ^= 1; > + > + /* If we expect an interrupt for the next entry, tell host > + * by writing event index and flush out the write before > + * the read in the next get_buf call. */ > + if (vq->event_flags_shadow == VRING_EVENT_F_DESC)...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...= VRING_EVENT_F_DISABLE); > > > > > END_USE(vq); > > > > > return needs_kick; > > > > > } > > > > > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > > > > > if (vq->last_used_idx >= vq->vring_packed.num) > > > > > vq->last_used_idx -= vq->vring_packed.num; > > > > > + /* If we expect an interrupt for the next entry, tell host > > > > > + * by writing event index and flush out the write before > > > >...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...= VRING_EVENT_F_DISABLE); > > > > > END_USE(vq); > > > > > return needs_kick; > > > > > } > > > > > @@ -1116,6 +1124,15 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq, > > > > > if (vq->last_used_idx >= vq->vring_packed.num) > > > > > vq->last_used_idx -= vq->vring_packed.num; > > > > > + /* If we expect an interrupt for the next entry, tell host > > > > > + * by writing event index and flush out the write before > > > >...
2007 Nov 07
0
[PATCH] Fix used_idx wrap-around in virtio
The more_used() function compares the vq->vring.used->idx with last_used_idx. Since vq->vring.used->idx is a 16-bit integer, and last_used_idx is an unsigned int, this results in unpredictable behavior when vq->vring.used->idx wraps around. This patch corrects this by changing last_used_idx to the correct type. Signed-off-by: Anthony Liguori <aliguori@us.ib...
2007 Nov 07
0
[PATCH] Fix used_idx wrap-around in virtio
The more_used() function compares the vq->vring.used->idx with last_used_idx. Since vq->vring.used->idx is a 16-bit integer, and last_used_idx is an unsigned int, this results in unpredictable behavior when vq->vring.used->idx wraps around. This patch corrects this by changing last_used_idx to the correct type. Signed-off-by: Anthony Liguori <aliguori@us.ib...
2016 May 15
0
[PATCH] tools/virtio: add inorder option
...#ifdef INORDER */ + +#if defined(RING_POLL) && defined(INORDER) +#error "RING_POLL and INORDER are mutually exclusive" +#endif /* how much padding is needed to avoid false cache sharing */ #define HOST_GUEST_PADDING 0x80 @@ -35,7 +43,11 @@ struct guest { unsigned short last_used_idx; unsigned short num_free; unsigned short kicked_avail_idx; +#ifndef INORDER unsigned short free_head; +#else + unsigned short reserved_free_head; +#endif unsigned char reserved[HOST_GUEST_PADDING - 10]; } guest; @@ -66,8 +78,10 @@ void alloc_ring(void) guest.avail_idx = 0; guest.kick...
2016 May 15
0
[PATCH] tools/virtio: add inorder option
...#ifdef INORDER */ + +#if defined(RING_POLL) && defined(INORDER) +#error "RING_POLL and INORDER are mutually exclusive" +#endif /* how much padding is needed to avoid false cache sharing */ #define HOST_GUEST_PADDING 0x80 @@ -35,7 +43,11 @@ struct guest { unsigned short last_used_idx; unsigned short num_free; unsigned short kicked_avail_idx; +#ifndef INORDER unsigned short free_head; +#else + unsigned short reserved_free_head; +#endif unsigned char reserved[HOST_GUEST_PADDING - 10]; } guest; @@ -66,8 +78,10 @@ void alloc_ring(void) guest.avail_idx = 0; guest.kick...