aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4/main.c
diff options
context:
space:
mode:
authorSean Hefty <sean.hefty@intel.com>2011-06-02 12:01:33 -0400
committerRoland Dreier <roland@purestorage.com>2011-10-13 12:43:03 -0400
commit012a8ff577f95211c6ffd3b77a94c34ebae009b6 (patch)
tree7d1e8d3ca131cc46ca12e879c4554870e0be76f2 /drivers/net/mlx4/main.c
parent2622e18ef407a8e8e3ddc3d6f0c77b756c493798 (diff)
IB/mlx4: Add support for XRC domains
Support creating and destroying XRC domains. Any sharing of the XRCD is managed above the low-level driver. Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/net/mlx4/main.c')
-rw-r--r--drivers/net/mlx4/main.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index f0ee35df4dd7..660b691ede76 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -220,6 +220,10 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
220 dev->caps.reserved_mrws = dev_cap->reserved_mrws; 220 dev->caps.reserved_mrws = dev_cap->reserved_mrws;
221 dev->caps.reserved_uars = dev_cap->reserved_uars; 221 dev->caps.reserved_uars = dev_cap->reserved_uars;
222 dev->caps.reserved_pds = dev_cap->reserved_pds; 222 dev->caps.reserved_pds = dev_cap->reserved_pds;
223 dev->caps.reserved_xrcds = (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) ?
224 dev_cap->reserved_xrcds : 0;
225 dev->caps.max_xrcds = (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) ?
226 dev_cap->max_xrcds : 0;
223 dev->caps.mtt_entry_sz = dev->caps.mtts_per_seg * dev_cap->mtt_entry_sz; 227 dev->caps.mtt_entry_sz = dev->caps.mtts_per_seg * dev_cap->mtt_entry_sz;
224 dev->caps.max_msg_sz = dev_cap->max_msg_sz; 228 dev->caps.max_msg_sz = dev_cap->max_msg_sz;
225 dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1); 229 dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1);
@@ -912,11 +916,18 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
912 goto err_kar_unmap; 916 goto err_kar_unmap;
913 } 917 }
914 918
919 err = mlx4_init_xrcd_table(dev);
920 if (err) {
921 mlx4_err(dev, "Failed to initialize "
922 "reliable connection domain table, aborting.\n");
923 goto err_pd_table_free;
924 }
925
915 err = mlx4_init_mr_table(dev); 926 err = mlx4_init_mr_table(dev);
916 if (err) { 927 if (err) {
917 mlx4_err(dev, "Failed to initialize " 928 mlx4_err(dev, "Failed to initialize "
918 "memory region table, aborting.\n"); 929 "memory region table, aborting.\n");
919 goto err_pd_table_free; 930 goto err_xrcd_table_free;
920 } 931 }
921 932
922 err = mlx4_init_eq_table(dev); 933 err = mlx4_init_eq_table(dev);
@@ -1033,6 +1044,9 @@ err_eq_table_free:
1033err_mr_table_free: 1044err_mr_table_free:
1034 mlx4_cleanup_mr_table(dev); 1045 mlx4_cleanup_mr_table(dev);
1035 1046
1047err_xrcd_table_free:
1048 mlx4_cleanup_xrcd_table(dev);
1049
1036err_pd_table_free: 1050err_pd_table_free:
1037 mlx4_cleanup_pd_table(dev); 1051 mlx4_cleanup_pd_table(dev);
1038 1052
@@ -1355,6 +1369,7 @@ err_port:
1355 mlx4_cmd_use_polling(dev); 1369 mlx4_cmd_use_polling(dev);
1356 mlx4_cleanup_eq_table(dev); 1370 mlx4_cleanup_eq_table(dev);
1357 mlx4_cleanup_mr_table(dev); 1371 mlx4_cleanup_mr_table(dev);
1372 mlx4_cleanup_xrcd_table(dev);
1358 mlx4_cleanup_pd_table(dev); 1373 mlx4_cleanup_pd_table(dev);
1359 mlx4_cleanup_uar_table(dev); 1374 mlx4_cleanup_uar_table(dev);
1360 1375
@@ -1416,6 +1431,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
1416 mlx4_cmd_use_polling(dev); 1431 mlx4_cmd_use_polling(dev);
1417 mlx4_cleanup_eq_table(dev); 1432 mlx4_cleanup_eq_table(dev);
1418 mlx4_cleanup_mr_table(dev); 1433 mlx4_cleanup_mr_table(dev);
1434 mlx4_cleanup_xrcd_table(dev);
1419 mlx4_cleanup_pd_table(dev); 1435 mlx4_cleanup_pd_table(dev);
1420 1436
1421 iounmap(priv->kar); 1437 iounmap(priv->kar);