From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH v5 resend 07/12] virtio: resolve for control queue Date: Sun, 20 Sep 2015 12:21:14 +0300 Message-ID: <20150920121748-mutt-send-email-mst@redhat.com> References: <1442589061-19225-1-git-send-email-yuanhan.liu@linux.intel.com> <1442589061-19225-8-git-send-email-yuanhan.liu@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org To: Yuanhan Liu Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 705499E5 for ; Sun, 20 Sep 2015 11:21:19 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1442589061-19225-8-git-send-email-yuanhan.liu@linux.intel.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Fri, Sep 18, 2015 at 11:10:56PM +0800, Yuanhan Liu wrote: > From: Changchun Ouyang > > Fix the max virtio queue pair read issue. > > Control queue can't work for vhost-user mulitple queue mode, > so introduce a counter to void the dead loop when polling > the control queue. > > Signed-off-by: Changchun Ouyang > Signed-off-by: Yuanhan Liu Per virtio spec, the multiqueue feature depends on control queue - what do you mean when you say it can't work? > --- > drivers/net/virtio/virtio_ethdev.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c > index 465d3cd..b2f4120 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -1162,7 +1162,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev) > struct virtio_hw *hw = eth_dev->data->dev_private; > struct virtio_net_config *config; > struct virtio_net_config local_config; > - uint32_t offset_conf = sizeof(config->mac); > struct rte_pci_device *pci_dev; > > RTE_BUILD_BUG_ON(RTE_PKTMBUF_HEADROOM < sizeof(struct virtio_net_hdr)); > @@ -1222,7 +1221,9 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev) > config = &local_config; > > if (vtpci_with_feature(hw, VIRTIO_NET_F_STATUS)) { > - offset_conf += sizeof(config->status); > + vtpci_read_dev_config(hw, > + offsetof(struct virtio_net_config, status), > + &config->status, sizeof(config->status)); > } else { > PMD_INIT_LOG(DEBUG, > "VIRTIO_NET_F_STATUS is not supported"); > @@ -1230,15 +1231,16 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev) > } > > if (vtpci_with_feature(hw, VIRTIO_NET_F_MQ)) { > - offset_conf += sizeof(config->max_virtqueue_pairs); > + vtpci_read_dev_config(hw, > + offsetof(struct virtio_net_config, max_virtqueue_pairs), > + &config->max_virtqueue_pairs, > + sizeof(config->max_virtqueue_pairs)); > } else { > PMD_INIT_LOG(DEBUG, > "VIRTIO_NET_F_MQ is not supported"); > config->max_virtqueue_pairs = 1; > } > > - vtpci_read_dev_config(hw, 0, (uint8_t *)config, offset_conf); > - > hw->max_rx_queues = > (VIRTIO_MAX_RX_QUEUES < config->max_virtqueue_pairs) ? > VIRTIO_MAX_RX_QUEUES : config->max_virtqueue_pairs; Does the patch actually do what the commit log says? It seems tobe about reading the device confing, not breaking out of a loop ... > -- > 1.9.0