net/mlx5: make flow list thread safe
[dpdk.git] / drivers / net / mlx5 / linux / mlx5_os.c
index b791859..a579dde 100644 (file)
@@ -1358,6 +1358,7 @@ err_secondary:
                                      MLX5_MAX_MAC_ADDRESSES);
        priv->flows = 0;
        priv->ctrl_flows = 0;
+       rte_spinlock_init(&priv->flow_list_lock);
        TAILQ_INIT(&priv->flow_meters);
        TAILQ_INIT(&priv->flow_meter_profiles);
        /* Hint libmlx5 to use PMD allocator for data plane resources */
@@ -1395,17 +1396,6 @@ err_secondary:
                err = mlx5_alloc_shared_dr(priv);
                if (err)
                        goto error;
-               /*
-                * RSS id is shared with meter flow id. Meter flow id can only
-                * use the 24 MSB of the register.
-                */
-               priv->qrss_id_pool = mlx5_flow_id_pool_alloc(UINT32_MAX >>
-                                    MLX5_MTR_COLOR_BITS);
-               if (!priv->qrss_id_pool) {
-                       DRV_LOG(ERR, "can't create flow id pool");
-                       err = ENOMEM;
-                       goto error;
-               }
        }
        if (config->devx && config->dv_flow_en && config->dest_tir) {
                priv->obj_ops = devx_obj_ops;
@@ -1449,11 +1439,6 @@ err_secondary:
                        err = ENOTSUP;
                        goto error;
        }
-       /*
-        * Allocate the buffer for flow creating, just once.
-        * The allocation must be done before any flow creating.
-        */
-       mlx5_flow_alloc_intermediate(eth_dev);
        /* Query availability of metadata reg_c's. */
        err = mlx5_flow_discover_mreg_c(eth_dev);
        if (err < 0) {
@@ -1497,8 +1482,6 @@ error:
                        close(priv->nl_socket_rdma);
                if (priv->vmwa_context)
                        mlx5_vlan_vmwa_exit(priv->vmwa_context);
-               if (priv->qrss_id_pool)
-                       mlx5_flow_id_pool_release(priv->qrss_id_pool);
                if (own_domain_id)
                        claim_zero(rte_eth_switch_domain_free(priv->domain_id));
                mlx5_free(priv);
@@ -2572,6 +2555,7 @@ const struct eth_dev_ops mlx5_os_dev_ops = {
        .mtr_ops_get = mlx5_flow_meter_ops_get,
        .hairpin_bind = mlx5_hairpin_bind,
        .hairpin_unbind = mlx5_hairpin_unbind,
+       .hairpin_get_peer_ports = mlx5_hairpin_get_peer_ports,
        .hairpin_queue_peer_update = mlx5_hairpin_queue_peer_update,
        .hairpin_queue_peer_bind = mlx5_hairpin_queue_peer_bind,
        .hairpin_queue_peer_unbind = mlx5_hairpin_queue_peer_unbind,
@@ -2655,6 +2639,7 @@ const struct eth_dev_ops mlx5_os_dev_ops_isolate = {
        .mtr_ops_get = mlx5_flow_meter_ops_get,
        .hairpin_bind = mlx5_hairpin_bind,
        .hairpin_unbind = mlx5_hairpin_unbind,
+       .hairpin_get_peer_ports = mlx5_hairpin_get_peer_ports,
        .hairpin_queue_peer_update = mlx5_hairpin_queue_peer_update,
        .hairpin_queue_peer_bind = mlx5_hairpin_queue_peer_bind,
        .hairpin_queue_peer_unbind = mlx5_hairpin_queue_peer_unbind,