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@xxxxxxxxxxxxx> > > --- > > 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 > >