LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Tiwei Bie <tiwei.bie@intel.com>
To: Jason Wang <jasowang@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
virtualization@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
wexu@redhat.com, jfreimann@redhat.com
Subject: Re: [RFC v3 4/5] virtio_ring: add event idx support in packed ring
Date: Thu, 3 May 2018 21:54:30 +0800 [thread overview]
Message-ID: <20180503135430.lbtvn4p4lyu3ksqo@debian> (raw)
In-Reply-To: <9f0b4e37-63ff-42f9-f2e6-3747a19a0206@redhat.com>
On Thu, May 03, 2018 at 03:25:29PM +0800, Jason Wang wrote:
> On 2018年05月03日 10:09, Tiwei Bie wrote:
> > > > > So how about we use the straightforward way then?
> > > > You mean we do new += vq->vring_packed.num instead
> > > > of event_idx -= vq->vring_packed.num before calling
> > > > vring_need_event()?
> > > >
> > > > The problem is that, the second param (new_idx) of
> > > > vring_need_event() will be used for:
> > > >
> > > > (__u16)(new_idx - event_idx - 1)
> > > > (__u16)(new_idx - old)
> > > >
> > > > So if we change new, we will need to change old too.
> > > I think that since we have a branch there anyway,
> > > we are better off just special-casing if (wrap_counter != vq->wrap_counter).
> > > Treat is differenty and avoid casts.
> > >
> > > > And that would be an ugly hack..
> > > >
> > > > Best regards,
> > > > Tiwei Bie
> > > I consider casts and huge numbers with two's complement
> > > games even uglier.
> > The dependency on two's complement game is introduced
> > since the split ring.
> >
> > In packed ring, old is calculated via:
> >
> > old = vq->next_avail_idx - vq->num_added;
> >
> > In split ring, old is calculated via:
> >
> > old = vq->avail_idx_shadow - vq->num_added;
> >
> > In both cases, when vq->num_added is bigger, 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);
> }
>
> ?
It seems that there is a typo in above code. The second
param of vhost_idx_diff() is `old`, but when calling this
function in vhost_vring_packed_need_event(), `new` is
passed as the second param.
If we assume the second param of vhost_idx_diff() is new
and the third one is old, i.e.:
static u16 vhost_idx_diff(struct vhost_virtqueue *vq, u16 new, u16 old)
{
if (new > old)
return new - old;
return (new + vq->num - old);
}
I think it's still not right.
Because in virtqueue_enable_cb_delayed(), we may set an
event_off which is bigger than new and both of them have
wrapped. And in this case, although new is smaller than
event_off (i.e. the third param -- old), new shouldn't
add vq->num, and actually we are expecting a very big
idx diff.
Best regards,
Tiwei Bie
next prev parent reply other threads:[~2018-05-03 13:53 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-25 5:15 [RFC v3 0/5] virtio: support " Tiwei Bie
2018-04-25 5:15 ` [RFC v3 1/5] virtio: add packed ring definitions Tiwei Bie
2018-04-25 5:15 ` [RFC v3 2/5] virtio_ring: support creating packed ring Tiwei Bie
2018-04-25 5:15 ` [RFC v3 3/5] virtio_ring: add packed ring support Tiwei Bie
2018-05-10 7:32 ` Jason Wang
2018-05-10 7:34 ` Jason Wang
2018-05-10 8:56 ` Tiwei Bie
2018-05-10 9:49 ` Jason Wang
2018-05-10 10:50 ` Tiwei Bie
2018-04-25 5:15 ` [RFC v3 4/5] virtio_ring: add event idx support in packed ring Tiwei Bie
2018-05-02 2:51 ` Jason Wang
2018-05-02 7:28 ` Tiwei Bie
2018-05-02 13:51 ` Michael S. Tsirkin
2018-05-02 15:12 ` Tiwei Bie
2018-05-02 15:42 ` Michael S. Tsirkin
2018-05-03 1:11 ` Tiwei Bie
2018-05-03 1:44 ` Michael S. Tsirkin
2018-05-03 2:09 ` Tiwei Bie
2018-05-03 7:25 ` Jason Wang
2018-05-03 13:54 ` Tiwei Bie [this message]
2018-05-08 3:05 ` Jason Wang
2018-05-08 5:40 ` Jason Wang
2018-05-08 6:44 ` Tiwei Bie
2018-05-08 7:16 ` Jason Wang
2018-05-08 9:16 ` Tiwei Bie
2018-05-08 9:34 ` Jason Wang
2018-05-08 9:44 ` Tiwei Bie
2018-05-09 3:43 ` Jason Wang
2018-05-16 5:01 ` Jason Wang
2018-05-16 5:55 ` Tiwei Bie
2018-04-25 5:15 ` [RFC v3 5/5] virtio_ring: enable " Tiwei Bie
2018-04-27 3:56 ` [RFC v3 0/5] virtio: support " Jason Wang
2018-04-27 4:18 ` Michael S. Tsirkin
2018-04-27 6:17 ` Jason Wang
2018-04-27 9:12 ` Tiwei Bie
2018-04-28 2:45 ` Jason Wang
2018-05-02 3:49 ` Jason Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180503135430.lbtvn4p4lyu3ksqo@debian \
--to=tiwei.bie@intel.com \
--cc=jasowang@redhat.com \
--cc=jfreimann@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=wexu@redhat.com \
--subject='Re: [RFC v3 4/5] virtio_ring: add event idx support in packed ring' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).