net/mlx5: rename flow counter configuration macro
[dpdk.git] / drivers / net / mlx5 / mlx5.c
index 795a219..f6a99b7 100644 (file)
@@ -286,8 +286,8 @@ mlx5_dev_close(struct rte_eth_dev *dev)
                close(priv->nl_socket_route);
        if (priv->nl_socket_rdma >= 0)
                close(priv->nl_socket_rdma);
-       if (priv->mnl_socket)
-               mlx5_flow_tcf_socket_destroy(priv->mnl_socket);
+       if (priv->tcf_context)
+               mlx5_flow_tcf_context_destroy(priv->tcf_context);
        ret = mlx5_hrxq_ibv_verify(dev);
        if (ret)
                DRV_LOG(WARNING, "port %u some hash Rx queue still remain",
@@ -739,7 +739,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
        unsigned int mprq_max_stride_size_n = 0;
        unsigned int mprq_min_stride_num_n = 0;
        unsigned int mprq_max_stride_num_n = 0;
-#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT
+#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_V42
        struct ibv_counter_set_description cs_desc = { .counter_type = 0 };
 #endif
        struct ether_addr mac;
@@ -1009,7 +1009,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
        config.hw_csum = !!(attr.device_cap_flags_ex & IBV_DEVICE_RAW_IP_CSUM);
        DRV_LOG(DEBUG, "checksum offloading is %ssupported",
                (config.hw_csum ? "" : "not "));
-#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT
+#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_V42
        config.flow_counter_en = !!attr.max_counter_sets;
        mlx5_glue->describe_counter_set(ctx, 0, &cs_desc);
        DRV_LOG(DEBUG, "counter type = %d, num of cs = %ld, attributes = %d",
@@ -1084,13 +1084,14 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
                err = ENOMEM;
                goto error;
        }
-       if (priv->representor)
+       if (priv->representor) {
                eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
+               eth_dev->data->representor_id = priv->representor_id;
+       }
        eth_dev->data->dev_private = priv;
        priv->dev_data = eth_dev->data;
        eth_dev->data->mac_addrs = priv->mac;
        eth_dev->device = dpdk_dev;
-       eth_dev->device->driver = &mlx5_driver.driver;
        err = mlx5_uar_init_primary(eth_dev);
        if (err) {
                err = rte_errno;
@@ -1139,8 +1140,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
        claim_zero(mlx5_mac_addr_add(eth_dev, &mac, 0, 0));
        if (vf && config.vf_nl_en)
                mlx5_nl_mac_addr_sync(eth_dev);
-       priv->mnl_socket = mlx5_flow_tcf_socket_create();
-       if (!priv->mnl_socket) {
+       priv->tcf_context = mlx5_flow_tcf_context_create();
+       if (!priv->tcf_context) {
                err = -rte_errno;
                DRV_LOG(WARNING,
                        "flow rules relying on switch offloads will not be"
@@ -1155,16 +1156,16 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
                        error.message =
                                "cannot retrieve network interface index";
                } else {
-                       err = mlx5_flow_tcf_init(priv->mnl_socket, ifindex,
-                                               &error);
+                       err = mlx5_flow_tcf_init(priv->tcf_context,
+                                                ifindex, &error);
                }
                if (err) {
                        DRV_LOG(WARNING,
                                "flow rules relying on switch offloads will"
                                " not be supported: %s: %s",
                                error.message, strerror(rte_errno));
-                       mlx5_flow_tcf_socket_destroy(priv->mnl_socket);
-                       priv->mnl_socket = NULL;
+                       mlx5_flow_tcf_context_destroy(priv->tcf_context);
+                       priv->tcf_context = NULL;
                }
        }
        TAILQ_INIT(&priv->flows);
@@ -1219,16 +1220,21 @@ error:
                        close(priv->nl_socket_route);
                if (priv->nl_socket_rdma >= 0)
                        close(priv->nl_socket_rdma);
-               if (priv->mnl_socket)
-                       mlx5_flow_tcf_socket_destroy(priv->mnl_socket);
+               if (priv->tcf_context)
+                       mlx5_flow_tcf_context_destroy(priv->tcf_context);
                if (own_domain_id)
                        claim_zero(rte_eth_switch_domain_free(priv->domain_id));
                rte_free(priv);
+               if (eth_dev != NULL)
+                       eth_dev->data->dev_private = NULL;
        }
        if (pd)
                claim_zero(mlx5_glue->dealloc_pd(pd));
-       if (eth_dev)
+       if (eth_dev != NULL) {
+               /* mac_addrs must not be freed alone because part of dev_private */
+               eth_dev->data->mac_addrs = NULL;
                rte_eth_dev_release_port(eth_dev);
+       }
        if (ctx)
                claim_zero(mlx5_glue->close_device(ctx));
        assert(err > 0);
@@ -1448,8 +1454,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
                        if (!list[i].eth_dev)
                                continue;
                        mlx5_dev_close(list[i].eth_dev);
-                       if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-                               rte_free(list[i].eth_dev->data->dev_private);
+                       /* mac_addrs must not be freed because in dev_private */
+                       list[i].eth_dev->data->mac_addrs = NULL;
                        claim_zero(rte_eth_dev_release_port(list[i].eth_dev));
                }
                /* Restore original error. */