summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/main.c
diff options
context:
space:
mode:
authorYishai Hadas2015-01-25 15:59:37 +0100
committerDavid S. Miller2015-01-25 23:43:14 +0100
commitad9a0bf08ffbf32b8f292c3bb78ca0f24bb8f6b2 (patch)
tree308abce801c5d44e999a6ba64d3afac2557fd688 /drivers/net/ethernet/mellanox/mlx4/main.c
parentnet/mlx4_core: Set device configuration data to be persistent across reset (diff)
downloadkernel-qcow2-linux-ad9a0bf08ffbf32b8f292c3bb78ca0f24bb8f6b2.tar.gz
kernel-qcow2-linux-ad9a0bf08ffbf32b8f292c3bb78ca0f24bb8f6b2.tar.xz
kernel-qcow2-linux-ad9a0bf08ffbf32b8f292c3bb78ca0f24bb8f6b2.zip
net/mlx4_core: Refactor the catas flow to work per device
Using a WQ per device instead of a single global WQ, this allows independent reset handling per device even when SRIOV is used. This comes as a pre-patch for supporting chip reset for both native and SRIOV. Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/main.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 2c5a555dff89..a61694cc1476 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -3064,11 +3064,19 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data,
}
}
- err = mlx4_load_one(pdev, pci_dev_data, total_vfs, nvfs, priv);
+ err = mlx4_catas_init(&priv->dev);
if (err)
goto err_release_regions;
+
+ err = mlx4_load_one(pdev, pci_dev_data, total_vfs, nvfs, priv);
+ if (err)
+ goto err_catas;
+
return 0;
+err_catas:
+ mlx4_catas_end(&priv->dev);
+
err_release_regions:
pci_release_regions(pdev);
@@ -3219,6 +3227,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
struct mlx4_priv *priv = mlx4_priv(dev);
mlx4_unload_one(pdev);
+ mlx4_catas_end(dev);
pci_release_regions(pdev);
pci_disable_device(pdev);
kfree(dev->persist);
@@ -3403,7 +3412,6 @@ static int __init mlx4_init(void)
if (mlx4_verify_params())
return -EINVAL;
- mlx4_catas_init();
mlx4_wq = create_singlethread_workqueue("mlx4");
if (!mlx4_wq)