net/mlx5: add flow meter pool to manage meter object
[dpdk.git] / drivers / net / mlx5 / mlx5.c
index 006ab95..1b5b5cb 100644 (file)
@@ -35,6 +35,8 @@
 #include "mlx5.h"
 #include "mlx5_utils.h"
 #include "mlx5_rxtx.h"
+#include "mlx5_rx.h"
+#include "mlx5_tx.h"
 #include "mlx5_autoconf.h"
 #include "mlx5_mr.h"
 #include "mlx5_flow.h"
@@ -275,10 +277,13 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
        },
 #endif
        [MLX5_IPOOL_MTR] = {
-               .size = sizeof(struct mlx5_flow_meter),
+               /**
+                * The ipool index should grow continually from small to big,
+                * for meter idx, so not set grow_trunk to avoid meter index
+                * not jump continually.
+                */
+               .size = sizeof(struct mlx5_legacy_flow_meter),
                .trunk_size = 64,
-               .grow_trunk = 3,
-               .grow_shift = 2,
                .need_lock = 1,
                .release_mem_en = 1,
                .malloc = mlx5_malloc,
@@ -355,6 +360,26 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
 
 #define MLX5_FLOW_TABLE_HLIST_ARRAY_SIZE 4096
 
+/**
+ * Decide whether representor ID is a HPF(host PF) port on BF2.
+ *
+ * @param dev
+ *   Pointer to Ethernet device structure.
+ *
+ * @return
+ *   Non-zero if HPF, otherwise 0.
+ */
+bool
+mlx5_is_hpf(struct rte_eth_dev *dev)
+{
+       struct mlx5_priv *priv = dev->data->dev_private;
+       uint16_t repr = MLX5_REPRESENTOR_REPR(priv->representor_id);
+       int type = MLX5_REPRESENTOR_TYPE(priv->representor_id);
+
+       return priv->representor != 0 && type == RTE_ETH_REPRESENTOR_VF &&
+              MLX5_REPRESENTOR_REPR(-1) == repr;
+}
+
 /**
  * Initialize the ASO aging management structure.
  *
@@ -905,6 +930,8 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,
                rte_errno  = ENOMEM;
                goto exit;
        }
+       if (spawn->bond_info)
+               sh->bond = *spawn->bond_info;
        err = mlx5_os_open_device(spawn, config, sh);
        if (!sh->ctx)
                goto error;
@@ -1317,7 +1344,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
         * then this will return directly without any action.
         */
        mlx5_flow_list_flush(dev, &priv->flows, true);
-       mlx5_shared_action_flush(dev);
+       mlx5_action_handle_flush(dev);
        mlx5_flow_meter_flush(dev, NULL);
        /* Prevent crashes when queues are still in use. */
        dev->rx_pkt_burst = removed_rx_burst;
@@ -2094,7 +2121,7 @@ mlx5_eth_find_next(uint16_t port_id, struct rte_pci_device *pci_dev)
                    (dev->device == &pci_dev->device ||
                     (dev->device->driver &&
                     dev->device->driver->name &&
-                    !strcmp(dev->device->driver->name, MLX5_DRIVER_NAME))))
+                    !strcmp(dev->device->driver->name, MLX5_PCI_DRIVER_NAME))))
                        break;
                port_id++;
        }
@@ -2215,7 +2242,7 @@ static struct mlx5_pci_driver mlx5_driver = {
        .driver_class = MLX5_CLASS_NET,
        .pci_driver = {
                .driver = {
-                       .name = MLX5_DRIVER_NAME,
+                       .name = MLX5_PCI_DRIVER_NAME,
                },
                .id_table = mlx5_pci_id_map,
                .probe = mlx5_os_pci_probe,