net/mlx5: reduce PCI dependency
[dpdk.git] / drivers / net / mlx5 / linux / mlx5_os.c
index 002db8a..4ab30fd 100644 (file)
@@ -50,8 +50,6 @@
 #include "mlx5_nl.h"
 #include "mlx5_devx.h"
 
-#define MLX5_TAGS_HLIST_ARRAY_SIZE 8192
-
 #ifndef HAVE_IBV_MLX5_MOD_MPW
 #define MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED (1 << 2)
 #define MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW (1 << 3)
@@ -334,7 +332,7 @@ static int
 mlx5_alloc_shared_dr(struct mlx5_priv *priv)
 {
        struct mlx5_dev_ctx_shared *sh = priv->sh;
-       char s[MLX5_HLIST_NAMESIZE] __rte_unused;
+       char s[MLX5_NAME_SIZE] __rte_unused;
        int err;
 
        MLX5_ASSERT(sh && sh->refcnt);
@@ -385,46 +383,6 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)
                                              flow_dv_dest_array_clone_free_cb);
        if (!sh->dest_array_list)
                goto error;
-       /* Create tags hash list table. */
-       snprintf(s, sizeof(s), "%s_tags", sh->ibdev_name);
-       sh->tag_table = mlx5_hlist_create(s, MLX5_TAGS_HLIST_ARRAY_SIZE, 0,
-                                         MLX5_HLIST_WRITE_MOST,
-                                         flow_dv_tag_create_cb,
-                                         flow_dv_tag_match_cb,
-                                         flow_dv_tag_remove_cb);
-       if (!sh->tag_table) {
-               DRV_LOG(ERR, "tags with hash creation failed.");
-               err = ENOMEM;
-               goto error;
-       }
-       sh->tag_table->ctx = sh;
-       snprintf(s, sizeof(s), "%s_hdr_modify", sh->ibdev_name);
-       sh->modify_cmds = mlx5_hlist_create(s, MLX5_FLOW_HDR_MODIFY_HTABLE_SZ,
-                                           0, MLX5_HLIST_WRITE_MOST |
-                                           MLX5_HLIST_DIRECT_KEY,
-                                           flow_dv_modify_create_cb,
-                                           flow_dv_modify_match_cb,
-                                           flow_dv_modify_remove_cb);
-       if (!sh->modify_cmds) {
-               DRV_LOG(ERR, "hdr modify hash creation failed");
-               err = ENOMEM;
-               goto error;
-       }
-       sh->modify_cmds->ctx = sh;
-       snprintf(s, sizeof(s), "%s_encaps_decaps", sh->ibdev_name);
-       sh->encaps_decaps = mlx5_hlist_create(s,
-                                             MLX5_FLOW_ENCAP_DECAP_HTABLE_SZ,
-                                             0, MLX5_HLIST_DIRECT_KEY |
-                                             MLX5_HLIST_WRITE_MOST,
-                                             flow_dv_encap_decap_create_cb,
-                                             flow_dv_encap_decap_match_cb,
-                                             flow_dv_encap_decap_remove_cb);
-       if (!sh->encaps_decaps) {
-               DRV_LOG(ERR, "encap decap hash creation failed");
-               err = ENOMEM;
-               goto error;
-       }
-       sh->encaps_decaps->ctx = sh;
 #endif
 #ifdef HAVE_MLX5DV_DR
        void *domain;
@@ -469,7 +427,7 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)
                goto error;
        }
 #endif
-       if (!sh->tunnel_hub)
+       if (!sh->tunnel_hub && priv->config.dv_miss_info)
                err = mlx5_alloc_tunnel_hub(sh);
        if (err) {
                DRV_LOG(ERR, "mlx5_alloc_tunnel_hub failed err=%d", err);
@@ -1294,7 +1252,7 @@ err_secondary:
         * Look for sibling devices in order to reuse their switch domain
         * if any, otherwise allocate one.
         */
-       MLX5_ETH_FOREACH_DEV(port_id, priv->pci_dev) {
+       MLX5_ETH_FOREACH_DEV(port_id, NULL) {
                const struct mlx5_priv *opriv =
                        rte_eth_devices[port_id].data->dev_private;
 
@@ -1869,15 +1827,16 @@ err_secondary:
            priv->sh->dv_regc0_mask) {
                priv->mreg_cp_tbl = mlx5_hlist_create(MLX5_FLOW_MREG_HNAME,
                                                      MLX5_FLOW_MREG_HTABLE_SZ,
-                                                     0, 0,
+                                                     false, true, eth_dev,
                                                      flow_dv_mreg_create_cb,
                                                      flow_dv_mreg_match_cb,
-                                                     flow_dv_mreg_remove_cb);
+                                                     flow_dv_mreg_remove_cb,
+                                                     flow_dv_mreg_clone_cb,
+                                                   flow_dv_mreg_clone_free_cb);
                if (!priv->mreg_cp_tbl) {
                        err = ENOMEM;
                        goto error;
                }
-               priv->mreg_cp_tbl->ctx = eth_dev;
        }
        rte_spinlock_init(&priv->shared_act_sl);
        mlx5_flow_counter_mode_config(eth_dev);
@@ -2036,7 +1995,7 @@ mlx5_device_bond_pci_match(const struct ibv_device *ibv_dev,
                /* Process slave interface names in the loop. */
                snprintf(tmp_str, sizeof(tmp_str),
                         "/sys/class/net/%s", ifname);
-               if (mlx5_dev_to_pci_addr(tmp_str, &pci_addr)) {
+               if (mlx5_get_pci_addr(tmp_str, &pci_addr)) {
                        DRV_LOG(WARNING, "can not get PCI address"
                                         " for netdev \"%s\"", ifname);
                        continue;
@@ -2213,8 +2172,8 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev,
                        break;
                } else {
                        /* Bonding device not found. */
-                       if (mlx5_dev_to_pci_addr
-                               (ibv_list[ret]->ibdev_path, &pci_addr))
+                       if (mlx5_get_pci_addr(ibv_list[ret]->ibdev_path,
+                                             &pci_addr))
                                continue;
                        if (owner_pci.domain != pci_addr.domain ||
                            owner_pci.bus != pci_addr.bus ||
@@ -2552,6 +2511,7 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev,
                dev_config.decap_en = 1;
                dev_config.log_hp_size = MLX5_ARG_UNSET;
                dev_config.allow_duplicate_pattern = 1;
+               list[i].numa_node = pci_dev->device.numa_node;
                list[i].eth_dev = mlx5_dev_spawn(&pci_dev->device,
                                                 &list[i],
                                                 &dev_config,
@@ -2749,7 +2709,6 @@ mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,
        int dbmap_env;
        int err = 0;
 
-       sh->numa_node = spawn->pci_dev->device.numa_node;
        pthread_mutex_init(&sh->txpp.mutex, NULL);
        /*
         * Configure environment variable "MLX5_BF_SHUT_UP"