All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Yang, Zhiyong" <zhiyong.yang@intel.com>
To: "Bie, Tiwei" <tiwei.bie@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>,
	"Yao, Lei A" <lei.a.yao@intel.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Subject: Re: [PATCH] net/virtio-user: fix multiple queues fail in server mode
Date: Thu, 10 May 2018 03:04:59 +0000	[thread overview]
Message-ID: <E182254E98A5DA4EB1E657AC7CB9BD2A8B0BD82A@BGSMSX101.gar.corp.intel.com> (raw)
In-Reply-To: <20180510024704.gkcaazw3ctztmait@debian>

Hi  Tiwei,

> -----Original Message-----
> From: Bie, Tiwei
> Sent: Thursday, May 10, 2018 10:47 AM
> To: Yang, Zhiyong <zhiyong.yang@intel.com>
> Cc: dev@dpdk.org; maxime.coquelin@redhat.com; Yao, Lei A
> <lei.a.yao@intel.com>; stable@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] net/virtio-user: fix multiple queues fail in
> server mode
> 
> On Wed, May 09, 2018 at 05:49:36PM +0800, zhiyong.yang@intel.com wrote:
> > This patch fixes multiple queues failure when virtio-user works in
> > server mode.
> >
> > Fixes: bd8f50a45d0f ("net/virtio-user: support server mode")
> > Cc: stable@dpdk.org
> > Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
> > ---
> >  drivers/net/virtio/virtio_user/vhost_user.c      | 3 +++
> >  drivers/net/virtio/virtio_user/virtio_user_dev.c | 9 +++++++++
> >  2 files changed, 12 insertions(+)
> >
> > diff --git a/drivers/net/virtio/virtio_user/vhost_user.c
> > b/drivers/net/virtio/virtio_user/vhost_user.c
> > index a6df97a00..a9e53d7b5 100644
> > --- a/drivers/net/virtio/virtio_user/vhost_user.c
> > +++ b/drivers/net/virtio/virtio_user/vhost_user.c
> > @@ -263,6 +263,9 @@ vhost_user_sock(struct virtio_user_dev *dev,
> >
> >  	PMD_DRV_LOG(INFO, "%s", vhost_msg_strings[req]);
> >
> > +	if (vhostfd < 0)
> > +		return -1;
> 
> I think this is just a workaround to avoid printing error messages in server
> mode.
> 
> Ideally, vhost_user_sock() shouldn't be called with vhostfd < 0.
> 
> If we want this workaround, we should only allow this in server mode. I.e. do
> the check like this:
> 
> 	if (dev->is_server && vhostfd < 0)
> 		return -1;
 
Ok. 

> > +
> >  	msg.request = req;
> >  	msg.flags = VHOST_USER_VERSION;
> >  	msg.size = 0;
> > diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> > b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> > index 38b8bc90d..e988dc3f4 100644
> > --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> > +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> > @@ -126,6 +126,10 @@ virtio_user_start_device(struct virtio_user_dev
> *dev)
> >  	features &= ~(1ull << VIRTIO_NET_F_MAC);
> >  	/* Strip VIRTIO_NET_F_CTRL_VQ, as devices do not really need to
> know */
> >  	features &= ~(1ull << VIRTIO_NET_F_CTRL_VQ);
> > +	/* Also disable features which depend on VIRTIO_NET_F_CTRL_VQ
> */
> > +	features &= ~(1ull << VIRTIO_NET_F_CTRL_RX);
> > +	features &= ~(1ull << VIRTIO_NET_F_CTRL_VLAN);
> > +	features &= ~(1ull << VIRTIO_NET_F_CTRL_MAC_ADDR);
> 
> Is this really related to this fix?
> 

Yes.  if vhost user side receives these feature bits and  
Vhost user doesn’t  support these features and will close the socket connection.
If we have disable ctrl_VQ,  also should disable them.


> >  	features &= ~(1ull << VIRTIO_NET_F_STATUS);
> >  	ret = dev->ops->send_request(dev, VHOST_USER_SET_FEATURES,
> &features);
> >  	if (ret < 0)
> > @@ -488,6 +492,11 @@ virtio_user_handle_ctrl_msg(struct
> virtio_user_dev *dev, struct vring *vring,
> >  		queues = *(uint16_t *)(uintptr_t)vring->desc[idx_data].addr;
> >  		status = virtio_user_handle_mq(dev, queues);
> >  	}
> > +	/* Server mode can't enable queue pairs if vhostfd is not connected,
> > +	 * we suppose that status always returns 0 in this case.
> > +	 * /
> 
> As Ferruh pointed, a typo here.
Ok. fix it.

> 
> > +	if (dev->is_server && dev->vhostfd < 0)
> > +		status = 0;
> 
> When the connection to the backend isn't established in server mode, what
> virtio_user_handle_mq() can't do is to enable the queue pairs. But other
> checks in that function are still valid. So I would suggest moving above code
> to virtio_user_handle_mq().
Ok. 

Thanks
Zhiyong

  reply	other threads:[~2018-05-10  3:04 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-09  9:49 [PATCH] net/virtio-user: fix multiple queues fail in server mode zhiyong.yang
2018-05-09 14:48 ` [dpdk-stable] " Ferruh Yigit
2018-05-10  0:48   ` Tiwei Bie
2018-05-10  1:28   ` Yang, Zhiyong
2018-05-10  1:38     ` Yang, Zhiyong
2018-05-10  2:47 ` Tiwei Bie
2018-05-10  3:04   ` Yang, Zhiyong [this message]
2018-05-10  4:42     ` Tiwei Bie
2018-05-10  9:36 ` [PATCH v2] " zhiyong.yang
2018-05-10 10:23   ` Tiwei Bie
2018-05-10 14:01     ` Yang, Zhiyong
2018-05-10 14:19       ` Tiwei Bie
2018-05-11  2:12   ` [PATCH v3] " zhiyong.yang
2018-05-11  2:49     ` Tiwei Bie
2018-05-11  3:01       ` Yang, Zhiyong
2018-05-11  3:31     ` [PATCH v4] " zhiyong.yang
2018-05-11 11:33       ` Ferruh Yigit

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=E182254E98A5DA4EB1E657AC7CB9BD2A8B0BD82A@BGSMSX101.gar.corp.intel.com \
    --to=zhiyong.yang@intel.com \
    --cc=dev@dpdk.org \
    --cc=lei.a.yao@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=stable@dpdk.org \
    --cc=tiwei.bie@intel.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.