diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/en_cq.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_cq.c | 45 |
1 files changed, 9 insertions, 36 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_cq.c b/drivers/net/ethernet/mellanox/mlx4/en_cq.c index 3a098cc..3e2d504 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_cq.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_cq.c @@ -44,23 +44,12 @@ static void mlx4_en_cq_event(struct mlx4_cq *cq, enum mlx4_event event) int mlx4_en_create_cq(struct mlx4_en_priv *priv, - struct mlx4_en_cq **pcq, - int entries, int ring, enum cq_type mode, - int node) + struct mlx4_en_cq *cq, + int entries, int ring, enum cq_type mode) { struct mlx4_en_dev *mdev = priv->mdev; - struct mlx4_en_cq *cq; int err; - cq = kzalloc_node(sizeof(*cq), GFP_KERNEL, node); - if (!cq) { - cq = kzalloc(sizeof(*cq), GFP_KERNEL); - if (!cq) { - en_err(priv, "Failed to allocate CQ structure\n"); - return -ENOMEM; - } - } - cq->size = entries; cq->buf_size = cq->size * mdev->dev->caps.cqe_size; @@ -68,30 +57,17 @@ int mlx4_en_create_cq(struct mlx4_en_priv *priv, cq->is_tx = mode; spin_lock_init(&cq->lock); - /* Allocate HW buffers on provided NUMA node. - * dev->numa_node is used in mtt range allocation flow. - */ - set_dev_node(&mdev->dev->pdev->dev, node); err = mlx4_alloc_hwq_res(mdev->dev, &cq->wqres, cq->buf_size, 2 * PAGE_SIZE); - set_dev_node(&mdev->dev->pdev->dev, mdev->dev->numa_node); if (err) - goto err_cq; + return err; err = mlx4_en_map_buffer(&cq->wqres.buf); if (err) - goto err_res; + mlx4_free_hwq_res(mdev->dev, &cq->wqres, cq->buf_size); + else + cq->buf = (struct mlx4_cqe *) cq->wqres.buf.direct.buf; - cq->buf = (struct mlx4_cqe *)cq->wqres.buf.direct.buf; - *pcq = cq; - - return 0; - -err_res: - mlx4_free_hwq_res(mdev->dev, &cq->wqres, cq->buf_size); -err_cq: - kfree(cq); - *pcq = NULL; return err; } @@ -141,12 +117,12 @@ int mlx4_en_activate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq, struct mlx4_en_cq *rx_cq; cq_idx = cq_idx % priv->rx_ring_num; - rx_cq = priv->rx_cq[cq_idx]; + rx_cq = &priv->rx_cq[cq_idx]; cq->vector = rx_cq->vector; } if (!cq->is_tx) - cq->size = priv->rx_ring[cq->ring]->actual_size; + cq->size = priv->rx_ring[cq->ring].actual_size; if ((cq->is_tx && priv->hwtstamp_config.tx_type) || (!cq->is_tx && priv->hwtstamp_config.rx_filter)) @@ -170,10 +146,9 @@ int mlx4_en_activate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq, return 0; } -void mlx4_en_destroy_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq **pcq) +void mlx4_en_destroy_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq) { struct mlx4_en_dev *mdev = priv->mdev; - struct mlx4_en_cq *cq = *pcq; mlx4_en_unmap_buffer(&cq->wqres.buf); mlx4_free_hwq_res(mdev->dev, &cq->wqres, cq->buf_size); @@ -182,8 +157,6 @@ void mlx4_en_destroy_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq **pcq) cq->vector = 0; cq->buf_size = 0; cq->buf = NULL; - kfree(cq); - *pcq = NULL; } void mlx4_en_deactivate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq) |