[dpdk-dev,1/3] virtio: don't report link state feature unless available

Message ID 1440779019-10793-2-git-send-email-stephen@networkplumber.org (mailing list archive)
State Accepted, archived
Headers

Commit Message

Stephen Hemminger Aug. 28, 2015, 4:23 p.m. UTC
  From: Stephen Hemminger <shemming@brocade.com>

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>
---
 drivers/net/virtio/virtio_ethdev.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
  

Comments

Ouyang Changchun Aug. 31, 2015, 2:54 a.m. UTC | #1
> -----Original Message-----
> From: Stephen Hemminger [mailto:stephen@networkplumber.org]
> Sent: Saturday, August 29, 2015 12:24 AM
> To: Xie, Huawei; Ouyang, Changchun
> Cc: dev@dpdk.org; Stephen Hemminger; Stephen Hemminger
> Subject: [PATCH 1/3] virtio: don't report link state feature unless available
> 
> From: Stephen Hemminger <shemming@brocade.com>
> 
> 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 | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> index 465d3cd..8c3e924 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -1201,6 +1201,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 */ @@ -1394,9 +1398,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;
>  		}
> --
> 2.1.4
  

Patch

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 465d3cd..8c3e924 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1201,6 +1201,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 */
@@ -1394,9 +1398,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;
 		}