net/mlx5: refactor multi-process communication
[dpdk.git] / drivers / net / mlx5 / mlx5.c
index 3af7c1c..6dd211e 100644 (file)
 /* Decap will be used or not. */
 #define MLX5_DECAP_EN "decap_en"
 
-static const char *MZ_MLX5_PMD_SHARED_DATA = "mlx5_pmd_shared_data";
-
 /* Shared memory between primary and secondary processes. */
 struct mlx5_shared_data *mlx5_shared_data;
 
-/* Spinlock for mlx5_shared_data allocation. */
-static rte_spinlock_t mlx5_shared_data_lock = RTE_SPINLOCK_INITIALIZER;
-
-/* Process local data for secondary processes. */
-static struct mlx5_local_data mlx5_local_data;
+/** Driver-specific log messages type. */
+int mlx5_logtype;
 
 static LIST_HEAD(, mlx5_dev_ctx_shared) mlx5_dev_ctx_list =
                                                LIST_HEAD_INITIALIZER();
@@ -1116,55 +1111,6 @@ error:
        return err;
 }
 
-/**
- * Initialize shared data between primary and secondary process.
- *
- * A memzone is reserved by primary process and secondary processes attach to
- * the memzone.
- *
- * @return
- *   0 on success, a negative errno value otherwise and rte_errno is set.
- */
-static int
-mlx5_init_shared_data(void)
-{
-       const struct rte_memzone *mz;
-       int ret = 0;
-
-       rte_spinlock_lock(&mlx5_shared_data_lock);
-       if (mlx5_shared_data == NULL) {
-               if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-                       /* Allocate shared memory. */
-                       mz = rte_memzone_reserve(MZ_MLX5_PMD_SHARED_DATA,
-                                                sizeof(*mlx5_shared_data),
-                                                SOCKET_ID_ANY, 0);
-                       if (mz == NULL) {
-                               DRV_LOG(ERR,
-                                       "Cannot allocate mlx5 shared data");
-                               ret = -rte_errno;
-                               goto error;
-                       }
-                       mlx5_shared_data = mz->addr;
-                       memset(mlx5_shared_data, 0, sizeof(*mlx5_shared_data));
-                       rte_spinlock_init(&mlx5_shared_data->lock);
-               } else {
-                       /* Lookup allocated shared memory. */
-                       mz = rte_memzone_lookup(MZ_MLX5_PMD_SHARED_DATA);
-                       if (mz == NULL) {
-                               DRV_LOG(ERR,
-                                       "Cannot attach mlx5 shared data");
-                               ret = -rte_errno;
-                               goto error;
-                       }
-                       mlx5_shared_data = mz->addr;
-                       memset(&mlx5_local_data, 0, sizeof(mlx5_local_data));
-               }
-       }
-error:
-       rte_spinlock_unlock(&mlx5_shared_data_lock);
-       return ret;
-}
-
 /**
  * Retrieve integer value from environment variable.
  *
@@ -1306,7 +1252,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
        dev->tx_pkt_burst = removed_tx_burst;
        rte_wmb();
        /* Disable datapath on secondary process. */
-       mlx5_mp_req_stop_rxtx(dev);
+       mlx5_mp_os_req_stop_rxtx(dev);
        /* Free the eCPRI flex parser resource. */
        mlx5_flex_parser_ecpri_release(dev);
        if (priv->rxqs != NULL) {
@@ -1638,60 +1584,6 @@ mlx5_args(struct mlx5_dev_config *config, struct rte_devargs *devargs)
        return 0;
 }
 
-/**
- * PMD global initialization.
- *
- * Independent from individual device, this function initializes global
- * per-PMD data structures distinguishing primary and secondary processes.
- * Hence, each initialization is called once per a process.
- *
- * @return
- *   0 on success, a negative errno value otherwise and rte_errno is set.
- */
-int
-mlx5_init_once(void)
-{
-       struct mlx5_shared_data *sd;
-       struct mlx5_local_data *ld = &mlx5_local_data;
-       int ret = 0;
-
-       if (mlx5_init_shared_data())
-               return -rte_errno;
-       sd = mlx5_shared_data;
-       MLX5_ASSERT(sd);
-       rte_spinlock_lock(&sd->lock);
-       switch (rte_eal_process_type()) {
-       case RTE_PROC_PRIMARY:
-               if (sd->init_done)
-                       break;
-               LIST_INIT(&sd->mem_event_cb_list);
-               rte_rwlock_init(&sd->mem_event_rwlock);
-               rte_mem_event_callback_register("MLX5_MEM_EVENT_CB",
-                                               mlx5_mr_mem_event_cb, NULL);
-               ret = mlx5_mp_init_primary(MLX5_MP_NAME,
-                                          mlx5_mp_primary_handle);
-               if (ret)
-                       goto out;
-               sd->init_done = true;
-               break;
-       case RTE_PROC_SECONDARY:
-               if (ld->init_done)
-                       break;
-               ret = mlx5_mp_init_secondary(MLX5_MP_NAME,
-                                            mlx5_mp_secondary_handle);
-               if (ret)
-                       goto out;
-               ++sd->secondary_cnt;
-               ld->init_done = true;
-               break;
-       default:
-               break;
-       }
-out:
-       rte_spinlock_unlock(&sd->lock);
-       return ret;
-}
-
 /**
  * Configures the minimal amount of data to inline into WQE
  * while sending packets.