[dpdk-dev] [PATCH v5 resend 07/12] virtio: resolve for control queue

Michael S. Tsirkin mst at redhat.com
Sun Sep 20 11:21:14 CEST 2015


On Fri, Sep 18, 2015 at 11:10:56PM +0800, Yuanhan Liu wrote:
> From: Changchun Ouyang <changchun.ouyang at intel.com>
> 
> 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 <changchun.ouyang at intel.com>
> Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com>

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


More information about the dev mailing list