|
@@ -1692,11 +1692,19 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
|
|
|
goto err_xrcd_table_free;
|
|
|
}
|
|
|
|
|
|
+ if (!mlx4_is_slave(dev)) {
|
|
|
+ err = mlx4_init_mcg_table(dev);
|
|
|
+ if (err) {
|
|
|
+ mlx4_err(dev, "Failed to initialize multicast group table, aborting.\n");
|
|
|
+ goto err_mr_table_free;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
err = mlx4_init_eq_table(dev);
|
|
|
if (err) {
|
|
|
mlx4_err(dev, "Failed to initialize "
|
|
|
"event queue table, aborting.\n");
|
|
|
- goto err_mr_table_free;
|
|
|
+ goto err_mcg_table_free;
|
|
|
}
|
|
|
|
|
|
err = mlx4_cmd_use_events(dev);
|
|
@@ -1746,19 +1754,10 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
|
|
|
goto err_srq_table_free;
|
|
|
}
|
|
|
|
|
|
- if (!mlx4_is_slave(dev)) {
|
|
|
- err = mlx4_init_mcg_table(dev);
|
|
|
- if (err) {
|
|
|
- mlx4_err(dev, "Failed to initialize "
|
|
|
- "multicast group table, aborting.\n");
|
|
|
- goto err_qp_table_free;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
err = mlx4_init_counters_table(dev);
|
|
|
if (err && err != -ENOENT) {
|
|
|
mlx4_err(dev, "Failed to initialize counters table, aborting.\n");
|
|
|
- goto err_mcg_table_free;
|
|
|
+ goto err_qp_table_free;
|
|
|
}
|
|
|
|
|
|
if (!mlx4_is_slave(dev)) {
|
|
@@ -1803,9 +1802,6 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
|
|
|
err_counters_table_free:
|
|
|
mlx4_cleanup_counters_table(dev);
|
|
|
|
|
|
-err_mcg_table_free:
|
|
|
- mlx4_cleanup_mcg_table(dev);
|
|
|
-
|
|
|
err_qp_table_free:
|
|
|
mlx4_cleanup_qp_table(dev);
|
|
|
|
|
@@ -1821,6 +1817,10 @@ err_cmd_poll:
|
|
|
err_eq_table_free:
|
|
|
mlx4_cleanup_eq_table(dev);
|
|
|
|
|
|
+err_mcg_table_free:
|
|
|
+ if (!mlx4_is_slave(dev))
|
|
|
+ mlx4_cleanup_mcg_table(dev);
|
|
|
+
|
|
|
err_mr_table_free:
|
|
|
mlx4_cleanup_mr_table(dev);
|
|
|
|
|
@@ -2197,6 +2197,9 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ atomic_set(&priv->opreq_count, 0);
|
|
|
+ INIT_WORK(&priv->opreq_task, mlx4_opreq_action);
|
|
|
+
|
|
|
/*
|
|
|
* Now reset the HCA before we touch the PCI capabilities or
|
|
|
* attempt a firmware command, since a boot ROM may have left
|
|
@@ -2315,12 +2318,12 @@ err_port:
|
|
|
mlx4_cleanup_port_info(&priv->port[port]);
|
|
|
|
|
|
mlx4_cleanup_counters_table(dev);
|
|
|
- mlx4_cleanup_mcg_table(dev);
|
|
|
mlx4_cleanup_qp_table(dev);
|
|
|
mlx4_cleanup_srq_table(dev);
|
|
|
mlx4_cleanup_cq_table(dev);
|
|
|
mlx4_cmd_use_polling(dev);
|
|
|
mlx4_cleanup_eq_table(dev);
|
|
|
+ mlx4_cleanup_mcg_table(dev);
|
|
|
mlx4_cleanup_mr_table(dev);
|
|
|
mlx4_cleanup_xrcd_table(dev);
|
|
|
mlx4_cleanup_pd_table(dev);
|
|
@@ -2403,12 +2406,12 @@ static void mlx4_remove_one(struct pci_dev *pdev)
|
|
|
RES_TR_FREE_SLAVES_ONLY);
|
|
|
|
|
|
mlx4_cleanup_counters_table(dev);
|
|
|
- mlx4_cleanup_mcg_table(dev);
|
|
|
mlx4_cleanup_qp_table(dev);
|
|
|
mlx4_cleanup_srq_table(dev);
|
|
|
mlx4_cleanup_cq_table(dev);
|
|
|
mlx4_cmd_use_polling(dev);
|
|
|
mlx4_cleanup_eq_table(dev);
|
|
|
+ mlx4_cleanup_mcg_table(dev);
|
|
|
mlx4_cleanup_mr_table(dev);
|
|
|
mlx4_cleanup_xrcd_table(dev);
|
|
|
mlx4_cleanup_pd_table(dev);
|