|
@@ -140,7 +140,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
|
|
props->max_mr_size = ~0ull;
|
|
props->max_mr_size = ~0ull;
|
|
props->page_size_cap = dev->dev->caps.page_size_cap;
|
|
props->page_size_cap = dev->dev->caps.page_size_cap;
|
|
props->max_qp = dev->dev->caps.num_qps - dev->dev->caps.reserved_qps;
|
|
props->max_qp = dev->dev->caps.num_qps - dev->dev->caps.reserved_qps;
|
|
- props->max_qp_wr = dev->dev->caps.max_wqes;
|
|
|
|
|
|
+ props->max_qp_wr = dev->dev->caps.max_wqes - MLX4_IB_SQ_MAX_SPARE;
|
|
props->max_sge = min(dev->dev->caps.max_sq_sg,
|
|
props->max_sge = min(dev->dev->caps.max_sq_sg,
|
|
dev->dev->caps.max_rq_sg);
|
|
dev->dev->caps.max_rq_sg);
|
|
props->max_cq = dev->dev->caps.num_cqs - dev->dev->caps.reserved_cqs;
|
|
props->max_cq = dev->dev->caps.num_cqs - dev->dev->caps.reserved_cqs;
|
|
@@ -1084,12 +1084,9 @@ static void mlx4_ib_alloc_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
|
|
int total_eqs = 0;
|
|
int total_eqs = 0;
|
|
int i, j, eq;
|
|
int i, j, eq;
|
|
|
|
|
|
- /* Init eq table */
|
|
|
|
- ibdev->eq_table = NULL;
|
|
|
|
- ibdev->eq_added = 0;
|
|
|
|
-
|
|
|
|
- /* Legacy mode? */
|
|
|
|
- if (dev->caps.comp_pool == 0)
|
|
|
|
|
|
+ /* Legacy mode or comp_pool is not large enough */
|
|
|
|
+ if (dev->caps.comp_pool == 0 ||
|
|
|
|
+ dev->caps.num_ports > dev->caps.comp_pool)
|
|
return;
|
|
return;
|
|
|
|
|
|
eq_per_port = rounddown_pow_of_two(dev->caps.comp_pool/
|
|
eq_per_port = rounddown_pow_of_two(dev->caps.comp_pool/
|
|
@@ -1135,7 +1132,10 @@ static void mlx4_ib_alloc_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
|
|
static void mlx4_ib_free_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
|
|
static void mlx4_ib_free_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
- int total_eqs;
|
|
|
|
|
|
+
|
|
|
|
+ /* no additional eqs were added */
|
|
|
|
+ if (!ibdev->eq_table)
|
|
|
|
+ return;
|
|
|
|
|
|
/* Reset the advertised EQ number */
|
|
/* Reset the advertised EQ number */
|
|
ibdev->ib_dev.num_comp_vectors = dev->caps.num_comp_vectors;
|
|
ibdev->ib_dev.num_comp_vectors = dev->caps.num_comp_vectors;
|
|
@@ -1148,12 +1148,7 @@ static void mlx4_ib_free_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
|
|
mlx4_release_eq(dev, ibdev->eq_table[i]);
|
|
mlx4_release_eq(dev, ibdev->eq_table[i]);
|
|
}
|
|
}
|
|
|
|
|
|
- total_eqs = dev->caps.num_comp_vectors + ibdev->eq_added;
|
|
|
|
- memset(ibdev->eq_table, 0, total_eqs * sizeof(int));
|
|
|
|
kfree(ibdev->eq_table);
|
|
kfree(ibdev->eq_table);
|
|
-
|
|
|
|
- ibdev->eq_table = NULL;
|
|
|
|
- ibdev->eq_added = 0;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void *mlx4_ib_add(struct mlx4_dev *dev)
|
|
static void *mlx4_ib_add(struct mlx4_dev *dev)
|