net/mlx4_core: Fix mem leak in SRIOV mlx4_init_one error flow
[cascardo/linux.git] / drivers / net / ethernet / mellanox / mlx4 / main.c
index 9c7ef0b..cc9f484 100644 (file)
@@ -797,6 +797,7 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
        dev->caps.num_mpts              = 1 << hca_param.log_mpt_sz;
        dev->caps.num_eqs               = func_cap.max_eq;
        dev->caps.reserved_eqs          = func_cap.reserved_eq;
+       dev->caps.reserved_lkey         = func_cap.reserved_lkey;
        dev->caps.num_pds               = MLX4_NUM_PDS;
        dev->caps.num_mgms              = 0;
        dev->caps.num_amgms             = 0;
@@ -1806,8 +1807,7 @@ static void choose_tunnel_offload_mode(struct mlx4_dev *dev,
                                       struct mlx4_dev_cap *dev_cap)
 {
        if (dev->caps.steering_mode == MLX4_STEERING_MODE_DEVICE_MANAGED &&
-           dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS &&
-           dev->caps.dmfs_high_steer_mode != MLX4_STEERING_DMFS_A0_STATIC)
+           dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS)
                dev->caps.tunnel_offload_mode = MLX4_TUNNEL_OFFLOAD_MODE_VXLAN;
        else
                dev->caps.tunnel_offload_mode = MLX4_TUNNEL_OFFLOAD_MODE_NONE;
@@ -2979,8 +2979,10 @@ err_free_eq:
        mlx4_free_eq_table(dev);
 
 err_master_mfunc:
-       if (mlx4_is_master(dev))
+       if (mlx4_is_master(dev)) {
+               mlx4_free_resource_tracker(dev, RES_TR_FREE_STRUCTS_ONLY);
                mlx4_multi_func_cleanup(dev);
+       }
 
        if (mlx4_is_slave(dev)) {
                kfree(dev->caps.qp0_qkey);