virtio: do not report link state feature unless available
authorStephen Hemminger <shemming@brocade.com>
Fri, 28 Aug 2015 16:23:37 +0000 (09:23 -0700)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 21 Oct 2015 14:12:32 +0000 (16:12 +0200)
If host does not support virtio link state (like current DPDK vhost)
then don't set the flag. This keeps applications from incorrectly
assuming that link state is available when it is not. It also
avoids useless "guess what works in the config".

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
drivers/net/virtio/virtio_ethdev.c

index 147aca1..4495218 100644 (file)
@@ -1202,6 +1202,10 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
        vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_DRIVER);
        virtio_negotiate_features(hw);
 
+       /* If host does not support status then disable LSC */
+       if (!vtpci_with_feature(hw, VIRTIO_NET_F_STATUS))
+               pci_dev->driver->drv_flags &= ~RTE_PCI_DRV_INTR_LSC;
+
        rx_func_get(eth_dev);
 
        /* Setting up rx_header size for the device */
@@ -1395,9 +1399,8 @@ virtio_dev_start(struct rte_eth_dev *dev)
        struct rte_pci_device *pci_dev = dev->pci_dev;
 
        /* check if lsc interrupt feature is enabled */
-       if ((dev->data->dev_conf.intr_conf.lsc) &&
-               (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)) {
-               if (!vtpci_with_feature(hw, VIRTIO_NET_F_STATUS)) {
+       if (dev->data->dev_conf.intr_conf.lsc) {
+               if (!(pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)) {
                        PMD_DRV_LOG(ERR, "link status not supported by host");
                        return -ENOTSUP;
                }