Skip to content

Commit

Permalink
net/mlx4_core: Remove counters table allocation from VF flow
Browse files Browse the repository at this point in the history
Since virtual functions get their counters indices allocation from the PF,
allocate counters indices bitmap only in case the function isn't virtual.

Also, check that the device has counters to allocate before creating the
indices bitmap table.

Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Hadar Hen Zion <hadarh@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eran Ben Elisha authored and David S. Miller committed Jun 16, 2015
1 parent 47d8417 commit 2632d18
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions drivers/net/ethernet/mellanox/mlx4/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2198,6 +2198,9 @@ static int mlx4_init_counters_table(struct mlx4_dev *dev)
if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS))
return -ENOENT;

if (!dev->caps.max_counters)
return -ENOSPC;

nent_pow2 = roundup_pow_of_two(dev->caps.max_counters);
/* reserve last counter index for sink counter */
return mlx4_bitmap_init(&priv->counters_bitmap, nent_pow2,
Expand All @@ -2210,6 +2213,9 @@ static void mlx4_cleanup_counters_table(struct mlx4_dev *dev)
if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS))
return;

if (!dev->caps.max_counters)
return;

mlx4_bitmap_cleanup(&mlx4_priv(dev)->counters_bitmap);
}

Expand Down Expand Up @@ -2425,10 +2431,12 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
goto err_srq_table_free;
}

err = mlx4_init_counters_table(dev);
if (err && err != -ENOENT) {
mlx4_err(dev, "Failed to initialize counters table, aborting\n");
goto err_qp_table_free;
if (!mlx4_is_slave(dev)) {
err = mlx4_init_counters_table(dev);
if (err && err != -ENOENT) {
mlx4_err(dev, "Failed to initialize counters table, aborting\n");
goto err_qp_table_free;
}
}

if (!mlx4_is_slave(dev)) {
Expand Down Expand Up @@ -2470,7 +2478,8 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
return 0;

err_counters_table_free:
mlx4_cleanup_counters_table(dev);
if (!mlx4_is_slave(dev))
mlx4_cleanup_counters_table(dev);

err_qp_table_free:
mlx4_cleanup_qp_table(dev);
Expand Down Expand Up @@ -3203,7 +3212,8 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
for (--port; port >= 1; --port)
mlx4_cleanup_port_info(&priv->port[port]);

mlx4_cleanup_counters_table(dev);
if (!mlx4_is_slave(dev))
mlx4_cleanup_counters_table(dev);
mlx4_cleanup_qp_table(dev);
mlx4_cleanup_srq_table(dev);
mlx4_cleanup_cq_table(dev);
Expand Down Expand Up @@ -3501,7 +3511,8 @@ static void mlx4_unload_one(struct pci_dev *pdev)
mlx4_free_resource_tracker(dev,
RES_TR_FREE_SLAVES_ONLY);

mlx4_cleanup_counters_table(dev);
if (!mlx4_is_slave(dev))
mlx4_cleanup_counters_table(dev);
mlx4_cleanup_qp_table(dev);
mlx4_cleanup_srq_table(dev);
mlx4_cleanup_cq_table(dev);
Expand Down

0 comments on commit 2632d18

Please sign in to comment.