Message ID | 20170819064129.27272-1-den@klaipeden.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017年08月19日 14:41, Koichiro Den wrote: > To depend on vq.num and the usage of VHOST_MAX_PEND is not succinct > and in some case unexpected, so revert its logic part only. Hi: Could you explain a little bit more on the case that is was not sufficent? Thanks > > Signed-off-by: Koichiro Den <den@klaipeden.com> > --- > drivers/vhost/net.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c > index 06d044862e58..99cf99b308a7 100644 > --- a/drivers/vhost/net.c > +++ b/drivers/vhost/net.c > @@ -433,11 +433,15 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net *net, > > static bool vhost_exceeds_maxpend(struct vhost_net *net) > { > + int num_pends; > struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX]; > struct vhost_virtqueue *vq = &nvq->vq; > > - return (nvq->upend_idx + vq->num - VHOST_MAX_PEND) % UIO_MAXIOV > - == nvq->done_idx; > + num_pends = likely(nvq->upend_idx >= nvq->done_idx) ? > + (nvq->upend_idx - nvq->done_idx) : > + (nvq->upend_idx + UIO_MAXIOV - nvq->done_idx); > + > + return num_pends > VHOST_MAX_PEND; > } > > /* Expects to be always run from workqueue - which acts as
On 2017年08月21日 11:06, Jason Wang wrote: > > > On 2017年08月19日 14:41, Koichiro Den wrote: >> To depend on vq.num and the usage of VHOST_MAX_PEND is not succinct >> and in some case unexpected, so revert its logic part only. > > Hi: > > Could you explain a little bit more on the case that is was not > sufficent? > > Thanks Just have another thought. I wonder whether or not just use ulimit(memlock) is better here. It looks more flexible. Thanks
On Mon, 2017-08-21 at 11:06 +0800, Jason Wang wrote: > > On 2017年08月19日 14:41, Koichiro Den wrote: > > To depend on vq.num and the usage of VHOST_MAX_PEND is not succinct > > and in some case unexpected, so revert its logic part only. > > Hi: > > Could you explain a little bit more on the case that is was not sufficent? It's just because vq.num could theoretically be around VHOST_MAX_PEND, that could lead to an unexpected situation. Plus, I thought its name and usage is not intrinsic. Its actual functioning in normal vq.num == 256 case is I think good enough. Thanks. > > Thanks > > > > > Signed-off-by: Koichiro Den <den@klaipeden.com> > > --- > > drivers/vhost/net.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c > > index 06d044862e58..99cf99b308a7 100644 > > --- a/drivers/vhost/net.c > > +++ b/drivers/vhost/net.c > > @@ -433,11 +433,15 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net > > *net, > > > > static bool vhost_exceeds_maxpend(struct vhost_net *net) > > { > > + int num_pends; > > struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX]; > > struct vhost_virtqueue *vq = &nvq->vq; > > > > - return (nvq->upend_idx + vq->num - VHOST_MAX_PEND) % UIO_MAXIOV > > - == nvq->done_idx; > > + num_pends = likely(nvq->upend_idx >= nvq->done_idx) ? > > + (nvq->upend_idx - nvq->done_idx) : > > + (nvq->upend_idx + UIO_MAXIOV - nvq->done_idx); > > + > > + return num_pends > VHOST_MAX_PEND; > > } > > > > /* Expects to be always run from workqueue - which acts as > >
On Mon, 2017-08-21 at 20:40 +0800, Jason Wang wrote: > > On 2017年08月21日 11:06, Jason Wang wrote: > > > > > > On 2017年08月19日 14:41, Koichiro Den wrote: > > > To depend on vq.num and the usage of VHOST_MAX_PEND is not succinct > > > and in some case unexpected, so revert its logic part only. > > > > Hi: > > > > Could you explain a little bit more on the case that is was not > > sufficent? > > > > Thanks > > Just have another thought. > > I wonder whether or not just use ulimit(memlock) is better here. It > looks more flexible. > > Thanks It sounds a better approach, though at present I have got no idea how much portion it should be.
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 06d044862e58..99cf99b308a7 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -433,11 +433,15 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net *net, static bool vhost_exceeds_maxpend(struct vhost_net *net) { + int num_pends; struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX]; struct vhost_virtqueue *vq = &nvq->vq; - return (nvq->upend_idx + vq->num - VHOST_MAX_PEND) % UIO_MAXIOV - == nvq->done_idx; + num_pends = likely(nvq->upend_idx >= nvq->done_idx) ? + (nvq->upend_idx - nvq->done_idx) : + (nvq->upend_idx + UIO_MAXIOV - nvq->done_idx); + + return num_pends > VHOST_MAX_PEND; } /* Expects to be always run from workqueue - which acts as
To depend on vq.num and the usage of VHOST_MAX_PEND is not succinct and in some case unexpected, so revert its logic part only. Signed-off-by: Koichiro Den <den@klaipeden.com> --- drivers/vhost/net.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)