Displaying 20 results from an estimated 38 matches for "vhost_vring_packed_need_ev".
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...ger, old will
> be a big number.
>
> Best regards,
> Tiwei Bie
>
How about just do something like vhost:
static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
{
??? if (new > old)
??? ??? return new - old;
??? return? (new + vq->num - old);
}
static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
??? ??? ??? ??? ??? ? __u16 event_off, __u16 new,
??? ??? ??? ??? ??? ? __u16 old)
{
??? return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
??? ?????? (__u16)vhost_idx_diff(vq, new, old);
}
?
2018 May 03
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...ger, old will
> be a big number.
>
> Best regards,
> Tiwei Bie
>
How about just do something like vhost:
static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
{
??? if (new > old)
??? ??? return new - old;
??? return? (new + vq->num - old);
}
static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
??? ??? ??? ??? ??? ? __u16 event_off, __u16 new,
??? ??? ??? ??? ??? ? __u16 old)
{
??? return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
??? ?????? (__u16)vhost_idx_diff(vq, new, old);
}
?
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...n't match
> > > > without the need to try to add vq.num here.
> > > >
> > > > Thanks
> > > Sorry, looks like the following should work, we need add vq.num if
> > > used_wrap_counter does not match:
> > >
> > > static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> > > ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
> > > ??? ??? ??? ??? ??? ? __u16 old)
> > > {
> > > ??? bool wrap = off_wrap >> 15;
> > > ??? int off = off_wrap & ~(1 << 15);
> > > ???...
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...n't match
> > > > without the need to try to add vq.num here.
> > > >
> > > > Thanks
> > > Sorry, looks like the following should work, we need add vq.num if
> > > used_wrap_counter does not match:
> > >
> > > static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> > > ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
> > > ??? ??? ??? ??? ??? ? __u16 old)
> > > {
> > > ??? bool wrap = off_wrap >> 15;
> > > ??? int off = off_wrap & ~(1 << 15);
> > > ???...
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...gt; need to compare the warp counter and return false if it doesn't match
> > without the need to try to add vq.num here.
> >
> > Thanks
>
> Sorry, looks like the following should work, we need add vq.num if
> used_wrap_counter does not match:
>
> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
> ??? ??? ??? ??? ??? ? __u16 old)
> {
> ??? bool wrap = off_wrap >> 15;
> ??? int off = off_wrap & ~(1 << 15);
> ??? __u16 d1, d2;
>
> ??? if (wrap != vq->used_wrap_counter...
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...gt; need to compare the warp counter and return false if it doesn't match
> > without the need to try to add vq.num here.
> >
> > Thanks
>
> Sorry, looks like the following should work, we need add vq.num if
> used_wrap_counter does not match:
>
> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
> ??? ??? ??? ??? ??? ? __u16 old)
> {
> ??? bool wrap = off_wrap >> 15;
> ??? int off = off_wrap & ~(1 << 15);
> ??? __u16 d1, d2;
>
> ??? if (wrap != vq->used_wrap_counter...
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...; How about just do something like vhost:
>>
>> static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
>> {
>> ??? if (new > old)
>> ??? ??? return new - old;
>> ??? return? (new + vq->num - old);
>> }
>>
>> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
>> ??? ??? ??? ??? ??? ? __u16 event_off, __u16 new,
>> ??? ??? ??? ??? ??? ? __u16 old)
>> {
>> ??? return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
>> ??? ?????? (__u16)vhost_idx_diff(vq, new, old);
>> }
>>
&g...
2018 May 08
2
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...; How about just do something like vhost:
>>
>> static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
>> {
>> ??? if (new > old)
>> ??? ??? return new - old;
>> ??? return? (new + vq->num - old);
>> }
>>
>> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
>> ??? ??? ??? ??? ??? ? __u16 event_off, __u16 new,
>> ??? ??? ??? ??? ??? ? __u16 old)
>> {
>> ??? return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
>> ??? ?????? (__u16)vhost_idx_diff(vq, new, old);
>> }
>>
&g...
2018 May 08
1
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...add vq.num here.
> > > > > >
> > > > > > Thanks
> > > > > Sorry, looks like the following should work, we need add vq.num if
> > > > > used_wrap_counter does not match:
> > > > >
> > > > > static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> > > > > ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
> > > > > ??? ??? ??? ??? ??? ? __u16 old)
> > > > > {
> > > > > ??? bool wrap = off_wrap >> 15;
> > > > > ??? int off =...
2018 May 03
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...; > Tiwei Bie
> >
>
> How about just do something like vhost:
>
> static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
> {
> ??? if (new > old)
> ??? ??? return new - old;
> ??? return? (new + vq->num - old);
> }
>
> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
> ??? ??? ??? ??? ??? ? __u16 event_off, __u16 new,
> ??? ??? ??? ??? ??? ? __u16 old)
> {
> ??? return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
> ??? ?????? (__u16)vhost_idx_diff(vq, new, old);
> }
>
> ?
It seems that there is a...
2018 May 08
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...re the warp counter and return false if it doesn't match
>>> without the need to try to add vq.num here.
>>>
>>> Thanks
>> Sorry, looks like the following should work, we need add vq.num if
>> used_wrap_counter does not match:
>>
>> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
>> ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
>> ??? ??? ??? ??? ??? ? __u16 old)
>> {
>> ??? bool wrap = off_wrap >> 15;
>> ??? int off = off_wrap & ~(1 << 15);
>> ??? __u16 d1, d2;
>>
>> ???...
2018 May 08
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...atch
>>>>> without the need to try to add vq.num here.
>>>>>
>>>>> Thanks
>>>> Sorry, looks like the following should work, we need add vq.num if
>>>> used_wrap_counter does not match:
>>>>
>>>> static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
>>>> ??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
>>>> ??? ??? ??? ??? ??? ? __u16 old)
>>>> {
>>>> ??? bool wrap = off_wrap >> 15;
>>>> ??? int off = off_wrap & ~(1 << 15);
>&g...
2018 May 16
0
[RFC V4 PATCH 8/8] vhost: event suppression for packed ring
...out used index updates. This is paired
* with the barrier that the Guest executes when enabling
* interrupts. */
@@ -2682,6 +2731,78 @@ static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
return vring_need_event(vhost16_to_cpu(vq, event), new, old);
}
+static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
+ __u16 off_wrap, __u16 new,
+ __u16 old)
+{
+ bool wrap = vq->used_wrap_counter;
+ int off = off_wrap & ~(1 << 15);
+
+ if (new < old) {
+ new += vq->num;
+ wrap ^= 1;
+ }
+
+ if (wrap != off_wrap >> 15)
+...
2018 Mar 26
0
[RFC PATCH V2 8/8] vhost: event suppression for packed ring
..._notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
return vring_need_event(vhost16_to_cpu(vq, event), new, old);
}
+static bool vhost_idx_diff(struct vhost_virtqueue *vq, u16 old, u16 new)
+{
+ if (new > old)
+ return new - old;
+ return (new + vq->num - old);
+}
+
+static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
+ __u16 event_off, __u16 new,
+ __u16 old)
+{
+ return (__u16)(vhost_idx_diff(vq, new, event_off) - 1) <
+ (__u16)vhost_idx_diff(vq, new, old);
+}
+
+static bool vhost_notify_packed(struct vhost_dev *dev,
+ struct vhost_virtqueue *vq)
+{
+ __v...
2018 Mar 30
1
[RFC PATCH V2 8/8] vhost: event suppression for packed ring
...served, set to 0 */
} flags;
};
> +
> +
> + old = vq->signalled_used;
> + v = vq->signalled_used_valid;
> + new = vq->signalled_used = vq->last_used_idx;
> + vq->signalled_used_valid = true;
> +
> + if (unlikely(!v))
> + return true;
> +
> + return vhost_vring_packed_need_event(vq, new, old, off) &&
> + wrap == vq->used_wrap_counter;
> +}
> +
> +static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
> +{
> + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED))
> + return vhost_notify_packed(dev, vq);
> + else...
2018 May 08
0
[RFC v3 4/5] virtio_ring: add event idx support in packed ring
...ctly between event and new, we just
> need to compare the warp counter and return false if it doesn't match
> without the need to try to add vq.num here.
>
> Thanks
Sorry, looks like the following should work, we need add vq.num if
used_wrap_counter does not match:
static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
??? ??? ??? ??? ??? ? __u16 off_wrap, __u16 new,
??? ??? ??? ??? ??? ? __u16 old)
{
??? bool wrap = off_wrap >> 15;
??? int off = off_wrap & ~(1 << 15);
??? __u16 d1, d2;
??? if (wrap != vq->used_wrap_counter)
??? ??? d1 = new + vq->num -...
2018 Jul 03
0
[PATCH net-next 8/8] vhost: event suppression for packed ring
...mp_rmb();
+
+ if (vhost_get_avail(vq, event_off_wrap,
+ &vq->driver_event->off_wrap) < 0) {
+ vq_err(vq, "Failed to get driver desc_event_off/wrap");
+ return true;
+ }
+
+ off_wrap = vhost16_to_cpu(vq, event_off_wrap);
+
+ if (unlikely(!v))
+ return true;
+
+ return vhost_vring_packed_need_event(vq, vq->last_used_wrap_counter,
+ off_wrap, new, old);
+}
+
+static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
+{
+ if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED))
+ return vhost_notify_packed(dev, vq);
+ else
+ return vhost_notify_split(dev, vq);
+}
+
/...
2018 May 29
0
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...mp_rmb();
+
+ if (vhost_get_avail(vq, event_off_wrap,
+ &vq->driver_event->off_wrap) < 0) {
+ vq_err(vq, "Failed to get driver desc_event_off/wrap");
+ return true;
+ }
+
+ off_wrap = vhost16_to_cpu(vq, event_off_wrap);
+
+ if (unlikely(!v))
+ return true;
+
+ return vhost_vring_packed_need_event(vq, vq->used_wrap_counter,
+ off_wrap, new, old);
+}
+
+static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
+{
+ if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED))
+ return vhost_notify_packed(dev, vq);
+ else
+ return vhost_notify_split(dev, vq);
+}
+
/* Thi...
2018 Jul 16
0
[PATCH net-next V2 6/8] vhost: packed ring support
...NG_DESC_F_AVAIL);
+ flags |= cpu_to_vhost16(vq, VRING_DESC_F_USED);
+ } else {
+ flags &= ~cpu_to_vhost16(vq, VRING_DESC_F_AVAIL);
+ flags &= ~cpu_to_vhost16(vq, VRING_DESC_F_USED);
+ }
+
+ if (write)
+ flags |= cpu_to_vhost16(vq, VRING_DESC_F_WRITE);
+
+ return flags;
+}
+
+static bool vhost_vring_packed_need_event(struct vhost_virtqueue *vq,
+ bool wrap, __u16 off_wrap, __u16 new,
+ __u16 old)
+{
+ int off = off_wrap & ~(1 << 15);
+
+ if (wrap != off_wrap >> 15)
+ off -= vq->num;
+
+ return vring_need_event(off, new, old);
+}
+
+static int vhost_get_vq_desc_packed(struct vh...
2018 May 30
2
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...gt; + &vq->driver_event->off_wrap) < 0) {
> + vq_err(vq, "Failed to get driver desc_event_off/wrap");
> + return true;
> + }
> +
> + off_wrap = vhost16_to_cpu(vq, event_off_wrap);
> +
> + if (unlikely(!v))
> + return true;
> +
> + return vhost_vring_packed_need_event(vq, vq->used_wrap_counter,
> + off_wrap, new, old);
> +}
> +
> +static bool vhost_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq)
> +{
> + if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED))
> + return vhost_notify_packed(dev, vq);
> + else
> + ret...