net/mlx5: add C++ include guard to public header
[dpdk.git] / drivers / net / mlx5 / mlx5_trigger.c
index 1952d68..74c9c0a 100644 (file)
@@ -105,21 +105,6 @@ error:
        return -rte_errno;
 }
 
-/**
- * Translate the chunk address to MR key in order to put in into the cache.
- */
-static void
-mlx5_rxq_mempool_register_cb(struct rte_mempool *mp, void *opaque,
-                            struct rte_mempool_memhdr *memhdr,
-                            unsigned int idx)
-{
-       struct mlx5_rxq_data *rxq = opaque;
-
-       RTE_SET_USED(mp);
-       RTE_SET_USED(idx);
-       mlx5_rx_addr2mr(rxq, (uintptr_t)memhdr->addr);
-}
-
 /**
  * Register Rx queue mempools and fill the Rx queue cache.
  * This function tolerates repeated mempool registration.
@@ -139,23 +124,23 @@ mlx5_rxq_mempool_register(struct mlx5_rxq_ctrl *rxq_ctrl)
 
        mlx5_mr_flush_local_cache(&rxq_ctrl->rxq.mr_ctrl);
        /* MPRQ mempool is registered on creation, just fill the cache. */
-       if (mlx5_rxq_mprq_enabled(&rxq_ctrl->rxq)) {
-               rte_mempool_mem_iter(rxq_ctrl->rxq.mprq_mp,
-                                    mlx5_rxq_mempool_register_cb,
-                                    &rxq_ctrl->rxq);
-               return 0;
-       }
+       if (mlx5_rxq_mprq_enabled(&rxq_ctrl->rxq))
+               return mlx5_mr_mempool_populate_cache(&rxq_ctrl->rxq.mr_ctrl,
+                                                     rxq_ctrl->rxq.mprq_mp);
        for (s = 0; s < rxq_ctrl->rxq.rxseg_n; s++) {
-               uint32_t flags;
+               bool is_extmem;
 
                mp = rxq_ctrl->rxq.rxseg[s].mp;
-               flags = rte_pktmbuf_priv_flags(mp);
-               ret = mlx5_mr_mempool_register(rxq_ctrl->sh->cdev, mp);
+               is_extmem = (rte_pktmbuf_priv_flags(mp) &
+                            RTE_PKTMBUF_POOL_F_PINNED_EXT_BUF) != 0;
+               ret = mlx5_mr_mempool_register(rxq_ctrl->sh->cdev, mp,
+                                              is_extmem);
                if (ret < 0 && rte_errno != EEXIST)
                        return ret;
-               if ((flags & RTE_PKTMBUF_POOL_F_PINNED_EXT_BUF) == 0)
-                       rte_mempool_mem_iter(mp, mlx5_rxq_mempool_register_cb,
-                                       &rxq_ctrl->rxq);
+               ret = mlx5_mr_mempool_populate_cache(&rxq_ctrl->rxq.mr_ctrl,
+                                                    mp);
+               if (ret < 0)
+                       return ret;
        }
        return 0;
 }
@@ -868,7 +853,7 @@ error:
 
 /*
  * Unbind the hairpin port pair, HW configuration of both devices will be clear
- * and status will be reset for all the queues used between the them.
+ * and status will be reset for all the queues used between them.
  * This function only supports to unbind the Tx from one Rx.
  *
  * @param dev
@@ -1172,6 +1157,17 @@ mlx5_dev_start(struct rte_eth_dev *dev)
                goto error;
        }
        mlx5_os_stats_init(dev);
+       /*
+        * Attach indirection table objects detached on port stop.
+        * They may be needed to create RSS in non-isolated mode.
+        */
+       ret = mlx5_action_handle_attach(dev);
+       if (ret) {
+               DRV_LOG(ERR,
+                       "port %u failed to attach indirect actions: %s",
+                       dev->data->port_id, rte_strerror(rte_errno));
+               goto error;
+       }
        ret = mlx5_traffic_enable(dev);
        if (ret) {
                DRV_LOG(ERR, "port %u failed to set defaults flows",
@@ -1184,14 +1180,6 @@ mlx5_dev_start(struct rte_eth_dev *dev)
        mlx5_rxq_timestamp_set(dev);
        /* Set a mask and offset of scheduling on timestamp into Tx queues. */
        mlx5_txq_dynf_timestamp_set(dev);
-       /* Attach indirection table objects detached on port stop. */
-       ret = mlx5_action_handle_attach(dev);
-       if (ret) {
-               DRV_LOG(ERR,
-                       "port %u failed to attach indirect actions: %s",
-                       dev->data->port_id, rte_strerror(rte_errno));
-               goto error;
-       }
        /*
         * In non-cached mode, it only needs to start the default mreg copy
         * action and no flow created by application exists anymore.