net/iavf: fix adding multicast MAC address
[dpdk.git] / drivers / net / mlx5 / mlx5.c
index 4a807fb..74a537b 100644 (file)
@@ -241,6 +241,28 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
                .free = mlx5_free,
                .type = "mlx5_jump_ipool",
        },
+       {
+               .size = sizeof(struct mlx5_flow_dv_sample_resource),
+               .trunk_size = 64,
+               .grow_trunk = 3,
+               .grow_shift = 2,
+               .need_lock = 0,
+               .release_mem_en = 1,
+               .malloc = mlx5_malloc,
+               .free = mlx5_free,
+               .type = "mlx5_sample_ipool",
+       },
+       {
+               .size = sizeof(struct mlx5_flow_dv_dest_array_resource),
+               .trunk_size = 64,
+               .grow_trunk = 3,
+               .grow_shift = 2,
+               .need_lock = 0,
+               .release_mem_en = 1,
+               .malloc = mlx5_malloc,
+               .free = mlx5_free,
+               .type = "mlx5_dest_array_ipool",
+       },
 #endif
        {
                .size = sizeof(struct mlx5_flow_meter),
@@ -925,6 +947,14 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,
                goto error;
        }
        if (sh->devx) {
+               /* Query the EQN for this core. */
+               err = mlx5_glue->devx_query_eqn(sh->ctx, 0, &sh->eqn);
+               if (err) {
+                       rte_errno = errno;
+                       DRV_LOG(ERR, "Failed to query event queue number %d.",
+                               rte_errno);
+                       goto error;
+               }
                err = mlx5_os_get_pdn(sh->pd, &sh->pdn);
                if (err) {
                        DRV_LOG(ERR, "Fail to extract pdn from PD");
@@ -1341,7 +1371,7 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev)
  * @param dev
  *   Pointer to Ethernet device structure.
  */
-void
+int
 mlx5_dev_close(struct rte_eth_dev *dev)
 {
        struct mlx5_priv *priv = dev->data->dev_private;
@@ -1351,14 +1381,14 @@ mlx5_dev_close(struct rte_eth_dev *dev)
        if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
                /* Check if process_private released. */
                if (!dev->process_private)
-                       return;
+                       return 0;
                mlx5_tx_uar_uninit_secondary(dev);
                mlx5_proc_priv_uninit(dev);
                rte_eth_dev_release_port(dev);
-               return;
+               return 0;
        }
        if (!priv->sh)
-               return;
+               return 0;
        DRV_LOG(DEBUG, "port %u closing device \"%s\"",
                dev->data->port_id,
                ((priv->sh->ctx != NULL) ?
@@ -1479,6 +1509,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
         * it is freed when dev_private is freed.
         */
        dev->data->mac_addrs = NULL;
+       return 0;
 }
 
 /**
@@ -2009,6 +2040,7 @@ static int
 mlx5_pci_remove(struct rte_pci_device *pci_dev)
 {
        uint16_t port_id;
+       int ret = 0;
 
        RTE_ETH_FOREACH_DEV_OF(port_id, &pci_dev->device) {
                /*
@@ -2016,11 +2048,11 @@ mlx5_pci_remove(struct rte_pci_device *pci_dev)
                 * call the close function explicitly for secondary process.
                 */
                if (rte_eal_process_type() == RTE_PROC_SECONDARY)
-                       mlx5_dev_close(&rte_eth_devices[port_id]);
+                       ret |= mlx5_dev_close(&rte_eth_devices[port_id]);
                else
-                       rte_eth_dev_close(port_id);
+                       ret |= rte_eth_dev_close(port_id);
        }
-       return 0;
+       return ret == 0 ? 0 : -EIO;
 }
 
 static const struct rte_pci_id mlx5_pci_id_map[] = {