search for: wrap_count

Displaying 20 results from an estimated 121 matches for "wrap_count".

Did you mean: map_count
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...rs/virtio/virtio_ring.c > @@ -1006,7 +1006,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq, > static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > { > struct vring_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; >...
2018 May 16
2
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...rs/virtio/virtio_ring.c > @@ -1006,7 +1006,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq, > static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > { > struct vring_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; >...
2018 May 16
0
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
.../virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -1006,7 +1006,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq, static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) { struct vring_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 =...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...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 | > + (vq->wrap_counter << 15))); > + > #ifdef DEBUG > vq->last_add_time_valid = false; > #endif > @@ -1143,10 +1160,17 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > /* We optimistically turn back on interrupts, then check if there was >...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...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 | > + (vq->wrap_counter << 15))); > + > #ifdef DEBUG > vq->last_add_time_valid = false; > #endif > @@ -1143,10 +1160,17 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > /* We optimistically turn back on interrupts, then check if there was >...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...need_event() cares is the distance between > `new` and `old`, i.e. vq->num_added. So I think there > is nothing wrong with `old`. But the calculation of the > distance between `new` and `event_idx` isn't right when > `new` wraps. How do you think about the below code: > > wrap_counter = off_wrap >> 15; > event_idx = off_wrap & ~(1<<15); > if (wrap_counter != vq->wrap_counter) > event_idx -= vq->vring_packed.num; > > needs_kick = vring_need_event(event_idx, new, old); I suspect this hack won't work for non power of 2 ring. >...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...need_event() cares is the distance between > `new` and `old`, i.e. vq->num_added. So I think there > is nothing wrong with `old`. But the calculation of the > distance between `new` and `event_idx` isn't right when > `new` wraps. How do you think about the below code: > > wrap_counter = off_wrap >> 15; > event_idx = off_wrap & ~(1<<15); > if (wrap_counter != vq->wrap_counter) > event_idx -= vq->vring_packed.num; > > needs_kick = vring_need_event(event_idx, new, old); I suspect this hack won't work for non power of 2 ring. >...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...ew` and `old`, i.e. vq->num_added. So I think there > > > is nothing wrong with `old`. But the calculation of the > > > distance between `new` and `event_idx` isn't right when > > > `new` wraps. How do you think about the below code: > > > > > > wrap_counter = off_wrap >> 15; > > > event_idx = off_wrap & ~(1<<15); > > > if (wrap_counter != vq->wrap_counter) > > > event_idx -= vq->vring_packed.num; > > > > > > needs_kick = vring_need_event(event_idx, new, old); > > > &...
2018 May 02
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...ew` and `old`, i.e. vq->num_added. So I think there > > > is nothing wrong with `old`. But the calculation of the > > > distance between `new` and `event_idx` isn't right when > > > `new` wraps. How do you think about the below code: > > > > > > wrap_counter = off_wrap >> 15; > > > event_idx = off_wrap & ~(1<<15); > > > if (wrap_counter != vq->wrap_counter) > > > event_idx -= vq->vring_packed.num; > > > > > > needs_kick = vring_need_event(event_idx, new, old); > > > &...
2018 Oct 12
2
[PATCH net-next V2 6/8] vhost: packed ring support
...ong vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg > vq->last_avail_idx = s.num; > /* Forget the cached index value. */ > vq->avail_idx = vq->last_avail_idx; > + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) { > + vq->last_avail_wrap_counter = wrap_counter; > + vq->avail_wrap_counter = vq->last_avail_wrap_counter; > + } > break; > case VHOST_GET_VRING_BASE: > s.index = idx; > s.num = vq->last_avail_idx; > + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) > + s.num |= vq->last_avai...
2018 Oct 12
2
[PATCH net-next V2 6/8] vhost: packed ring support
...ong vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg > vq->last_avail_idx = s.num; > /* Forget the cached index value. */ > vq->avail_idx = vq->last_avail_idx; > + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) { > + vq->last_avail_wrap_counter = wrap_counter; > + vq->avail_wrap_counter = vq->last_avail_wrap_counter; > + } > break; > case VHOST_GET_VRING_BASE: > s.index = idx; > s.num = vq->last_avail_idx; > + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) > + s.num |= vq->last_avai...
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...here > > > > > is nothing wrong with `old`. But the calculation of the > > > > > distance between `new` and `event_idx` isn't right when > > > > > `new` wraps. How do you think about the below code: > > > > > > > > > > wrap_counter = off_wrap >> 15; > > > > > event_idx = off_wrap & ~(1<<15); > > > > > if (wrap_counter != vq->wrap_counter) > > > > > event_idx -= vq->vring_packed.num; > > > > > > > > > > needs_kick = vring_...
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...here > > > > > is nothing wrong with `old`. But the calculation of the > > > > > distance between `new` and `event_idx` isn't right when > > > > > `new` wraps. How do you think about the below code: > > > > > > > > > > wrap_counter = off_wrap >> 15; > > > > > event_idx = off_wrap & ~(1<<15); > > > > > if (wrap_counter != vq->wrap_counter) > > > > > event_idx -= vq->vring_packed.num; > > > > > > > > > > needs_kick = vring_...
2018 Sep 07
1
[PATCH net-next v2 4/5] virtio_ring: add event idx support in packed ring
...ivers/virtio/virtio_ring.c > @@ -1050,7 +1050,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq, > static bool virtqueue_kick_prepare_packed(struct virtqueue *_vq) > { > struct vring_virtqueue *vq = to_vvq(_vq); > - u16 flags; > + u16 new, old, off_wrap, flags, wrap_counter, event_idx; > bool needs_kick; > u32 snapshot; > > @@ -1059,9 +1059,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...
2018 May 16
0
[RFC v4 4/5] virtio_ring: add event idx support in packed ring
...? 16:37, Tiwei Bie wrote: [...] > > @@ -1160,15 +1186,27 @@ static void virtqueue_disable_cb_packed(struct virtqueue *_vq) > > static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > { > > struct vring_virtqueue *vq = to_vvq(_vq); > > + u16 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_USED_EVENT_IDX feature, we need to > > + * either clear the flags bit or point the event index at the...
2018 May 16
1
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...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 | > + (vq->wrap_counter << 15))); > + > #ifdef DEBUG > vq->last_add_time_valid = false; > #endif > @@ -1143,10 +1160,17 @@ static unsigned virtqueue_enable_cb_prepare_packed(struct virtqueue *_vq) > > /* We optimistically turn back on interrupts, then check if there was >...
2018 Oct 15
2
[PATCH net-next V2 6/8] vhost: packed ring support
...unsigned int ioctl, void __user *arg >>> vq->last_avail_idx = s.num; >>> /* Forget the cached index value. */ >>> vq->avail_idx = vq->last_avail_idx; >>> + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) { >>> + vq->last_avail_wrap_counter = wrap_counter; >>> + vq->avail_wrap_counter = vq->last_avail_wrap_counter; >>> + } >>> break; >>> case VHOST_GET_VRING_BASE: >>> s.index = idx; >>> s.num = vq->last_avail_idx; >>> + if (vhost_has_feature(v...
2018 Oct 15
2
[PATCH net-next V2 6/8] vhost: packed ring support
...unsigned int ioctl, void __user *arg >>> vq->last_avail_idx = s.num; >>> /* Forget the cached index value. */ >>> vq->avail_idx = vq->last_avail_idx; >>> + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) { >>> + vq->last_avail_wrap_counter = wrap_counter; >>> + vq->avail_wrap_counter = vq->last_avail_wrap_counter; >>> + } >>> break; >>> case VHOST_GET_VRING_BASE: >>> s.index = idx; >>> s.num = vq->last_avail_idx; >>> + if (vhost_has_feature(v...
2018 Apr 13
3
[RFC v2] virtio: support packed ring
...t; +{ > > + struct vring_virtqueue *vq = to_vvq(_vq); > > + struct vring_packed_desc *desc; > > + struct scatterlist *sg; > > + unsigned int i, n, descs_used, uninitialized_var(prev), err_idx; > > + __virtio16 uninitialized_var(head_flags), flags; > > + int head, wrap_counter; > > + bool indirect; > > + > > + START_USE(vq); > > + > > + BUG_ON(data == NULL); > > + BUG_ON(ctx && vq->indirect); > > + > > + if (unlikely(vq->broken)) { > > + END_USE(vq); > > + return -EIO; > > + } > > +...
2018 Apr 13
3
[RFC v2] virtio: support packed ring
...t; +{ > > + struct vring_virtqueue *vq = to_vvq(_vq); > > + struct vring_packed_desc *desc; > > + struct scatterlist *sg; > > + unsigned int i, n, descs_used, uninitialized_var(prev), err_idx; > > + __virtio16 uninitialized_var(head_flags), flags; > > + int head, wrap_counter; > > + bool indirect; > > + > > + START_USE(vq); > > + > > + BUG_ON(data == NULL); > > + BUG_ON(ctx && vq->indirect); > > + > > + if (unlikely(vq->broken)) { > > + END_USE(vq); > > + return -EIO; > > + } > > +...