mirror of https://gitee.com/openkylin/linux.git
net/mlx4_core: Unmap UAR also in the case of error flow
If a failure takes place during the EQ creation, we need to unmap the UAR memory block too. Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il> Signed-off-by: Uri Habusha <urih@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2b39a06198
commit
bfc0d8c3de
|
@ -843,6 +843,18 @@ static void __iomem *mlx4_get_eq_uar(struct mlx4_dev *dev, struct mlx4_eq *eq)
|
||||||
return priv->eq_table.uar_map[index] + 0x800 + 8 * (eq->eqn % 4);
|
return priv->eq_table.uar_map[index] + 0x800 + 8 * (eq->eqn % 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mlx4_unmap_uar(struct mlx4_dev *dev)
|
||||||
|
{
|
||||||
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < mlx4_num_eq_uar(dev); ++i)
|
||||||
|
if (priv->eq_table.uar_map[i]) {
|
||||||
|
iounmap(priv->eq_table.uar_map[i]);
|
||||||
|
priv->eq_table.uar_map[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int mlx4_create_eq(struct mlx4_dev *dev, int nent,
|
static int mlx4_create_eq(struct mlx4_dev *dev, int nent,
|
||||||
u8 intr, struct mlx4_eq *eq)
|
u8 intr, struct mlx4_eq *eq)
|
||||||
{
|
{
|
||||||
|
@ -1207,6 +1219,7 @@ int mlx4_init_eq_table(struct mlx4_dev *dev)
|
||||||
mlx4_free_irqs(dev);
|
mlx4_free_irqs(dev);
|
||||||
|
|
||||||
err_out_bitmap:
|
err_out_bitmap:
|
||||||
|
mlx4_unmap_uar(dev);
|
||||||
mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
|
mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
|
||||||
|
|
||||||
err_out_free:
|
err_out_free:
|
||||||
|
@ -1231,10 +1244,7 @@ void mlx4_cleanup_eq_table(struct mlx4_dev *dev)
|
||||||
if (!mlx4_is_slave(dev))
|
if (!mlx4_is_slave(dev))
|
||||||
mlx4_unmap_clr_int(dev);
|
mlx4_unmap_clr_int(dev);
|
||||||
|
|
||||||
for (i = 0; i < mlx4_num_eq_uar(dev); ++i)
|
mlx4_unmap_uar(dev);
|
||||||
if (priv->eq_table.uar_map[i])
|
|
||||||
iounmap(priv->eq_table.uar_map[i]);
|
|
||||||
|
|
||||||
mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
|
mlx4_bitmap_cleanup(&priv->eq_table.bitmap);
|
||||||
|
|
||||||
kfree(priv->eq_table.uar_map);
|
kfree(priv->eq_table.uar_map);
|
||||||
|
|
Loading…
Reference in New Issue