net/netvsc: do not query VF link state
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 19 May 2020 16:52:28 +0000 (09:52 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 28 May 2020 15:57:07 +0000 (17:57 +0200)
When the primary device link state is queried, there is no
need to query the VF state as well. The application only sees
the state of the synthetic device.

Fixes: dc7680e8597c ("net/netvsc: support integrated VF")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
drivers/net/netvsc/hn_ethdev.c
drivers/net/netvsc/hn_var.h
drivers/net/netvsc/hn_vf.c

index 0f4827c..ac182a5 100644 (file)
@@ -202,7 +202,7 @@ static int hn_parse_args(const struct rte_eth_dev *dev)
  */
 int
 hn_dev_link_update(struct rte_eth_dev *dev,
-                  int wait_to_complete)
+                  int wait_to_complete __rte_unused)
 {
        struct hn_data *hv = dev->data->dev_private;
        struct rte_eth_link link, old;
@@ -216,8 +216,6 @@ hn_dev_link_update(struct rte_eth_dev *dev,
 
        hn_rndis_get_linkspeed(hv);
 
-       hn_vf_link_update(dev, wait_to_complete);
-
        link = (struct rte_eth_link) {
                .link_duplex = ETH_LINK_FULL_DUPLEX,
                .link_autoneg = ETH_LINK_SPEED_FIXED,
index 2036338..881832d 100644 (file)
@@ -141,7 +141,6 @@ struct hn_data {
        uint16_t        rss_ind[128];
 
        struct rte_eth_dev_owner owner;
-       struct rte_intr_handle vf_intr;
 
        struct vmbus_channel *channels[HN_MAX_CHANNELS];
 };
@@ -228,8 +227,6 @@ int hn_vf_mc_addr_list(struct rte_eth_dev *dev,
                           struct rte_ether_addr *mc_addr_set,
                           uint32_t nb_mc_addr);
 
-int    hn_vf_link_update(struct rte_eth_dev *dev,
-                         int wait_to_complete);
 int    hn_vf_tx_queue_setup(struct rte_eth_dev *dev,
                             uint16_t queue_idx, uint16_t nb_desc,
                             unsigned int socket_id,
index a745c7c..f5f15c0 100644 (file)
@@ -97,15 +97,8 @@ int hn_vf_add(struct rte_eth_dev *dev, struct hn_data *hv)
        }
 
        err = hn_vf_attach(hv, port);
-       if (err == 0) {
-               dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
-               hv->vf_intr = (struct rte_intr_handle) {
-                       .fd = -1,
-                       .type = RTE_INTR_HANDLE_EXT,
-               };
-               dev->intr_handle = &hv->vf_intr;
+       if (err == 0)
                hn_nvs_set_datapath(hv, NVS_DATAPATH_VF);
-       }
 
        return err;
 }
@@ -223,80 +216,6 @@ int hn_vf_info_get(struct hn_data *hv, struct rte_eth_dev_info *info)
        return ret;
 }
 
-int hn_vf_link_update(struct rte_eth_dev *dev,
-                     int wait_to_complete)
-{
-       struct hn_data *hv = dev->data->dev_private;
-       struct rte_eth_dev *vf_dev;
-       int ret = 0;
-
-       rte_rwlock_read_lock(&hv->vf_lock);
-       vf_dev = hn_get_vf_dev(hv);
-       if (vf_dev && vf_dev->dev_ops->link_update)
-               ret = (*vf_dev->dev_ops->link_update)(vf_dev, wait_to_complete);
-       rte_rwlock_read_unlock(&hv->vf_lock);
-
-       return ret;
-}
-
-/* called when VF has link state interrupts enabled */
-static int hn_vf_lsc_event(uint16_t port_id __rte_unused,
-                          enum rte_eth_event_type event,
-                          void *cb_arg, void *out __rte_unused)
-{
-       struct rte_eth_dev *dev = cb_arg;
-
-       if (event != RTE_ETH_EVENT_INTR_LSC)
-               return 0;
-
-       /* if link state has changed pass on */
-       if (hn_dev_link_update(dev, 0) == 0)
-               return 0; /* no change */
-
-       return _rte_eth_dev_callback_process(dev,
-                                            RTE_ETH_EVENT_INTR_LSC,
-                                            NULL);
-}
-
-static int _hn_vf_configure(struct rte_eth_dev *dev,
-                           uint16_t vf_port,
-                           const struct rte_eth_conf *dev_conf)
-{
-       struct rte_eth_conf vf_conf = *dev_conf;
-       struct rte_eth_dev *vf_dev;
-       int ret;
-
-       vf_dev = &rte_eth_devices[vf_port];
-       if (dev_conf->intr_conf.lsc &&
-           (vf_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)) {
-               PMD_DRV_LOG(DEBUG, "enabling LSC for VF %u",
-                           vf_port);
-               vf_conf.intr_conf.lsc = 1;
-       } else {
-               PMD_DRV_LOG(DEBUG, "disabling LSC for VF %u",
-                           vf_port);
-               vf_conf.intr_conf.lsc = 0;
-       }
-
-       ret = rte_eth_dev_configure(vf_port,
-                                   dev->data->nb_rx_queues,
-                                   dev->data->nb_tx_queues,
-                                   &vf_conf);
-       if (ret) {
-               PMD_DRV_LOG(ERR,
-                           "VF configuration failed: %d", ret);
-       } else if (vf_conf.intr_conf.lsc) {
-               ret = rte_eth_dev_callback_register(vf_port,
-                                                   RTE_ETH_DEV_INTR_LSC,
-                                                   hn_vf_lsc_event, dev);
-               if (ret)
-                       PMD_DRV_LOG(ERR,
-                                   "Failed to register LSC callback for VF %u",
-                                   vf_port);
-       }
-       return ret;
-}
-
 /*
  * Configure VF if present.
  * Force VF to have same number of queues as synthetic device
@@ -305,11 +224,22 @@ int hn_vf_configure(struct rte_eth_dev *dev,
                    const struct rte_eth_conf *dev_conf)
 {
        struct hn_data *hv = dev->data->dev_private;
+       struct rte_eth_conf vf_conf = *dev_conf;
        int ret = 0;
 
+       /* link state interrupt does not matter here. */
+       vf_conf.intr_conf.lsc = 0;
+
        rte_rwlock_read_lock(&hv->vf_lock);
-       if (hv->vf_port != HN_INVALID_PORT)
-               ret = _hn_vf_configure(dev, hv->vf_port, dev_conf);
+       if (hv->vf_port != HN_INVALID_PORT) {
+               ret = rte_eth_dev_configure(hv->vf_port,
+                                           dev->data->nb_rx_queues,
+                                           dev->data->nb_tx_queues,
+                                           &vf_conf);
+               if (ret != 0)
+                       PMD_DRV_LOG(ERR,
+                                   "VF configuration failed: %d", ret);
+       }
        rte_rwlock_read_unlock(&hv->vf_lock);
        return ret;
 }