OSDN Git Service

net/mlx4_en: Release TX QP when destroying TX ring
[android-x86/kernel.git] / drivers / net / ethernet / mellanox / mlx4 / en_netdev.c
index ebce5bb..f30c322 100644 (file)
@@ -1467,6 +1467,7 @@ static void mlx4_en_service_task(struct work_struct *work)
                if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
                        mlx4_en_ptp_overflow_check(mdev);
 
+               mlx4_en_recover_from_oom(priv);
                queue_delayed_work(mdev->workqueue, &priv->service_task,
                                   SERVICE_TASK_DELAY);
        }
@@ -1970,10 +1971,6 @@ void mlx4_en_free_resources(struct mlx4_en_priv *priv)
                        mlx4_en_destroy_cq(priv, &priv->rx_cq[i]);
        }
 
-       if (priv->base_tx_qpn) {
-               mlx4_qp_release_range(priv->mdev->dev, priv->base_tx_qpn, priv->tx_ring_num);
-               priv->base_tx_qpn = 0;
-       }
 }
 
 int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
@@ -2805,13 +2802,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
        netif_carrier_off(dev);
        mlx4_en_set_default_moderation(priv);
 
-       err = register_netdev(dev);
-       if (err) {
-               en_err(priv, "Netdev registration failed for port %d\n", port);
-               goto out;
-       }
-       priv->registered = 1;
-
        en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num);
        en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);
 
@@ -2853,6 +2843,14 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
 
        mlx4_set_stats_bitmap(mdev->dev, &priv->stats_bitmap);
 
+       err = register_netdev(dev);
+       if (err) {
+               en_err(priv, "Netdev registration failed for port %d\n", port);
+               goto out;
+       }
+
+       priv->registered = 1;
+
        return 0;
 
 out: