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

Reply via email to