aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4
diff options
context:
space:
mode:
authorYevgeny Petrilin <yevgenyp@mellanox.co.il>2009-06-08 03:39:58 -0400
committerDavid S. Miller <davem@davemloft.net>2009-06-08 03:39:58 -0400
commita5b19b635c39fdb819500b0a746b44fe40c9a303 (patch)
tree454fd8cee549ec12d9abc8604cae826e7b844d9b /drivers/net/mlx4
parent6f536f403979d37021508c5804509a379d853788 (diff)
mlx4: FIX error flow when initializing EQ table
If mlx4_create_eq() would fail for one of EQ's assigned for completion handling, the code would try to free the same EQ we failed to create. The crash was found by Christoph Lameter Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/mlx4')
-rw-r--r--drivers/net/mlx4/eq.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/mlx4/eq.c b/drivers/net/mlx4/eq.c
index 8830dcb92ec8..dee188761a3c 100644
--- a/drivers/net/mlx4/eq.c
+++ b/drivers/net/mlx4/eq.c
@@ -623,8 +623,10 @@ int mlx4_init_eq_table(struct mlx4_dev *dev)
623 err = mlx4_create_eq(dev, dev->caps.num_cqs + MLX4_NUM_SPARE_EQE, 623 err = mlx4_create_eq(dev, dev->caps.num_cqs + MLX4_NUM_SPARE_EQE,
624 (dev->flags & MLX4_FLAG_MSI_X) ? i : 0, 624 (dev->flags & MLX4_FLAG_MSI_X) ? i : 0,
625 &priv->eq_table.eq[i]); 625 &priv->eq_table.eq[i]);
626 if (err) 626 if (err) {
627 --i;
627 goto err_out_unmap; 628 goto err_out_unmap;
629 }
628 } 630 }
629 631
630 err = mlx4_create_eq(dev, MLX4_NUM_ASYNC_EQE + MLX4_NUM_SPARE_EQE, 632 err = mlx4_create_eq(dev, MLX4_NUM_ASYNC_EQE + MLX4_NUM_SPARE_EQE,