From: Leonid Arsh <[EMAIL PROTECTED]>

Adds module parameters that enable settting some of the HCA
profile values.
Signed-off-by: Leonid Arsh <[EMAIL PROTECTED]>
Signed-off-by: Moni Shoua <[EMAIL PROTECTED]>
---
 mthca_main.c |  104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 101 insertions(+), 3 deletions(-)
--- mthca_main.c.orig   2006-11-14 22:07:58.000000000 -0500
+++ mthca_main.c        2006-11-15 09:42:30.151093815 -0500
@@ -80,9 +80,6 @@
 module_param(tune_pci, int, 0444);
 MODULE_PARM_DESC(tune_pci, "increase PCI burst from the default set by BIOS if 
nonzero");
 
-static const char mthca_version[] __devinitdata =
-       DRV_NAME ": Mellanox InfiniBand HCA driver v"
-       DRV_VERSION " (" DRV_RELDATE ")\n";
 
 static struct mthca_profile default_profile = {
        .num_qp            = 1 << 16,
@@ -96,6 +93,103 @@
        .uarc_size         = 1 << 18,   /* Arbel only */
 };
 
+module_param_named(num_qp, default_profile.num_qp, int, 0444);
+MODULE_PARM_DESC(num_qp, "maximum number of available QPs per HCA");
+
+module_param_named(rdb_per_qp, default_profile.rdb_per_qp, int, 0444);
+MODULE_PARM_DESC(rdb_per_qp, "number of RDB buffers per QP");
+
+module_param_named(num_cq, default_profile.num_cq, int, 0444);
+MODULE_PARM_DESC(num_cq, "maximum number of CQs per HCA");
+
+module_param_named(num_mcg, default_profile.num_mcg, int, 0444);
+MODULE_PARM_DESC(num_mcg, "maximum number of multicast groups per HCA");
+
+module_param_named(num_mpt, default_profile.num_mpt, int, 0444);
+MODULE_PARM_DESC(num_mpt, 
+               "maximum number of memory protection pable entries per HCA");
+
+module_param_named(num_mtt, default_profile.num_mtt, int, 0444);
+MODULE_PARM_DESC(num_mtt,
+                "maximum number of memory translation table segments per HCA");
+/* Tavor only */
+module_param_named(num_udav, default_profile.num_udav, int, 0444);
+MODULE_PARM_DESC(num_udav, "maximum number of UD address vectors per HCA");
+
+/* Tavor only */
+module_param_named(fmr_reserved_mtts, default_profile.fmr_reserved_mtts, int, 
0444);
+MODULE_PARM_DESC(fmr_reserved_mtts,
+                "number of memory translation table segments reserved for 
FMR");
+
+static const char mthca_version[] __devinitdata =
+       DRV_NAME ": Mellanox InfiniBand HCA driver v"
+       DRV_VERSION " (" DRV_RELDATE ")\n";
+
+#define is_power_of_2(x) (x>0 &&(x & (x - 1)))
+#define to_up_power_of_2(x) (x = roundup_pow_of_two(x))
+static int __devinit mthca_validate_profile(struct mthca_dev *mdev,
+                                           struct mthca_profile *profile)
+{
+       if (!is_power_of_2(default_profile.num_qp)){
+               to_up_power_of_2(default_profile.num_qp);
+               mthca_warn(mdev, "num_qp rounded to power of 2 (%d).\n",
+                         default_profile.num_qp); 
+       }
+
+       if (!is_power_of_2(default_profile.rdb_per_qp)){
+               to_up_power_of_2(default_profile.rdb_per_qp);
+               mthca_warn(mdev, "rdb_per_qp rounded to power of 2 (%d)\n",
+                         default_profile.rdb_per_qp); 
+       }
+
+       if (!is_power_of_2(default_profile.num_cq)){
+               to_up_power_of_2(default_profile.num_cq);
+               mthca_warn(mdev, "num_cq rounded to power of 2 (%d)\n",
+                         default_profile.num_cq); 
+       }
+
+       if (!is_power_of_2(default_profile.num_mcg)){
+               to_up_power_of_2(default_profile.num_mcg);
+               mthca_warn(mdev, "num_mcg rounded to power of 2 (%d)\n",
+                         default_profile.num_mcg); 
+       }
+       if (!is_power_of_2(default_profile.num_mpt)){
+               to_up_power_of_2(default_profile.num_mpt);
+               mthca_warn(mdev, "num_mpt rounded to power of 2 (%d)\n",
+                         default_profile.num_mpt); 
+       }
+
+       if (!is_power_of_2(default_profile.num_mtt)){
+               to_up_power_of_2(default_profile.num_mtt);
+               mthca_warn(mdev, "num_mtt rounded to power of 2 (%d)\n",
+                         default_profile.num_mtt); 
+       }
+
+       if (mthca_is_memfree(mdev)) {
+               if (!is_power_of_2(default_profile.num_udav)){
+                       to_up_power_of_2(default_profile.num_udav);
+                       mthca_warn(mdev, "num_udav rounded to power of 2 
(%d)\n",
+                                 default_profile.num_udav); 
+               }
+
+               if (!is_power_of_2(default_profile.fmr_reserved_mtts)){
+                       to_up_power_of_2(default_profile.fmr_reserved_mtts);
+                       mthca_warn(mdev, "fmr_reserved_mtts rounded to power of 
2 (%d)\n",
+                                 default_profile.fmr_reserved_mtts); 
+               }
+               if (default_profile.fmr_reserved_mtts >= 
default_profile.num_mtt ) {
+                       mthca_err(mdev,
+                                 "Invalid fmr_reserved_mtts parameter value 
(%d). "
+                                 "Must be lower then num_mtt (%d)\n",
+                                 default_profile.fmr_reserved_mtts,
+                                 default_profile.num_mtt ); 
+                       return -EINVAL;
+               }
+       }
+
+       return 0;
+}
+
 static int __devinit mthca_tune_pci(struct mthca_dev *mdev)
 {
        int cap;
@@ -1095,6 +1189,10 @@
        if (err)
                goto err_cmd;
 
+       err = mthca_validate_profile(mdev, &default_profile);
+       if (err)
+               goto err_cmd;
+
        err = mthca_init_hca(mdev);
        if (err)
                goto err_cmd;
        



_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to