diff options
author | Yevgeny Petrilin <yevgenyp@mellanox.co.il> | 2009-05-23 23:17:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-25 03:35:53 -0400 |
commit | 38aab07c14adbf3c7257793d764a91923341e96a (patch) | |
tree | ac27575621410056b4ec970db6b233a50600d15b /drivers/net/mlx4/en_cq.c | |
parent | 8e29291650ee53a8609d9cc3a303dcbe9aa9b542 (diff) |
mlx4_en: Fix partial rings feature
In case of allocation failure, the actual ring size is rounded down to
nearest power of 2. The remaining descriptors are freed.
The CQ and SRQ are allocated with the actual size and the mask is updated.
Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/mlx4/en_cq.c')
-rw-r--r-- | drivers/net/mlx4/en_cq.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/mlx4/en_cq.c b/drivers/net/mlx4/en_cq.c index a276125b709b..21786ad4455e 100644 --- a/drivers/net/mlx4/en_cq.c +++ b/drivers/net/mlx4/en_cq.c | |||
@@ -89,6 +89,9 @@ int mlx4_en_activate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq) | |||
89 | *cq->mcq.arm_db = 0; | 89 | *cq->mcq.arm_db = 0; |
90 | memset(cq->buf, 0, cq->buf_size); | 90 | memset(cq->buf, 0, cq->buf_size); |
91 | 91 | ||
92 | if (!cq->is_tx) | ||
93 | cq->size = priv->rx_ring[cq->ring].actual_size; | ||
94 | |||
92 | err = mlx4_cq_alloc(mdev->dev, cq->size, &cq->wqres.mtt, &mdev->priv_uar, | 95 | err = mlx4_cq_alloc(mdev->dev, cq->size, &cq->wqres.mtt, &mdev->priv_uar, |
93 | cq->wqres.db.dma, &cq->mcq, cq->vector, cq->is_tx); | 96 | cq->wqres.db.dma, &cq->mcq, cq->vector, cq->is_tx); |
94 | if (err) | 97 | if (err) |